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/*
24 * Documentation used while implementing this component:
25 *
26 * [1] "MIPSĀ® Architecture Base: nanoMIPS32(tm) Instruction Set Technical
27 * Reference Manual", Revision 01.01, April 27, 2018
28 */
29
30extern "C" {
31#include "qemu/osdep.h"
32#include "disas/dis-asm.h"
33}
34
35#include <cstring>
36#include <stdexcept>
37#include <sstream>
38#include <stdio.h>
39#include <stdarg.h>
40
41#include "nanomips.h"
42
43#define IMGASSERTONCE(test)
44
45
46int nanomips_dis(char *buf,
47 unsigned address,
48 unsigned short one,
49 unsigned short two,
50 unsigned short three)
51{
52 std::string disasm;
53 uint16 bits[3] = {one, two, three};
54
55 NMD::TABLE_ENTRY_TYPE type;
56 NMD d(address, NMD::ALL_ATTRIBUTES);
57 int size = d.Disassemble(bits, disasm, type);
58
59 strcpy(buf, disasm.c_str());
60 return size;
61}
62
63int print_insn_nanomips(bfd_vma memaddr, struct disassemble_info *info)
64{
65 int status;
66 bfd_byte buffer[2];
67 uint16_t insn1 = 0, insn2 = 0, insn3 = 0;
68 char buf[200];
69
70 info->bytes_per_chunk = 2;
71 info->display_endian = info->endian;
72 info->insn_info_valid = 1;
73 info->branch_delay_insns = 0;
74 info->data_size = 0;
75 info->insn_type = dis_nonbranch;
76 info->target = 0;
77 info->target2 = 0;
78
79 status = (*info->read_memory_func)(memaddr, buffer, 2, info);
80 if (status != 0) {
81 (*info->memory_error_func)(status, memaddr, info);
82 return -1;
83 }
84
85 if (info->endian == BFD_ENDIAN_BIG) {
86 insn1 = bfd_getb16(buffer);
87 } else {
88 insn1 = bfd_getl16(buffer);
89 }
90 (*info->fprintf_func)(info->stream, "%04x ", insn1);
91
92 /* Handle 32-bit opcodes. */
93 if ((insn1 & 0x1000) == 0) {
94 status = (*info->read_memory_func)(memaddr + 2, buffer, 2, info);
95 if (status != 0) {
96 (*info->memory_error_func)(status, memaddr + 2, info);
97 return -1;
98 }
99
100 if (info->endian == BFD_ENDIAN_BIG) {
101 insn2 = bfd_getb16(buffer);
102 } else {
103 insn2 = bfd_getl16(buffer);
104 }
105 (*info->fprintf_func)(info->stream, "%04x ", insn2);
106 } else {
107 (*info->fprintf_func)(info->stream, " ");
108 }
109 /* Handle 48-bit opcodes. */
110 if ((insn1 >> 10) == 0x18) {
111 status = (*info->read_memory_func)(memaddr + 4, buffer, 2, info);
112 if (status != 0) {
113 (*info->memory_error_func)(status, memaddr + 4, info);
114 return -1;
115 }
116
117 if (info->endian == BFD_ENDIAN_BIG) {
118 insn3 = bfd_getb16(buffer);
119 } else {
120 insn3 = bfd_getl16(buffer);
121 }
122 (*info->fprintf_func)(info->stream, "%04x ", insn3);
123 } else {
124 (*info->fprintf_func)(info->stream, " ");
125 }
126
127 int length = nanomips_dis(buf, memaddr, insn1, insn2, insn3);
128
129 /* FIXME: Should probably use a hash table on the major opcode here. */
130
131 (*info->fprintf_func) (info->stream, "%s", buf);
132 if (length > 0) {
133 return length / 8;
134 }
135
136 info->insn_type = dis_noninsn;
137
138 return insn3 ? 6 : insn2 ? 4 : 2;
139}
140
141
142namespace img
143{
144 address addr32(address a)
145 {
146 return a;
147 }
148
149 std::string format(const char *format, ...)
150 {
151 char buffer[256];
152 va_list args;
153 va_start(args, format);
154 int err = vsprintf(buffer, format, args);
155 if (err < 0) {
156 perror(buffer);
157 }
158 va_end(args);
159 return buffer;
160 }
161
162 std::string format(const char *format,
163 std::string s)
164 {
165 char buffer[256];
166
167 sprintf(buffer, format, s.c_str());
168
169 return buffer;
170 }
171
172 std::string format(const char *format,
173 std::string s1,
174 std::string s2)
175 {
176 char buffer[256];
177
178 sprintf(buffer, format, s1.c_str(), s2.c_str());
179
180 return buffer;
181 }
182
183 std::string format(const char *format,
184 std::string s1,
185 std::string s2,
186 std::string s3)
187 {
188 char buffer[256];
189
190 sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str());
191
192 return buffer;
193 }
194
195 std::string format(const char *format,
196 std::string s1,
197 std::string s2,
198 std::string s3,
199 std::string s4)
200 {
201 char buffer[256];
202
203 sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str(),
204 s4.c_str());
205
206 return buffer;
207 }
208
209 std::string format(const char *format,
210 std::string s1,
211 std::string s2,
212 std::string s3,
213 std::string s4,
214 std::string s5)
215 {
216 char buffer[256];
217
218 sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str(),
219 s4.c_str(), s5.c_str());
220
221 return buffer;
222 }
223
224 std::string format(const char *format,
225 uint64 d,
226 std::string s2)
227 {
228 char buffer[256];
229
230 sprintf(buffer, format, d, s2.c_str());
231
232 return buffer;
233 }
234
235 std::string format(const char *format,
236 std::string s1,
237 uint64 d,
238 std::string s2)
239 {
240 char buffer[256];
241
242 sprintf(buffer, format, s1.c_str(), d, s2.c_str());
243
244 return buffer;
245 }
246
247 std::string format(const char *format,
248 std::string s1,
249 std::string s2,
250 uint64 d)
251 {
252 char buffer[256];
253
254 sprintf(buffer, format, s1.c_str(), s2.c_str(), d);
255
256 return buffer;
257 }
258
259 char as_char(int c)
260 {
261 return static_cast<char>(c);
262 }
263};
264
265
266std::string to_string(img::address a)
267{
268 char buffer[256];
269 sprintf(buffer, "0x%" PRIx64, a);
270 return buffer;
271}
272
273
274uint64 extract_bits(uint64 data, uint32 bit_offset, uint32 bit_size)
275{
276 return (data << (64 - (bit_size + bit_offset))) >> (64 - bit_size);
277}
278
279
280int64 sign_extend(int64 data, int msb)
281{
282 uint64 shift = 63 - msb;
283 return (data << shift) >> shift;
284}
285
286
287uint64 NMD::renumber_registers(uint64 index, uint64 *register_list,
288 size_t register_list_size)
289{
290 if (index < register_list_size) {
291 return register_list[index];
292 }
293
294 throw std::runtime_error(img::format(
295 "Invalid register mapping index %" PRIu64
296 ", size of list = %zu",
297 index, register_list_size));
298}
299
300
301/*
302 * NMD::decode_gpr_gpr4() - decoder for 'gpr4' gpr encoding type
303 *
304 * Map a 4-bit code to the 5-bit register space according to this pattern:
305 *
306 * 1 0
307 * 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
308 * | | | | | | | | | | | | | | | |
309 * | | | | | | | | | | | | | | | |
310 * | | | | | | | | | | | ā””---------------ā”
311 * | | | | | | | | | | ā””---------------ā” |
312 * | | | | | | | | | ā””---------------ā” | |
313 * | | | | | | | | ā””---------------ā” | | |
314 * | | | | | | | | | | | | | | | |
315 * | | | | | | | | | | | | | | | |
316 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
317 * 3 2 1 0
318 *
319 * Used in handling following instructions:
320 *
321 * - ADDU[4X4]
322 * - LW[4X4]
323 * - MOVEP[REV]
324 * - MUL[4X4]
325 * - SW[4X4]
326 */
327uint64 NMD::decode_gpr_gpr4(uint64 d)
328{
329 static uint64 register_list[] = { 8, 9, 10, 11, 4, 5, 6, 7,
330 16, 17, 18, 19, 20, 21, 22, 23 };
331 return renumber_registers(d, register_list,
332 sizeof(register_list) / sizeof(register_list[0]));
333}
334
335
336/*
337 * NMD::decode_gpr_gpr4_zero() - decoder for 'gpr4.zero' gpr encoding type
338 *
339 * Map a 4-bit code to the 5-bit register space according to this pattern:
340 *
341 * 1 0
342 * 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
343 * | | | | | | | | | | | | | | | |
344 * | | | | | | | | | | | | ā””---------------------ā”
345 * | | | | | | | | | | | ā””---------------ā” |
346 * | | | | | | | | | | ā””---------------ā” | |
347 * | | | | | | | | | ā””---------------ā” | | |
348 * | | | | | | | | ā””---------------ā” | | | |
349 * | | | | | | | | | | | | | | | |
350 * | | | | | | | | | | | | | | | |
351 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
352 * 3 2 1 0
353 *
354 * This pattern is the same one used for 'gpr4' gpr encoding type, except for
355 * the input value 3, that is mapped to the output value 0 instead of 11.
356 *
357 * Used in handling following instructions:
358 *
359 * - MOVE.BALC
360 * - MOVEP
361 * - SW[4X4]
362 */
363uint64 NMD::decode_gpr_gpr4_zero(uint64 d)
364{
365 static uint64 register_list[] = { 8, 9, 10, 0, 4, 5, 6, 7,
366 16, 17, 18, 19, 20, 21, 22, 23 };
367 return renumber_registers(d, register_list,
368 sizeof(register_list) / sizeof(register_list[0]));
369}
370
371
372/*
373 * NMD::decode_gpr_gpr3() - decoder for 'gpr3' gpr encoding type
374 *
375 * Map a 3-bit code to the 5-bit register space according to this pattern:
376 *
377 * 7 6 5 4 3 2 1 0
378 * | | | | | | | |
379 * | | | | | | | |
380 * | | | ā””-----------------------ā”
381 * | | ā””-----------------------ā” |
382 * | ā””-----------------------ā” | |
383 * ā””-----------------------ā” | | |
384 * | | | | | | | |
385 * ā”Œ-------ā”˜ | | | | | | |
386 * | ā”Œ-------ā”˜ | | | | | |
387 * | | ā”Œ-------ā”˜ | | | | |
388 * | | | ā”Œ-------ā”˜ | | | |
389 * | | | | | | | |
390 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
391 * 3 2 1 0
392 *
393 * Used in handling following instructions:
394 *
395 * - ADDIU[R1.SP]
396 * - ADDIU[R2]
397 * - ADDU[16]
398 * - AND[16]
399 * - ANDI[16]
400 * - BEQC[16]
401 * - BEQZC[16]
402 * - BNEC[16]
403 * - BNEZC[16]
404 * - LB[16]
405 * - LBU[16]
406 * - LH[16]
407 * - LHU[16]
408 * - LI[16]
409 * - LW[16]
410 * - LW[GP16]
411 * - LWXS[16]
412 * - NOT[16]
413 * - OR[16]
414 * - SB[16]
415 * - SH[16]
416 * - SLL[16]
417 * - SRL[16]
418 * - SUBU[16]
419 * - SW[16]
420 * - XOR[16]
421 */
422uint64 NMD::decode_gpr_gpr3(uint64 d)
423{
424 static uint64 register_list[] = { 16, 17, 18, 19, 4, 5, 6, 7 };
425 return renumber_registers(d, register_list,
426 sizeof(register_list) / sizeof(register_list[0]));
427}
428
429
430/*
431 * NMD::decode_gpr_gpr3_src_store() - decoder for 'gpr3.src.store' gpr encoding
432 * type
433 *
434 * Map a 3-bit code to the 5-bit register space according to this pattern:
435 *
436 * 7 6 5 4 3 2 1 0
437 * | | | | | | | |
438 * | | | | | | | ā””-----------------------ā”
439 * | | | ā””-----------------------ā” |
440 * | | ā””-----------------------ā” | |
441 * | ā””-----------------------ā” | | |
442 * ā””-----------------------ā” | | | |
443 * | | | | | | | |
444 * ā”Œ-------ā”˜ | | | | | | |
445 * | ā”Œ-------ā”˜ | | | | | |
446 * | | ā”Œ-------ā”˜ | | | | |
447 * | | | | | | | |
448 * | | | | | | | |
449 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
450 * 3 2 1 0
451 *
452 * This pattern is the same one used for 'gpr3' gpr encoding type, except for
453 * the input value 0, that is mapped to the output value 0 instead of 16.
454 *
455 * Used in handling following instructions:
456 *
457 * - SB[16]
458 * - SH[16]
459 * - SW[16]
460 * - SW[GP16]
461 */
462uint64 NMD::decode_gpr_gpr3_src_store(uint64 d)
463{
464 static uint64 register_list[] = { 0, 17, 18, 19, 4, 5, 6, 7 };
465 return renumber_registers(d, register_list,
466 sizeof(register_list) / sizeof(register_list[0]));
467}
468
469
470/*
471 * NMD::decode_gpr_gpr2_reg1() - decoder for 'gpr2.reg1' gpr encoding type
472 *
473 * Map a 2-bit code to the 5-bit register space according to this pattern:
474 *
475 * 3 2 1 0
476 * | | | |
477 * | | | |
478 * | | | ā””-------------------ā”
479 * | | ā””-------------------ā” |
480 * | ā””-------------------ā” | |
481 * ā””-------------------ā” | | |
482 * | | | |
483 * | | | |
484 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
485 * 3 2 1 0
486 *
487 * Used in handling following instructions:
488 *
489 * - MOVEP
490 * - MOVEP[REV]
491 */
492uint64 NMD::decode_gpr_gpr2_reg1(uint64 d)
493{
494 static uint64 register_list[] = { 4, 5, 6, 7 };
495 return renumber_registers(d, register_list,
496 sizeof(register_list) / sizeof(register_list[0]));
497}
498
499
500/*
501 * NMD::decode_gpr_gpr2_reg2() - decoder for 'gpr2.reg2' gpr encoding type
502 *
503 * Map a 2-bit code to the 5-bit register space according to this pattern:
504 *
505 * 3 2 1 0
506 * | | | |
507 * | | | |
508 * | | | ā””-----------------ā”
509 * | | ā””-----------------ā” |
510 * | ā””-----------------ā” | |
511 * ā””-----------------ā” | | |
512 * | | | |
513 * | | | |
514 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
515 * 3 2 1 0
516 *
517 * Used in handling following instructions:
518 *
519 * - MOVEP
520 * - MOVEP[REV]
521 */
522uint64 NMD::decode_gpr_gpr2_reg2(uint64 d)
523{
524 static uint64 register_list[] = { 5, 6, 7, 8 };
525 return renumber_registers(d, register_list,
526 sizeof(register_list) / sizeof(register_list[0]));
527}
528
529
530/*
531 * NMD::decode_gpr_gpr1() - decoder for 'gpr1' gpr encoding type
532 *
533 * Map a 1-bit code to the 5-bit register space according to this pattern:
534 *
535 * 1 0
536 * | |
537 * | |
538 * | ā””---------------------ā”
539 * ā””---------------------ā” |
540 * | |
541 * | |
542 * | |
543 * | |
544 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
545 * 3 2 1 0
546 *
547 * Used in handling following instruction:
548 *
549 * - MOVE.BALC
550 */
551uint64 NMD::decode_gpr_gpr1(uint64 d)
552{
553 static uint64 register_list[] = { 4, 5 };
554 return renumber_registers(d, register_list,
555 sizeof(register_list) / sizeof(register_list[0]));
556}
557
558
559uint64 NMD::copy(uint64 d)
560{
561 return d;
562}
563
564
565int64 NMD::copy(int64 d)
566{
567 return d;
568}
569
570
571int64 NMD::neg_copy(uint64 d)
572{
573 return 0ll - d;
574}
575
576
577int64 NMD::neg_copy(int64 d)
578{
579 return -d;
580}
581
582
583/* strange wrapper around gpr3 */
584uint64 NMD::encode_rs3_and_check_rs3_ge_rt3(uint64 d)
585{
586return decode_gpr_gpr3(d);
587}
588
589
590/* strange wrapper around gpr3 */
591uint64 NMD::encode_rs3_and_check_rs3_lt_rt3(uint64 d)
592{
593 return decode_gpr_gpr3(d);
594}
595
596
597/* nop - done by extraction function */
598uint64 NMD::encode_s_from_address(uint64 d)
599{
600 return d;
601}
602
603
604/* nop - done by extraction function */
605uint64 NMD::encode_u_from_address(uint64 d)
606{
607 return d;
608}
609
610
611/* nop - done by extraction function */
612uint64 NMD::encode_s_from_s_hi(uint64 d)
613{
614 return d;
615}
616
617
618uint64 NMD::encode_count3_from_count(uint64 d)
619{
620 IMGASSERTONCE(d < 8);
621 return d == 0ull ? 8ull : d;
622}
623
624
625uint64 NMD::encode_shift3_from_shift(uint64 d)
626{
627 IMGASSERTONCE(d < 8);
628 return d == 0ull ? 8ull : d;
629}
630
631
632/* special value for load literal */
633int64 NMD::encode_eu_from_s_li16(uint64 d)
634{
635 IMGASSERTONCE(d < 128);
636 return d == 127 ? -1 : (int64)d;
637}
638
639
640uint64 NMD::encode_msbd_from_size(uint64 d)
641{
642 IMGASSERTONCE(d < 32);
643 return d + 1;
644}
645
646
647uint64 NMD::encode_eu_from_u_andi16(uint64 d)
648{
649 IMGASSERTONCE(d < 16);
650 if (d == 12) {
651 return 0x00ffull;
652 }
653 if (d == 13) {
654 return 0xffffull;
655 }
656 return d;
657}
658
659
660uint64 NMD::encode_msbd_from_pos_and_size(uint64 d)
661{
662 IMGASSERTONCE(0);
663 return d;
664}
665
666
667/* save16 / restore16 ???? */
668uint64 NMD::encode_rt1_from_rt(uint64 d)
669{
670 return d ? 31 : 30;
671}
672
673
674/* ? */
675uint64 NMD::encode_lsb_from_pos_and_size(uint64 d)
676{
677 return d;
678}
679
680
681std::string NMD::save_restore_list(uint64 rt, uint64 count, uint64 gp)
682{
683 std::string str;
684
685 for (uint64 counter = 0; counter != count; counter++) {
686 bool use_gp = gp && (counter == count - 1);
687 uint64 this_rt = use_gp ? 28 : ((rt & 0x10) | (rt + counter)) & 0x1f;
688 str += img::format(",%s", GPR(this_rt));
689 }
690
691 return str;
692}
693
694
695std::string NMD::GPR(uint64 reg)
696{
697 static const char *gpr_reg[32] = {
698 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
699 "a4", "a5", "a6", "a7", "r12", "r13", "r14", "r15",
700 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
701 "r24", "r25", "k0", "k1", "gp", "sp", "fp", "ra"
702 };
703
704 if (reg < 32) {
705 return gpr_reg[reg];
706 }
707
708 throw std::runtime_error(img::format("Invalid GPR register index %" PRIu64,
709 reg));
710}
711
712
713std::string NMD::FPR(uint64 reg)
714{
715 static const char *fpr_reg[32] = {
716 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
717 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
718 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
719 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
720 };
721
722 if (reg < 32) {
723 return fpr_reg[reg];
724 }
725
726 throw std::runtime_error(img::format("Invalid FPR register index %" PRIu64,
727 reg));
728}
729
730
731std::string NMD::AC(uint64 reg)
732{
733 static const char *ac_reg[4] = {
734 "ac0", "ac1", "ac2", "ac3"
735 };
736
737 if (reg < 4) {
738 return ac_reg[reg];
739 }
740
741 throw std::runtime_error(img::format("Invalid AC register index %" PRIu64,
742 reg));
743}
744
745
746std::string NMD::IMMEDIATE(uint64 value)
747{
748 return img::format("0x%" PRIx64, value);
749}
750
751
752std::string NMD::IMMEDIATE(int64 value)
753{
754 return img::format("%" PRId64, value);
755}
756
757
758std::string NMD::CPR(uint64 reg)
759{
760 /* needs more work */
761 return img::format("CP%" PRIu64, reg);
762}
763
764
765std::string NMD::ADDRESS(uint64 value, int instruction_size)
766{
767 /* token for string replace */
768 /* const char TOKEN_REPLACE = (char)0xa2; */
769 img::address address = m_pc + value + instruction_size;
770 /* symbol replacement */
771 /* return img::as_char(TOKEN_REPLACE) + to_string(address); */
772 return to_string(address);
773}
774
775
776uint64 NMD::extract_op_code_value(const uint16 * data, int size)
777{
778 switch (size) {
779 case 16:
780 return data[0];
781 case 32:
782 return ((uint64)data[0] << 16) | data[1];
783 case 48:
784 return ((uint64)data[0] << 32) | ((uint64)data[1] << 16) | data[2];
785 default:
786 return data[0];
787 }
788}
789
790
791int NMD::Disassemble(const uint16 * data, std::string & dis,
792 NMD::TABLE_ENTRY_TYPE & type)
793{
794 return Disassemble(data, dis, type, MAJOR, 2);
795}
796
797
798/*
799 * Recurse through tables until the instruction is found then return
800 * the string and size
801 *
802 * inputs:
803 * pointer to a word stream,
804 * disassember table and size
805 * returns:
806 * instruction size - negative is error
807 * disassembly string - on error will constain error string
808 */
809int NMD::Disassemble(const uint16 * data, std::string & dis,
810 NMD::TABLE_ENTRY_TYPE & type, const Pool *table,
811 int table_size)
812{
813 try
814 {
815 for (int i = 0; i < table_size; i++) {
816 uint64 op_code = extract_op_code_value(data,
817 table[i].instructions_size);
818 if ((op_code & table[i].mask) == table[i].value) {
819 /* possible match */
820 conditional_function cond = table[i].condition;
821 if ((cond == 0) || (this->*cond)(op_code)) {
822 try
823 {
824 if (table[i].type == pool) {
825 return Disassemble(data, dis, type,
826 table[i].next_table,
827 table[i].next_table_size);
828 } else if ((table[i].type == instruction) ||
829 (table[i].type == call_instruction) ||
830 (table[i].type == branch_instruction) ||
831 (table[i].type == return_instruction)) {
832 if ((table[i].attributes != 0) &&
833 (m_requested_instruction_categories &
834 table[i].attributes) == 0) {
835 /*
836 * failed due to instruction having
837 * an ASE attribute and the requested version
838 * not having that attribute
839 */
840 dis = "ASE attribute missmatch";
841 return -5;
842 }
843 disassembly_function dis_fn = table[i].disassembly;
844 if (dis_fn == 0) {
845 dis = "disassembler failure - bad table entry";
846 return -6;
847 }
848 type = table[i].type;
849 dis = (this->*dis_fn)(op_code);
850 return table[i].instructions_size;
851 } else {
852 dis = "reserved instruction";
853 return -2;
854 }
855 }
856 catch (std::runtime_error & e)
857 {
858 dis = e.what();
859 return -3; /* runtime error */
860 }
861 }
862 }
863 }
864 }
865 catch (std::exception & e)
866 {
867 dis = e.what();
868 return -4; /* runtime error */
869 }
870
871 dis = "failed to disassemble";
872 return -1; /* failed to disassemble */
873}
874
875
876uint64 NMD::extract_code_18_to_0(uint64 instruction)
877{
878 uint64 value = 0;
879 value |= extract_bits(instruction, 0, 19);
880 return value;
881}
882
883
884uint64 NMD::extract_shift3_2_1_0(uint64 instruction)
885{
886 uint64 value = 0;
887 value |= extract_bits(instruction, 0, 3);
888 return value;
889}
890
891
892uint64 NMD::extract_u_11_10_9_8_7_6_5_4_3__s3(uint64 instruction)
893{
894 uint64 value = 0;
895 value |= extract_bits(instruction, 3, 9) << 3;
896 return value;
897}
898
899
900uint64 NMD::extract_count_3_2_1_0(uint64 instruction)
901{
902 uint64 value = 0;
903 value |= extract_bits(instruction, 0, 4);
904 return value;
905}
906
907
908uint64 NMD::extract_rtz3_9_8_7(uint64 instruction)
909{
910 uint64 value = 0;
911 value |= extract_bits(instruction, 7, 3);
912 return value;
913}
914
915
916uint64 NMD::extract_u_17_to_1__s1(uint64 instruction)
917{
918 uint64 value = 0;
919 value |= extract_bits(instruction, 1, 17) << 1;
920 return value;
921}
922
923
924int64 NMD::extract_s__se9_20_19_18_17_16_15_14_13_12_11(uint64 instruction)
925{
926 int64 value = 0;
927 value |= extract_bits(instruction, 11, 10);
928 value = sign_extend(value, 9);
929 return value;
930}
931
932
933int64 NMD::extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(uint64 instruction)
934{
935 int64 value = 0;
936 value |= extract_bits(instruction, 0, 1) << 11;
937 value |= extract_bits(instruction, 1, 10) << 1;
938 value = sign_extend(value, 11);
939 return value;
940}
941
942
943uint64 NMD::extract_u_10(uint64 instruction)
944{
945 uint64 value = 0;
946 value |= extract_bits(instruction, 10, 1);
947 return value;
948}
949
950
951uint64 NMD::extract_rtz4_27_26_25_23_22_21(uint64 instruction)
952{
953 uint64 value = 0;
954 value |= extract_bits(instruction, 21, 3);
955 value |= extract_bits(instruction, 25, 1) << 3;
956 return value;
957}
958
959
960uint64 NMD::extract_sa_15_14_13_12_11(uint64 instruction)
961{
962 uint64 value = 0;
963 value |= extract_bits(instruction, 11, 5);
964 return value;
965}
966
967
968uint64 NMD::extract_shift_4_3_2_1_0(uint64 instruction)
969{
970 uint64 value = 0;
971 value |= extract_bits(instruction, 0, 5);
972 return value;
973}
974
975
976uint64 NMD::extract_shiftx_10_9_8_7__s1(uint64 instruction)
977{
978 uint64 value = 0;
979 value |= extract_bits(instruction, 7, 4) << 1;
980 return value;
981}
982
983
984uint64 NMD::extract_hint_25_24_23_22_21(uint64 instruction)
985{
986 uint64 value = 0;
987 value |= extract_bits(instruction, 21, 5);
988 return value;
989}
990
991
992uint64 NMD::extract_count3_14_13_12(uint64 instruction)
993{
994 uint64 value = 0;
995 value |= extract_bits(instruction, 12, 3);
996 return value;
997}
998
999
1000int64 NMD::extract_s__se31_0_11_to_2_20_to_12_s12(uint64 instruction)
1001{
1002 int64 value = 0;
1003 value |= extract_bits(instruction, 0, 1) << 31;
1004 value |= extract_bits(instruction, 2, 10) << 21;
1005 value |= extract_bits(instruction, 12, 9) << 12;
1006 value = sign_extend(value, 31);
1007 return value;
1008}
1009
1010
1011int64 NMD::extract_s__se7_0_6_5_4_3_2_1_s1(uint64 instruction)
1012{
1013 int64 value = 0;
1014 value |= extract_bits(instruction, 0, 1) << 7;
1015 value |= extract_bits(instruction, 1, 6) << 1;
1016 value = sign_extend(value, 7);
1017 return value;
1018}
1019
1020
1021uint64 NMD::extract_u2_10_9(uint64 instruction)
1022{
1023 uint64 value = 0;
1024 value |= extract_bits(instruction, 9, 2);
1025 return value;
1026}
1027
1028
1029uint64 NMD::extract_code_25_24_23_22_21_20_19_18_17_16(uint64 instruction)
1030{
1031 uint64 value = 0;
1032 value |= extract_bits(instruction, 16, 10);
1033 return value;
1034}
1035
1036
1037uint64 NMD::extract_rs_20_19_18_17_16(uint64 instruction)
1038{
1039 uint64 value = 0;
1040 value |= extract_bits(instruction, 16, 5);
1041 return value;
1042}
1043
1044
1045uint64 NMD::extract_u_2_1__s1(uint64 instruction)
1046{
1047 uint64 value = 0;
1048 value |= extract_bits(instruction, 1, 2) << 1;
1049 return value;
1050}
1051
1052
1053uint64 NMD::extract_stripe_6(uint64 instruction)
1054{
1055 uint64 value = 0;
1056 value |= extract_bits(instruction, 6, 1);
1057 return value;
1058}
1059
1060
1061uint64 NMD::extract_ac_15_14(uint64 instruction)
1062{
1063 uint64 value = 0;
1064 value |= extract_bits(instruction, 14, 2);
1065 return value;
1066}
1067
1068
1069uint64 NMD::extract_shift_20_19_18_17_16(uint64 instruction)
1070{
1071 uint64 value = 0;
1072 value |= extract_bits(instruction, 16, 5);
1073 return value;
1074}
1075
1076
1077uint64 NMD::extract_rdl_25_24(uint64 instruction)
1078{
1079 uint64 value = 0;
1080 value |= extract_bits(instruction, 24, 1);
1081 return value;
1082}
1083
1084
1085int64 NMD::extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(uint64 instruction)
1086{
1087 int64 value = 0;
1088 value |= extract_bits(instruction, 0, 1) << 10;
1089 value |= extract_bits(instruction, 1, 9) << 1;
1090 value = sign_extend(value, 10);
1091 return value;
1092}
1093
1094
1095uint64 NMD::extract_eu_6_5_4_3_2_1_0(uint64 instruction)
1096{
1097 uint64 value = 0;
1098 value |= extract_bits(instruction, 0, 7);
1099 return value;
1100}
1101
1102
1103uint64 NMD::extract_shift_5_4_3_2_1_0(uint64 instruction)
1104{
1105 uint64 value = 0;
1106 value |= extract_bits(instruction, 0, 6);
1107 return value;
1108}
1109
1110
1111uint64 NMD::extract_count_19_18_17_16(uint64 instruction)
1112{
1113 uint64 value = 0;
1114 value |= extract_bits(instruction, 16, 4);
1115 return value;
1116}
1117
1118
1119uint64 NMD::extract_code_2_1_0(uint64 instruction)
1120{
1121 uint64 value = 0;
1122 value |= extract_bits(instruction, 0, 3);
1123 return value;
1124}
1125
1126
1127uint64 NMD::extract_u_11_10_9_8_7_6_5_4_3_2_1_0(uint64 instruction)
1128{
1129 uint64 value = 0;
1130 value |= extract_bits(instruction, 0, 12);
1131 return value;
1132}
1133
1134
1135uint64 NMD::extract_rs_4_3_2_1_0(uint64 instruction)
1136{
1137 uint64 value = 0;
1138 value |= extract_bits(instruction, 0, 5);
1139 return value;
1140}
1141
1142
1143uint64 NMD::extract_u_20_to_3__s3(uint64 instruction)
1144{
1145 uint64 value = 0;
1146 value |= extract_bits(instruction, 3, 18) << 3;
1147 return value;
1148}
1149
1150
1151uint64 NMD::extract_u_3_2_1_0__s2(uint64 instruction)
1152{
1153 uint64 value = 0;
1154 value |= extract_bits(instruction, 0, 4) << 2;
1155 return value;
1156}
1157
1158
1159uint64 NMD::extract_cofun_25_24_23(uint64 instruction)
1160{
1161 uint64 value = 0;
1162 value |= extract_bits(instruction, 3, 23);
1163 return value;
1164}
1165
1166
1167uint64 NMD::extract_u_2_1_0__s2(uint64 instruction)
1168{
1169 uint64 value = 0;
1170 value |= extract_bits(instruction, 0, 3) << 2;
1171 return value;
1172}
1173
1174
1175uint64 NMD::extract_rd3_3_2_1(uint64 instruction)
1176{
1177 uint64 value = 0;
1178 value |= extract_bits(instruction, 1, 3);
1179 return value;
1180}
1181
1182
1183uint64 NMD::extract_sa_15_14_13_12(uint64 instruction)
1184{
1185 uint64 value = 0;
1186 value |= extract_bits(instruction, 12, 4);
1187 return value;
1188}
1189
1190
1191uint64 NMD::extract_rt_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
1199uint64 NMD::extract_ru_7_6_5_4_3(uint64 instruction)
1200{
1201 uint64 value = 0;
1202 value |= extract_bits(instruction, 3, 5);
1203 return value;
1204}
1205
1206
1207uint64 NMD::extract_u_17_to_0(uint64 instruction)
1208{
1209 uint64 value = 0;
1210 value |= extract_bits(instruction, 0, 18);
1211 return value;
1212}
1213
1214
1215uint64 NMD::extract_rsz4_4_2_1_0(uint64 instruction)
1216{
1217 uint64 value = 0;
1218 value |= extract_bits(instruction, 0, 3);
1219 value |= extract_bits(instruction, 4, 1) << 3;
1220 return value;
1221}
1222
1223
1224int64 NMD::extract_s__se21_0_20_to_1_s1(uint64 instruction)
1225{
1226 int64 value = 0;
1227 value |= extract_bits(instruction, 0, 1) << 21;
1228 value |= extract_bits(instruction, 1, 20) << 1;
1229 value = sign_extend(value, 21);
1230 return value;
1231}
1232
1233
1234uint64 NMD::extract_op_25_to_3(uint64 instruction)
1235{
1236 uint64 value = 0;
1237 value |= extract_bits(instruction, 3, 23);
1238 return value;
1239}
1240
1241
1242uint64 NMD::extract_rs4_4_2_1_0(uint64 instruction)
1243{
1244 uint64 value = 0;
1245 value |= extract_bits(instruction, 0, 3);
1246 value |= extract_bits(instruction, 4, 1) << 3;
1247 return value;
1248}
1249
1250
1251uint64 NMD::extract_bit_23_22_21(uint64 instruction)
1252{
1253 uint64 value = 0;
1254 value |= extract_bits(instruction, 21, 3);
1255 return value;
1256}
1257
1258
1259uint64 NMD::extract_rt_41_40_39_38_37(uint64 instruction)
1260{
1261 uint64 value = 0;
1262 value |= extract_bits(instruction, 37, 5);
1263 return value;
1264}
1265
1266
1267int64 NMD::extract_shift__se5_21_20_19_18_17_16(uint64 instruction)
1268{
1269 int64 value = 0;
1270 value |= extract_bits(instruction, 16, 6);
1271 value = sign_extend(value, 5);
1272 return value;
1273}
1274
1275
1276uint64 NMD::extract_rd2_3_8(uint64 instruction)
1277{
1278 uint64 value = 0;
1279 value |= extract_bits(instruction, 3, 1) << 1;
1280 value |= extract_bits(instruction, 8, 1);
1281 return value;
1282}
1283
1284
1285uint64 NMD::extract_code_17_to_0(uint64 instruction)
1286{
1287 uint64 value = 0;
1288 value |= extract_bits(instruction, 0, 18);
1289 return value;
1290}
1291
1292
1293uint64 NMD::extract_size_20_19_18_17_16(uint64 instruction)
1294{
1295 uint64 value = 0;
1296 value |= extract_bits(instruction, 16, 5);
1297 return value;
1298}
1299
1300
1301int64 NMD::extract_s__se8_15_7_6_5_4_3_2_s2(uint64 instruction)
1302{
1303 int64 value = 0;
1304 value |= extract_bits(instruction, 2, 6) << 2;
1305 value |= extract_bits(instruction, 15, 1) << 8;
1306 value = sign_extend(value, 8);
1307 return value;
1308}
1309
1310
1311uint64 NMD::extract_u_15_to_0(uint64 instruction)
1312{
1313 uint64 value = 0;
1314 value |= extract_bits(instruction, 0, 16);
1315 return value;
1316}
1317
1318
1319uint64 NMD::extract_fs_20_19_18_17_16(uint64 instruction)
1320{
1321 uint64 value = 0;
1322 value |= extract_bits(instruction, 16, 5);
1323 return value;
1324}
1325
1326
1327int64 NMD::extract_s__se8_15_7_6_5_4_3_2_1_0(uint64 instruction)
1328{
1329 int64 value = 0;
1330 value |= extract_bits(instruction, 0, 8);
1331 value |= extract_bits(instruction, 15, 1) << 8;
1332 value = sign_extend(value, 8);
1333 return value;
1334}
1335
1336
1337uint64 NMD::extract_stype_20_19_18_17_16(uint64 instruction)
1338{
1339 uint64 value = 0;
1340 value |= extract_bits(instruction, 16, 5);
1341 return value;
1342}
1343
1344
1345uint64 NMD::extract_rtl_11(uint64 instruction)
1346{
1347 uint64 value = 0;
1348 value |= extract_bits(instruction, 9, 1);
1349 return value;
1350}
1351
1352
1353uint64 NMD::extract_hs_20_19_18_17_16(uint64 instruction)
1354{
1355 uint64 value = 0;
1356 value |= extract_bits(instruction, 16, 5);
1357 return value;
1358}
1359
1360
1361uint64 NMD::extract_sel_13_12_11(uint64 instruction)
1362{
1363 uint64 value = 0;
1364 value |= extract_bits(instruction, 11, 3);
1365 return value;
1366}
1367
1368
1369uint64 NMD::extract_lsb_4_3_2_1_0(uint64 instruction)
1370{
1371 uint64 value = 0;
1372 value |= extract_bits(instruction, 0, 5);
1373 return value;
1374}
1375
1376
1377uint64 NMD::extract_gp_2(uint64 instruction)
1378{
1379 uint64 value = 0;
1380 value |= extract_bits(instruction, 2, 1);
1381 return value;
1382}
1383
1384
1385uint64 NMD::extract_rt3_9_8_7(uint64 instruction)
1386{
1387 uint64 value = 0;
1388 value |= extract_bits(instruction, 7, 3);
1389 return value;
1390}
1391
1392
1393uint64 NMD::extract_ft_25_24_23_22_21(uint64 instruction)
1394{
1395 uint64 value = 0;
1396 value |= extract_bits(instruction, 21, 5);
1397 return value;
1398}
1399
1400
1401uint64 NMD::extract_u_17_16_15_14_13_12_11(uint64 instruction)
1402{
1403 uint64 value = 0;
1404 value |= extract_bits(instruction, 11, 7);
1405 return value;
1406}
1407
1408
1409uint64 NMD::extract_cs_20_19_18_17_16(uint64 instruction)
1410{
1411 uint64 value = 0;
1412 value |= extract_bits(instruction, 16, 5);
1413 return value;
1414}
1415
1416
1417uint64 NMD::extract_rt4_9_7_6_5(uint64 instruction)
1418{
1419 uint64 value = 0;
1420 value |= extract_bits(instruction, 5, 3);
1421 value |= extract_bits(instruction, 9, 1) << 3;
1422 return value;
1423}
1424
1425
1426uint64 NMD::extract_msbt_10_9_8_7_6(uint64 instruction)
1427{
1428 uint64 value = 0;
1429 value |= extract_bits(instruction, 6, 5);
1430 return value;
1431}
1432
1433
1434uint64 NMD::extract_u_5_4_3_2_1_0__s2(uint64 instruction)
1435{
1436 uint64 value = 0;
1437 value |= extract_bits(instruction, 0, 6) << 2;
1438 return value;
1439}
1440
1441
1442uint64 NMD::extract_sa_15_14_13(uint64 instruction)
1443{
1444 uint64 value = 0;
1445 value |= extract_bits(instruction, 13, 3);
1446 return value;
1447}
1448
1449
1450int64 NMD::extract_s__se14_0_13_to_1_s1(uint64 instruction)
1451{
1452 int64 value = 0;
1453 value |= extract_bits(instruction, 0, 1) << 14;
1454 value |= extract_bits(instruction, 1, 13) << 1;
1455 value = sign_extend(value, 14);
1456 return value;
1457}
1458
1459
1460uint64 NMD::extract_rs3_6_5_4(uint64 instruction)
1461{
1462 uint64 value = 0;
1463 value |= extract_bits(instruction, 4, 3);
1464 return value;
1465}
1466
1467
1468uint64 NMD::extract_u_31_to_0__s32(uint64 instruction)
1469{
1470 uint64 value = 0;
1471 value |= extract_bits(instruction, 0, 32) << 32;
1472 return value;
1473}
1474
1475
1476uint64 NMD::extract_shift_10_9_8_7_6(uint64 instruction)
1477{
1478 uint64 value = 0;
1479 value |= extract_bits(instruction, 6, 5);
1480 return value;
1481}
1482
1483
1484uint64 NMD::extract_cs_25_24_23_22_21(uint64 instruction)
1485{
1486 uint64 value = 0;
1487 value |= extract_bits(instruction, 21, 5);
1488 return value;
1489}
1490
1491
1492uint64 NMD::extract_shiftx_11_10_9_8_7_6(uint64 instruction)
1493{
1494 uint64 value = 0;
1495 value |= extract_bits(instruction, 6, 6);
1496 return value;
1497}
1498
1499
1500uint64 NMD::extract_rt_9_8_7_6_5(uint64 instruction)
1501{
1502 uint64 value = 0;
1503 value |= extract_bits(instruction, 5, 5);
1504 return value;
1505}
1506
1507
1508uint64 NMD::extract_op_25_24_23_22_21(uint64 instruction)
1509{
1510 uint64 value = 0;
1511 value |= extract_bits(instruction, 21, 5);
1512 return value;
1513}
1514
1515
1516uint64 NMD::extract_u_6_5_4_3_2_1_0__s2(uint64 instruction)
1517{
1518 uint64 value = 0;
1519 value |= extract_bits(instruction, 0, 7) << 2;
1520 return value;
1521}
1522
1523
1524uint64 NMD::extract_bit_16_15_14_13_12_11(uint64 instruction)
1525{
1526 uint64 value = 0;
1527 value |= extract_bits(instruction, 11, 6);
1528 return value;
1529}
1530
1531
1532uint64 NMD::extract_mask_20_19_18_17_16_15_14(uint64 instruction)
1533{
1534 uint64 value = 0;
1535 value |= extract_bits(instruction, 14, 7);
1536 return value;
1537}
1538
1539
1540uint64 NMD::extract_eu_3_2_1_0(uint64 instruction)
1541{
1542 uint64 value = 0;
1543 value |= extract_bits(instruction, 0, 4);
1544 return value;
1545}
1546
1547
1548uint64 NMD::extract_u_7_6_5_4__s4(uint64 instruction)
1549{
1550 uint64 value = 0;
1551 value |= extract_bits(instruction, 4, 4) << 4;
1552 return value;
1553}
1554
1555
1556int64 NMD::extract_s__se8_15_7_6_5_4_3_s3(uint64 instruction)
1557{
1558 int64 value = 0;
1559 value |= extract_bits(instruction, 3, 5) << 3;
1560 value |= extract_bits(instruction, 15, 1) << 8;
1561 value = sign_extend(value, 8);
1562 return value;
1563}
1564
1565
1566uint64 NMD::extract_ft_15_14_13_12_11(uint64 instruction)
1567{
1568 uint64 value = 0;
1569 value |= extract_bits(instruction, 11, 5);
1570 return value;
1571}
1572
1573
1574int64 NMD::extract_s__se31_15_to_0_31_to_16(uint64 instruction)
1575{
1576 int64 value = 0;
1577 value |= extract_bits(instruction, 0, 16) << 16;
1578 value |= extract_bits(instruction, 16, 16);
1579 value = sign_extend(value, 31);
1580 return value;
1581}
1582
1583
1584uint64 NMD::extract_u_20_19_18_17_16_15_14_13(uint64 instruction)
1585{
1586 uint64 value = 0;
1587 value |= extract_bits(instruction, 13, 8);
1588 return value;
1589}
1590
1591
1592uint64 NMD::extract_u_17_to_2__s2(uint64 instruction)
1593{
1594 uint64 value = 0;
1595 value |= extract_bits(instruction, 2, 16) << 2;
1596 return value;
1597}
1598
1599
1600uint64 NMD::extract_rd_15_14_13_12_11(uint64 instruction)
1601{
1602 uint64 value = 0;
1603 value |= extract_bits(instruction, 11, 5);
1604 return value;
1605}
1606
1607
1608uint64 NMD::extract_c0s_20_19_18_17_16(uint64 instruction)
1609{
1610 uint64 value = 0;
1611 value |= extract_bits(instruction, 16, 5);
1612 return value;
1613}
1614
1615
1616uint64 NMD::extract_code_1_0(uint64 instruction)
1617{
1618 uint64 value = 0;
1619 value |= extract_bits(instruction, 0, 2);
1620 return value;
1621}
1622
1623
1624int64 NMD::extract_s__se25_0_24_to_1_s1(uint64 instruction)
1625{
1626 int64 value = 0;
1627 value |= extract_bits(instruction, 0, 1) << 25;
1628 value |= extract_bits(instruction, 1, 24) << 1;
1629 value = sign_extend(value, 25);
1630 return value;
1631}
1632
1633
1634uint64 NMD::extract_u_1_0(uint64 instruction)
1635{
1636 uint64 value = 0;
1637 value |= extract_bits(instruction, 0, 2);
1638 return value;
1639}
1640
1641
1642uint64 NMD::extract_u_3_8__s2(uint64 instruction)
1643{
1644 uint64 value = 0;
1645 value |= extract_bits(instruction, 3, 1) << 3;
1646 value |= extract_bits(instruction, 8, 1) << 2;
1647 return value;
1648}
1649
1650
1651uint64 NMD::extract_fd_15_14_13_12_11(uint64 instruction)
1652{
1653 uint64 value = 0;
1654 value |= extract_bits(instruction, 11, 5);
1655 return value;
1656}
1657
1658
1659uint64 NMD::extract_u_4_3_2_1_0__s2(uint64 instruction)
1660{
1661 uint64 value = 0;
1662 value |= extract_bits(instruction, 0, 5) << 2;
1663 return value;
1664}
1665
1666
1667uint64 NMD::extract_rtz4_9_7_6_5(uint64 instruction)
1668{
1669 uint64 value = 0;
1670 value |= extract_bits(instruction, 5, 3);
1671 value |= extract_bits(instruction, 9, 1) << 3;
1672 return value;
1673}
1674
1675
1676uint64 NMD::extract_sel_15_14_13_12_11(uint64 instruction)
1677{
1678 uint64 value = 0;
1679 value |= extract_bits(instruction, 11, 5);
1680 return value;
1681}
1682
1683
1684uint64 NMD::extract_ct_25_24_23_22_21(uint64 instruction)
1685{
1686 uint64 value = 0;
1687 value |= extract_bits(instruction, 21, 5);
1688 return value;
1689}
1690
1691
1692uint64 NMD::extract_u_20_to_2__s2(uint64 instruction)
1693{
1694 uint64 value = 0;
1695 value |= extract_bits(instruction, 2, 19) << 2;
1696 return value;
1697}
1698
1699
1700int64 NMD::extract_s__se3_4_2_1_0(uint64 instruction)
1701{
1702 int64 value = 0;
1703 value |= extract_bits(instruction, 0, 3);
1704 value |= extract_bits(instruction, 4, 1) << 3;
1705 value = sign_extend(value, 3);
1706 return value;
1707}
1708
1709
1710uint64 NMD::extract_u_3_2_1_0__s1(uint64 instruction)
1711{
1712 uint64 value = 0;
1713 value |= extract_bits(instruction, 0, 4) << 1;
1714 return value;
1715}
1716
1717
1718
1719bool NMD::ADDIU_32__cond(uint64 instruction)
1720{
1721 uint64 rt = extract_rt_25_24_23_22_21(instruction);
1722 return rt != 0;
1723}
1724
1725
1726bool NMD::ADDIU_RS5__cond(uint64 instruction)
1727{
1728 uint64 rt = extract_rt_9_8_7_6_5(instruction);
1729 return rt != 0;
1730}
1731
1732
1733bool NMD::BALRSC_cond(uint64 instruction)
1734{
1735 uint64 rt = extract_rt_25_24_23_22_21(instruction);
1736 return rt != 0;
1737}
1738
1739
1740bool NMD::BEQC_16__cond(uint64 instruction)
1741{
1742 uint64 rs3 = extract_rs3_6_5_4(instruction);
1743 uint64 rt3 = extract_rt3_9_8_7(instruction);
1744 uint64 u = extract_u_3_2_1_0__s1(instruction);
1745 return rs3 < rt3 && u != 0;
1746}
1747
1748
1749bool NMD::BNEC_16__cond(uint64 instruction)
1750{
1751 uint64 rs3 = extract_rs3_6_5_4(instruction);
1752 uint64 rt3 = extract_rt3_9_8_7(instruction);
1753 uint64 u = extract_u_3_2_1_0__s1(instruction);
1754 return rs3 >= rt3 && u != 0;
1755}
1756
1757
1758bool NMD::MOVE_cond(uint64 instruction)
1759{
1760 uint64 rt = extract_rt_9_8_7_6_5(instruction);
1761 return rt != 0;
1762}
1763
1764
1765bool NMD::P16_BR1_cond(uint64 instruction)
1766{
1767 uint64 u = extract_u_3_2_1_0__s1(instruction);
1768 return u != 0;
1769}
1770
1771
1772bool NMD::PREF_S9__cond(uint64 instruction)
1773{
1774 uint64 hint = extract_hint_25_24_23_22_21(instruction);
1775 return hint != 31;
1776}
1777
1778
1779bool NMD::PREFE_cond(uint64 instruction)
1780{
1781 uint64 hint = extract_hint_25_24_23_22_21(instruction);
1782 return hint != 31;
1783}
1784
1785
1786bool NMD::SLTU_cond(uint64 instruction)
1787{
1788 uint64 rd = extract_rd_15_14_13_12_11(instruction);
1789 return rd != 0;
1790}
1791
1792
1793
1794/*
1795 * ABS.D fd, fs - Floating Point Absolute Value
1796 *
1797 * 3 2 1
1798 * 10987654321098765432109876543210
1799 * 010001 00000 000101
1800 * fmt -----
1801 * fs -----
1802 * fd -----
1803 */
1804std::string NMD::ABS_D(uint64 instruction)
1805{
1806 uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1807 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1808
1809 std::string fs = FPR(copy(fs_value));
1810 std::string fd = FPR(copy(fd_value));
1811
1812 return img::format("ABS.D %s, %s", fd, fs);
1813}
1814
1815
1816/*
1817 * ABS.S fd, fs - Floating Point Absolute Value
1818 *
1819 * 3 2 1
1820 * 10987654321098765432109876543210
1821 * 010001 00000 000101
1822 * fmt -----
1823 * fd -----
1824 * fs -----
1825 */
1826std::string NMD::ABS_S(uint64 instruction)
1827{
1828 uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1829 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1830
1831 std::string fs = FPR(copy(fs_value));
1832 std::string fd = FPR(copy(fd_value));
1833
1834 return img::format("ABS.S %s, %s", fd, fs);
1835}
1836
1837
1838/*
1839 * [DSP] ABSQ_S.PH rt, rs - Find absolute value of two fractional halfwords
1840 * with 16-bit saturation
1841 *
1842 * 3 2 1
1843 * 10987654321098765432109876543210
1844 * 001000 0001000100111111
1845 * rt -----
1846 * rs -----
1847 */
1848std::string NMD::ABSQ_S_PH(uint64 instruction)
1849{
1850 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1851 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1852
1853 std::string rt = GPR(copy(rt_value));
1854 std::string rs = GPR(copy(rs_value));
1855
1856 return img::format("ABSQ_S.PH %s, %s", rt, rs);
1857}
1858
1859
1860/*
1861 * [DSP] ABSQ_S.QB rt, rs - Find absolute value of four fractional byte values
1862 * with 8-bit saturation
1863 *
1864 * 3 2 1
1865 * 10987654321098765432109876543210
1866 * 001000 0000000100111111
1867 * rt -----
1868 * rs -----
1869 */
1870std::string NMD::ABSQ_S_QB(uint64 instruction)
1871{
1872 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1873 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1874
1875 std::string rt = GPR(copy(rt_value));
1876 std::string rs = GPR(copy(rs_value));
1877
1878 return img::format("ABSQ_S.QB %s, %s", rt, rs);
1879}
1880
1881
1882/*
1883 * [DSP] ABSQ_S.W rt, rs - Find absolute value of fractional word with 32-bit
1884 * saturation
1885 *
1886 * 3 2 1
1887 * 10987654321098765432109876543210
1888 * 001000 0010000100111111
1889 * rt -----
1890 * rs -----
1891 */
1892std::string NMD::ABSQ_S_W(uint64 instruction)
1893{
1894 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1895 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1896
1897 std::string rt = GPR(copy(rt_value));
1898 std::string rs = GPR(copy(rs_value));
1899
1900 return img::format("ABSQ_S.W %s, %s", rt, rs);
1901}
1902
1903
1904/*
1905 *
1906 *
1907 * 3 2 1
1908 * 10987654321098765432109876543210
1909 * 001000 0010000100111111
1910 * rt -----
1911 * rs -----
1912 */
1913std::string NMD::ACLR(uint64 instruction)
1914{
1915 uint64 bit_value = extract_bit_23_22_21(instruction);
1916 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1917 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
1918
1919 std::string bit = IMMEDIATE(copy(bit_value));
1920 std::string s = IMMEDIATE(copy(s_value));
1921 std::string rs = GPR(copy(rs_value));
1922
1923 return img::format("ACLR %s, %s(%s)", bit, s, rs);
1924}
1925
1926
1927/*
1928 *
1929 *
1930 * 3 2 1
1931 * 10987654321098765432109876543210
1932 * 001000 0010000100111111
1933 * rt -----
1934 * rs -----
1935 */
1936std::string NMD::ADD(uint64 instruction)
1937{
1938 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1939 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1940 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1941
1942 std::string rd = GPR(copy(rd_value));
1943 std::string rs = GPR(copy(rs_value));
1944 std::string rt = GPR(copy(rt_value));
1945
1946 return img::format("ADD %s, %s, %s", rd, rs, rt);
1947}
1948
1949
1950/*
1951 * ADD.D fd, fs, ft - Floating Point Add
1952 *
1953 * 3 2 1
1954 * 10987654321098765432109876543210
1955 * 010001 000101
1956 * fmt -----
1957 * ft -----
1958 * fs -----
1959 * fd -----
1960 */
1961std::string NMD::ADD_D(uint64 instruction)
1962{
1963 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1964 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1965 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1966
1967 std::string ft = FPR(copy(ft_value));
1968 std::string fs = FPR(copy(fs_value));
1969 std::string fd = FPR(copy(fd_value));
1970
1971 return img::format("ADD.D %s, %s, %s", fd, fs, ft);
1972}
1973
1974
1975/*
1976 * ADD.S fd, fs, ft - Floating Point Add
1977 *
1978 * 3 2 1
1979 * 10987654321098765432109876543210
1980 * 010001 000101
1981 * fmt -----
1982 * ft -----
1983 * fs -----
1984 * fd -----
1985 */
1986std::string NMD::ADD_S(uint64 instruction)
1987{
1988 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1989 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1990 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1991
1992 std::string ft = FPR(copy(ft_value));
1993 std::string fs = FPR(copy(fs_value));
1994 std::string fd = FPR(copy(fd_value));
1995
1996 return img::format("ADD.S %s, %s, %s", fd, fs, ft);
1997}
1998
1999
2000/*
2001 *
2002 *
2003 * 3 2 1
2004 * 10987654321098765432109876543210
2005 * 001000 0010000100111111
2006 * rt -----
2007 * rs -----
2008 */
2009std::string NMD::ADDIU_32_(uint64 instruction)
2010{
2011 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2012 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2013 uint64 u_value = extract_u_15_to_0(instruction);
2014
2015 std::string rt = GPR(copy(rt_value));
2016 std::string rs = GPR(copy(rs_value));
2017 std::string u = IMMEDIATE(copy(u_value));
2018
2019 return img::format("ADDIU %s, %s, %s", rt, rs, u);
2020}
2021
2022
2023/*
2024 *
2025 *
2026 * 3 2 1
2027 * 10987654321098765432109876543210
2028 * 001000 0010000100111111
2029 * rt -----
2030 * rs -----
2031 */
2032std::string NMD::ADDIU_48_(uint64 instruction)
2033{
2034 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
2035 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
2036
2037 std::string rt = GPR(copy(rt_value));
2038 std::string s = IMMEDIATE(copy(s_value));
2039
2040 return img::format("ADDIU %s, %s", rt, s);
2041}
2042
2043
2044/*
2045 *
2046 *
2047 * 3 2 1
2048 * 10987654321098765432109876543210
2049 * 001000 0010000100111111
2050 * rt -----
2051 * rs -----
2052 */
2053std::string NMD::ADDIU_GP48_(uint64 instruction)
2054{
2055 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
2056 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
2057
2058 std::string rt = GPR(copy(rt_value));
2059 std::string s = IMMEDIATE(copy(s_value));
2060
2061 return img::format("ADDIU %s, $%d, %s", rt, 28, s);
2062}
2063
2064
2065/*
2066 *
2067 *
2068 * 3 2 1
2069 * 10987654321098765432109876543210
2070 * 001000 0010000100111111
2071 * rt -----
2072 * rs -----
2073 */
2074std::string NMD::ADDIU_GP_B_(uint64 instruction)
2075{
2076 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2077 uint64 u_value = extract_u_17_to_0(instruction);
2078
2079 std::string rt = GPR(copy(rt_value));
2080 std::string u = IMMEDIATE(copy(u_value));
2081
2082 return img::format("ADDIU %s, $%d, %s", rt, 28, u);
2083}
2084
2085
2086/*
2087 *
2088 *
2089 * 3 2 1
2090 * 10987654321098765432109876543210
2091 * 001000 0010000100111111
2092 * rt -----
2093 * rs -----
2094 */
2095std::string NMD::ADDIU_GP_W_(uint64 instruction)
2096{
2097 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2098 uint64 u_value = extract_u_20_to_2__s2(instruction);
2099
2100 std::string rt = GPR(copy(rt_value));
2101 std::string u = IMMEDIATE(copy(u_value));
2102
2103 return img::format("ADDIU %s, $%d, %s", rt, 28, u);
2104}
2105
2106
2107/*
2108 *
2109 *
2110 * 3 2 1
2111 * 10987654321098765432109876543210
2112 * 001000 0010000100111111
2113 * rt -----
2114 * rs -----
2115 */
2116std::string NMD::ADDIU_NEG_(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 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
2121
2122 std::string rt = GPR(copy(rt_value));
2123 std::string rs = GPR(copy(rs_value));
2124 std::string u = IMMEDIATE(neg_copy(u_value));
2125
2126 return img::format("ADDIU %s, %s, %s", rt, rs, u);
2127}
2128
2129
2130/*
2131 *
2132 *
2133 * 3 2 1
2134 * 10987654321098765432109876543210
2135 * 001000 0010000100111111
2136 * rt -----
2137 * rs -----
2138 */
2139std::string NMD::ADDIU_R1_SP_(uint64 instruction)
2140{
2141 uint64 u_value = extract_u_5_4_3_2_1_0__s2(instruction);
2142 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2143
2144 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2145 std::string u = IMMEDIATE(copy(u_value));
2146
2147 return img::format("ADDIU %s, $%d, %s", rt3, 29, u);
2148}
2149
2150
2151/*
2152 *
2153 *
2154 * 3 2 1
2155 * 10987654321098765432109876543210
2156 * 001000 0010000100111111
2157 * rt -----
2158 * rs -----
2159 */
2160std::string NMD::ADDIU_R2_(uint64 instruction)
2161{
2162 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2163 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2164 uint64 u_value = extract_u_2_1_0__s2(instruction);
2165
2166 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2167 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
2168 std::string u = IMMEDIATE(copy(u_value));
2169
2170 return img::format("ADDIU %s, %s, %s", rt3, rs3, u);
2171}
2172
2173
2174/*
2175 * ADDIU[RS5] rt, s5 - Add Signed Word and Set Carry Bit
2176 *
2177 * 5432109876543210
2178 * 100100 1
2179 * rt -----
2180 * s - ---
2181 */
2182std::string NMD::ADDIU_RS5_(uint64 instruction)
2183{
2184 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
2185 int64 s_value = extract_s__se3_4_2_1_0(instruction);
2186
2187 std::string rt = GPR(copy(rt_value));
2188 std::string s = IMMEDIATE(copy(s_value));
2189
2190 return img::format("ADDIU %s, %s", rt, s);
2191}
2192
2193
2194/*
2195 *
2196 *
2197 * 3 2 1
2198 * 10987654321098765432109876543210
2199 * 001000 x1110000101
2200 * rt -----
2201 * rs -----
2202 * rd -----
2203 */
2204std::string NMD::ADDIUPC_32_(uint64 instruction)
2205{
2206 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2207 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
2208
2209 std::string rt = GPR(copy(rt_value));
2210 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2211
2212 return img::format("ADDIUPC %s, %s", rt, s);
2213}
2214
2215
2216/*
2217 *
2218 *
2219 * 3 2 1
2220 * 10987654321098765432109876543210
2221 * 001000 x1110000101
2222 * rt -----
2223 * rs -----
2224 * rd -----
2225 */
2226std::string NMD::ADDIUPC_48_(uint64 instruction)
2227{
2228 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
2229 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
2230
2231 std::string rt = GPR(copy(rt_value));
2232 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
2233
2234 return img::format("ADDIUPC %s, %s", rt, s);
2235}
2236
2237
2238/*
2239 * [DSP] ADDQ.PH rd, rt, rs - Add fractional halfword vectors
2240 *
2241 * 3 2 1
2242 * 10987654321098765432109876543210
2243 * 001000 00000001101
2244 * rt -----
2245 * rs -----
2246 * rd -----
2247 */
2248std::string NMD::ADDQ_PH(uint64 instruction)
2249{
2250 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2251 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2252 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2253
2254 std::string rd = GPR(copy(rd_value));
2255 std::string rs = GPR(copy(rs_value));
2256 std::string rt = GPR(copy(rt_value));
2257
2258 return img::format("ADDQ.PH %s, %s, %s", rd, rs, rt);
2259}
2260
2261
2262/*
2263 * [DSP] ADDQ_S.PH rd, rt, rs - Add fractional halfword vectors with 16-bit
2264 * saturation
2265 *
2266 * 3 2 1
2267 * 10987654321098765432109876543210
2268 * 001000 10000001101
2269 * rt -----
2270 * rs -----
2271 * rd -----
2272 */
2273std::string NMD::ADDQ_S_PH(uint64 instruction)
2274{
2275 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2276 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2277 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2278
2279 std::string rd = GPR(copy(rd_value));
2280 std::string rs = GPR(copy(rs_value));
2281 std::string rt = GPR(copy(rt_value));
2282
2283 return img::format("ADDQ_S.PH %s, %s, %s", rd, rs, rt);
2284}
2285
2286
2287/*
2288 * [DSP] ADDQ_S.W rd, rt, rs - Add fractional words with 32-bit saturation
2289 *
2290 * 3 2 1
2291 * 10987654321098765432109876543210
2292 * 001000 x1100000101
2293 * rt -----
2294 * rs -----
2295 * rd -----
2296 */
2297std::string NMD::ADDQ_S_W(uint64 instruction)
2298{
2299 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2300 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2301 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2302
2303 std::string rd = GPR(copy(rd_value));
2304 std::string rs = GPR(copy(rs_value));
2305 std::string rt = GPR(copy(rt_value));
2306
2307 return img::format("ADDQ_S.W %s, %s, %s", rd, rs, rt);
2308}
2309
2310
2311/*
2312 * [DSP] ADDQH.PH rd, rt, rs - Add fractional halfword vectors and shift
2313 * right to halve results
2314 *
2315 * 3 2 1
2316 * 10987654321098765432109876543210
2317 * 001000 00001001101
2318 * rt -----
2319 * rs -----
2320 * rd -----
2321 */
2322std::string NMD::ADDQH_PH(uint64 instruction)
2323{
2324 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2325 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2326 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2327
2328 std::string rd = GPR(copy(rd_value));
2329 std::string rs = GPR(copy(rs_value));
2330 std::string rt = GPR(copy(rt_value));
2331
2332 return img::format("ADDQH.PH %s, %s, %s", rd, rs, rt);
2333}
2334
2335
2336/*
2337 * [DSP] ADDQH_R.PH rd, rt, rs - Add fractional halfword vectors and shift
2338 * right to halve results with rounding
2339 *
2340 * 3 2 1
2341 * 10987654321098765432109876543210
2342 * 001000 10001001101
2343 * rt -----
2344 * rs -----
2345 * rd -----
2346 */
2347std::string NMD::ADDQH_R_PH(uint64 instruction)
2348{
2349 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2350 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2351 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2352
2353 std::string rd = GPR(copy(rd_value));
2354 std::string rs = GPR(copy(rs_value));
2355 std::string rt = GPR(copy(rt_value));
2356
2357 return img::format("ADDQH_R.PH %s, %s, %s", rd, rs, rt);
2358}
2359
2360
2361/*
2362 * [DSP] ADDQH_R.W rd, rt, rs - Add fractional words and shift right to halve
2363 * results with rounding
2364 *
2365 * 3 2 1
2366 * 10987654321098765432109876543210
2367 * 001000 00010001101
2368 * rt -----
2369 * rs -----
2370 * rd -----
2371 */
2372std::string NMD::ADDQH_R_W(uint64 instruction)
2373{
2374 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2375 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2376 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2377
2378 std::string rd = GPR(copy(rd_value));
2379 std::string rs = GPR(copy(rs_value));
2380 std::string rt = GPR(copy(rt_value));
2381
2382 return img::format("ADDQH_R.W %s, %s, %s", rd, rs, rt);
2383}
2384
2385
2386/*
2387 * [DSP] ADDQH.W rd, rt, rs - Add fractional words and shift right to halve
2388 * results
2389 *
2390 * 3 2 1
2391 * 10987654321098765432109876543210
2392 * 001000 10010001101
2393 * rt -----
2394 * rs -----
2395 * rd -----
2396 */
2397std::string NMD::ADDQH_W(uint64 instruction)
2398{
2399 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2400 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2401 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2402
2403 std::string rd = GPR(copy(rd_value));
2404 std::string rs = GPR(copy(rs_value));
2405 std::string rt = GPR(copy(rt_value));
2406
2407 return img::format("ADDQH.W %s, %s, %s", rd, rs, rt);
2408}
2409
2410
2411/*
2412 * [DSP] ADDSC rd, rt, rs - Add two signed words and set carry bit
2413 *
2414 * 3 2 1
2415 * 10987654321098765432109876543210
2416 * 001000 x1110000101
2417 * rt -----
2418 * rs -----
2419 * rd -----
2420 */
2421std::string NMD::ADDSC(uint64 instruction)
2422{
2423 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2424 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2425 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2426
2427 std::string rd = GPR(copy(rd_value));
2428 std::string rs = GPR(copy(rs_value));
2429 std::string rt = GPR(copy(rt_value));
2430
2431 return img::format("ADDSC %s, %s, %s", rd, rs, rt);
2432}
2433
2434
2435/*
2436 * ADDU[16] rd3, rs3, rt3 -
2437 *
2438 * 5432109876543210
2439 * 101100 0
2440 * rt3 ---
2441 * rs3 ---
2442 * rd3 ---
2443 */
2444std::string NMD::ADDU_16_(uint64 instruction)
2445{
2446 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2447 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2448 uint64 rd3_value = extract_rd3_3_2_1(instruction);
2449
2450 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2451 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
2452 std::string rd3 = GPR(decode_gpr_gpr3(rd3_value));
2453
2454 return img::format("ADDU %s, %s, %s", rd3, rs3, rt3);
2455}
2456
2457
2458/*
2459 *
2460 *
2461 * 3 2 1
2462 * 10987654321098765432109876543210
2463 * 001000 x1110000101
2464 * rt -----
2465 * rs -----
2466 * rd -----
2467 */
2468std::string NMD::ADDU_32_(uint64 instruction)
2469{
2470 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2471 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2472 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2473
2474 std::string rd = GPR(copy(rd_value));
2475 std::string rs = GPR(copy(rs_value));
2476 std::string rt = GPR(copy(rt_value));
2477
2478 return img::format("ADDU %s, %s, %s", rd, rs, rt);
2479}
2480
2481
2482/*
2483 *
2484 *
2485 * 3 2 1
2486 * 10987654321098765432109876543210
2487 * 001000 x1110000101
2488 * rt -----
2489 * rs -----
2490 * rd -----
2491 */
2492std::string NMD::ADDU_4X4_(uint64 instruction)
2493{
2494 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
2495 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
2496
2497 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
2498 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
2499
2500 return img::format("ADDU %s, %s", rs4, rt4);
2501}
2502
2503
2504/*
2505 * [DSP] ADDU.PH rd, rt, rs - Add two pairs of unsigned halfwords
2506 *
2507 * 3 2 1
2508 * 10987654321098765432109876543210
2509 * 001000 00100001101
2510 * rt -----
2511 * rs -----
2512 * rd -----
2513 */
2514std::string NMD::ADDU_PH(uint64 instruction)
2515{
2516 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2517 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2518 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2519
2520 std::string rd = GPR(copy(rd_value));
2521 std::string rs = GPR(copy(rs_value));
2522 std::string rt = GPR(copy(rt_value));
2523
2524 return img::format("ADDU.PH %s, %s, %s", rd, rs, rt);
2525}
2526
2527
2528/*
2529 * ADDU.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2530 *
2531 * 3 2 1
2532 * 10987654321098765432109876543210
2533 * 001000 00011001101
2534 * rt -----
2535 * rs -----
2536 * rd -----
2537 */
2538std::string NMD::ADDU_QB(uint64 instruction)
2539{
2540 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2541 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2542 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2543
2544 std::string rd = GPR(copy(rd_value));
2545 std::string rs = GPR(copy(rs_value));
2546 std::string rt = GPR(copy(rt_value));
2547
2548 return img::format("ADDU.QB %s, %s, %s", rd, rs, rt);
2549}
2550
2551
2552/*
2553 * [DSP] ADDU_S.PH rd, rt, rs - Add two pairs of unsigned halfwords with 16-bit
2554 * saturation
2555 *
2556 * 3 2 1
2557 * 10987654321098765432109876543210
2558 * 001000 10100001101
2559 * rt -----
2560 * rs -----
2561 * rd -----
2562 */
2563std::string NMD::ADDU_S_PH(uint64 instruction)
2564{
2565 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2566 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2567 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2568
2569 std::string rd = GPR(copy(rd_value));
2570 std::string rs = GPR(copy(rs_value));
2571 std::string rt = GPR(copy(rt_value));
2572
2573 return img::format("ADDU_S.PH %s, %s, %s", rd, rs, rt);
2574}
2575
2576
2577/*
2578 * ADDU_S.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2579 *
2580 * 3 2 1
2581 * 10987654321098765432109876543210
2582 * 001000 10011001101
2583 * rt -----
2584 * rs -----
2585 * rd -----
2586 */
2587std::string NMD::ADDU_S_QB(uint64 instruction)
2588{
2589 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2590 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2591 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2592
2593 std::string rd = GPR(copy(rd_value));
2594 std::string rs = GPR(copy(rs_value));
2595 std::string rt = GPR(copy(rt_value));
2596
2597 return img::format("ADDU_S.QB %s, %s, %s", rd, rs, rt);
2598}
2599
2600
2601/*
2602 * ADDUH.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2603 * to Halve Results
2604 *
2605 * 3 2 1
2606 * 10987654321098765432109876543210
2607 * 001000 00101001101
2608 * rt -----
2609 * rs -----
2610 * rd -----
2611 */
2612std::string NMD::ADDUH_QB(uint64 instruction)
2613{
2614 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2615 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2616 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2617
2618 std::string rd = GPR(copy(rd_value));
2619 std::string rs = GPR(copy(rs_value));
2620 std::string rt = GPR(copy(rt_value));
2621
2622 return img::format("ADDUH.QB %s, %s, %s", rd, rs, rt);
2623}
2624
2625
2626/*
2627 * ADDUH_R.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2628 * to Halve Results
2629 *
2630 * 3 2 1
2631 * 10987654321098765432109876543210
2632 * 001000 10101001101
2633 * rt -----
2634 * rs -----
2635 * rd -----
2636 */
2637std::string NMD::ADDUH_R_QB(uint64 instruction)
2638{
2639 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2640 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2641 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2642
2643 std::string rd = GPR(copy(rd_value));
2644 std::string rs = GPR(copy(rs_value));
2645 std::string rt = GPR(copy(rt_value));
2646
2647 return img::format("ADDUH_R.QB %s, %s, %s", rd, rs, rt);
2648}
2649
2650/*
2651 * ADDWC rd, rt, rs - Add Word with Carry Bit
2652 *
2653 * 3 2 1
2654 * 10987654321098765432109876543210
2655 * 001000 x1111000101
2656 * rt -----
2657 * rs -----
2658 * rd -----
2659 */
2660std::string NMD::ADDWC(uint64 instruction)
2661{
2662 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2663 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2664 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2665
2666 std::string rd = GPR(copy(rd_value));
2667 std::string rs = GPR(copy(rs_value));
2668 std::string rt = GPR(copy(rt_value));
2669
2670 return img::format("ADDWC %s, %s, %s", rd, rs, rt);
2671}
2672
2673
2674/*
2675 *
2676 *
2677 * 3 2 1
2678 * 10987654321098765432109876543210
2679 * 001000 x1110000101
2680 * rt -----
2681 * rs -----
2682 * rd -----
2683 */
2684std::string NMD::ALUIPC(uint64 instruction)
2685{
2686 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2687 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
2688
2689 std::string rt = GPR(copy(rt_value));
2690 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2691
2692 return img::format("ALUIPC %s, %%pcrel_hi(%s)", rt, s);
2693}
2694
2695
2696/*
2697 * AND[16] rt3, rs3 -
2698 *
2699 * 5432109876543210
2700 * 101100
2701 * rt3 ---
2702 * rs3 ---
2703 * eu ----
2704 */
2705std::string NMD::AND_16_(uint64 instruction)
2706{
2707 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2708 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2709
2710 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2711 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
2712
2713 return img::format("AND %s, %s", rs3, rt3);
2714}
2715
2716
2717/*
2718 *
2719 *
2720 * 3 2 1
2721 * 10987654321098765432109876543210
2722 * 001000 x1110000101
2723 * rt -----
2724 * rs -----
2725 * rd -----
2726 */
2727std::string NMD::AND_32_(uint64 instruction)
2728{
2729 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2730 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2731 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2732
2733 std::string rd = GPR(copy(rd_value));
2734 std::string rs = GPR(copy(rs_value));
2735 std::string rt = GPR(copy(rt_value));
2736
2737 return img::format("AND %s, %s, %s", rd, rs, rt);
2738}
2739
2740
2741/*
2742 * ANDI rt, rs, u -
2743 *
2744 * 5432109876543210
2745 * 101100
2746 * rt3 ---
2747 * rs3 ---
2748 * eu ----
2749 */
2750std::string NMD::ANDI_16_(uint64 instruction)
2751{
2752 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2753 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2754 uint64 eu_value = extract_eu_3_2_1_0(instruction);
2755
2756 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2757 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
2758 std::string eu = IMMEDIATE(encode_eu_from_u_andi16(eu_value));
2759
2760 return img::format("ANDI %s, %s, %s", rt3, rs3, eu);
2761}
2762
2763
2764/*
2765 *
2766 *
2767 * 3 2 1
2768 * 10987654321098765432109876543210
2769 * 001000 x1110000101
2770 * rt -----
2771 * rs -----
2772 * rd -----
2773 */
2774std::string NMD::ANDI_32_(uint64 instruction)
2775{
2776 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2777 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2778 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
2779
2780 std::string rt = GPR(copy(rt_value));
2781 std::string rs = GPR(copy(rs_value));
2782 std::string u = IMMEDIATE(copy(u_value));
2783
2784 return img::format("ANDI %s, %s, %s", rt, rs, u);
2785}
2786
2787
2788/*
2789 *
2790 *
2791 * 3 2 1
2792 * 10987654321098765432109876543210
2793 * 001000 x1110000101
2794 * rt -----
2795 * rs -----
2796 * rd -----
2797 */
2798std::string NMD::APPEND(uint64 instruction)
2799{
2800 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2801 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2802 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
2803
2804 std::string rt = GPR(copy(rt_value));
2805 std::string rs = GPR(copy(rs_value));
2806 std::string sa = IMMEDIATE(copy(sa_value));
2807
2808 return img::format("APPEND %s, %s, %s", rt, rs, sa);
2809}
2810
2811
2812/*
2813 *
2814 *
2815 * 3 2 1
2816 * 10987654321098765432109876543210
2817 * 001000 x1110000101
2818 * rt -----
2819 * rs -----
2820 * rd -----
2821 */
2822std::string NMD::ASET(uint64 instruction)
2823{
2824 uint64 bit_value = extract_bit_23_22_21(instruction);
2825 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2826 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
2827
2828 std::string bit = IMMEDIATE(copy(bit_value));
2829 std::string s = IMMEDIATE(copy(s_value));
2830 std::string rs = GPR(copy(rs_value));
2831
2832 return img::format("ASET %s, %s(%s)", bit, s, rs);
2833}
2834
2835
2836/*
2837 *
2838 *
2839 * 3 2 1
2840 * 10987654321098765432109876543210
2841 * 001000 x1110000101
2842 * rt -----
2843 * rs -----
2844 * rd -----
2845 */
2846std::string NMD::BALC_16_(uint64 instruction)
2847{
2848 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2849
2850 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
2851
2852 return img::format("BALC %s", s);
2853}
2854
2855
2856/*
2857 *
2858 *
2859 * 3 2 1
2860 * 10987654321098765432109876543210
2861 * 001000 x1110000101
2862 * rt -----
2863 * rs -----
2864 * rd -----
2865 */
2866std::string NMD::BALC_32_(uint64 instruction)
2867{
2868 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2869
2870 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2871
2872 return img::format("BALC %s", s);
2873}
2874
2875
2876/*
2877 *
2878 *
2879 * 3 2 1
2880 * 10987654321098765432109876543210
2881 * 001000 x1110000101
2882 * rt -----
2883 * rs -----
2884 * rd -----
2885 */
2886std::string NMD::BALRSC(uint64 instruction)
2887{
2888 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2889 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2890
2891 std::string rt = GPR(copy(rt_value));
2892 std::string rs = GPR(copy(rs_value));
2893
2894 return img::format("BALRSC %s, %s", rt, rs);
2895}
2896
2897
2898/*
2899 *
2900 *
2901 * 3 2 1
2902 * 10987654321098765432109876543210
2903 * 001000 x1110000101
2904 * rt -----
2905 * rs -----
2906 * rd -----
2907 */
2908std::string NMD::BBEQZC(uint64 instruction)
2909{
2910 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2911 uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2912 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2913
2914 std::string rt = GPR(copy(rt_value));
2915 std::string bit = IMMEDIATE(copy(bit_value));
2916 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2917
2918 return img::format("BBEQZC %s, %s, %s", rt, bit, s);
2919}
2920
2921
2922/*
2923 *
2924 *
2925 * 3 2 1
2926 * 10987654321098765432109876543210
2927 * 001000 x1110000101
2928 * rt -----
2929 * rs -----
2930 * rd -----
2931 */
2932std::string NMD::BBNEZC(uint64 instruction)
2933{
2934 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2935 uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2936 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2937
2938 std::string rt = GPR(copy(rt_value));
2939 std::string bit = IMMEDIATE(copy(bit_value));
2940 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2941
2942 return img::format("BBNEZC %s, %s, %s", rt, bit, s);
2943}
2944
2945
2946/*
2947 *
2948 *
2949 * 3 2 1
2950 * 10987654321098765432109876543210
2951 * 001000 x1110000101
2952 * rt -----
2953 * rs -----
2954 * rd -----
2955 */
2956std::string NMD::BC_16_(uint64 instruction)
2957{
2958 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2959
2960 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
2961
2962 return img::format("BC %s", s);
2963}
2964
2965
2966/*
2967 *
2968 *
2969 * 3 2 1
2970 * 10987654321098765432109876543210
2971 * 001000 x1110000101
2972 * rt -----
2973 * rs -----
2974 * rd -----
2975 */
2976std::string NMD::BC_32_(uint64 instruction)
2977{
2978 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2979
2980 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2981
2982 return img::format("BC %s", s);
2983}
2984
2985
2986/*
2987 *
2988 *
2989 * 3 2 1
2990 * 10987654321098765432109876543210
2991 * 001000 x1110000101
2992 * rt -----
2993 * rs -----
2994 * rd -----
2995 */
2996std::string NMD::BC1EQZC(uint64 instruction)
2997{
2998 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
2999 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3000
3001 std::string ft = FPR(copy(ft_value));
3002 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3003
3004 return img::format("BC1EQZC %s, %s", ft, s);
3005}
3006
3007
3008/*
3009 *
3010 *
3011 * 3 2 1
3012 * 10987654321098765432109876543210
3013 * 001000 x1110000101
3014 * rt -----
3015 * rs -----
3016 * rd -----
3017 */
3018std::string NMD::BC1NEZC(uint64 instruction)
3019{
3020 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3021 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3022
3023 std::string ft = FPR(copy(ft_value));
3024 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3025
3026 return img::format("BC1NEZC %s, %s", ft, s);
3027}
3028
3029
3030/*
3031 *
3032 *
3033 * 3 2 1
3034 * 10987654321098765432109876543210
3035 * 001000 x1110000101
3036 * rt -----
3037 * rs -----
3038 * rd -----
3039 */
3040std::string NMD::BC2EQZC(uint64 instruction)
3041{
3042 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
3043 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3044
3045 std::string ct = CPR(copy(ct_value));
3046 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3047
3048 return img::format("BC2EQZC %s, %s", ct, s);
3049}
3050
3051
3052/*
3053 *
3054 *
3055 * 3 2 1
3056 * 10987654321098765432109876543210
3057 * 001000 x1110000101
3058 * rt -----
3059 * rs -----
3060 * rd -----
3061 */
3062std::string NMD::BC2NEZC(uint64 instruction)
3063{
3064 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
3065 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3066
3067 std::string ct = CPR(copy(ct_value));
3068 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3069
3070 return img::format("BC2NEZC %s, %s", ct, s);
3071}
3072
3073
3074/*
3075 *
3076 *
3077 * 3 2 1
3078 * 10987654321098765432109876543210
3079 * 001000 x1110000101
3080 * rt -----
3081 * rs -----
3082 * rd -----
3083 */
3084std::string NMD::BEQC_16_(uint64 instruction)
3085{
3086 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3087 uint64 rs3_value = extract_rs3_6_5_4(instruction);
3088 uint64 u_value = extract_u_3_2_1_0__s1(instruction);
3089
3090 std::string rs3 = GPR(encode_rs3_and_check_rs3_lt_rt3(rs3_value));
3091 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
3092 std::string u = ADDRESS(encode_u_from_address(u_value), 2);
3093
3094 return img::format("BEQC %s, %s, %s", rs3, rt3, u);
3095}
3096
3097
3098/*
3099 *
3100 *
3101 * 3 2 1
3102 * 10987654321098765432109876543210
3103 * 001000 x1110000101
3104 * rt -----
3105 * rs -----
3106 * rd -----
3107 */
3108std::string NMD::BEQC_32_(uint64 instruction)
3109{
3110 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3111 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3112 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3113
3114 std::string rs = GPR(copy(rs_value));
3115 std::string rt = GPR(copy(rt_value));
3116 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3117
3118 return img::format("BEQC %s, %s, %s", rs, rt, s);
3119}
3120
3121
3122/*
3123 *
3124 *
3125 * 3 2 1
3126 * 10987654321098765432109876543210
3127 * 001000 x1110000101
3128 * rt -----
3129 * rs -----
3130 * rd -----
3131 */
3132std::string NMD::BEQIC(uint64 instruction)
3133{
3134 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3135 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3136 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3137
3138 std::string rt = GPR(copy(rt_value));
3139 std::string u = IMMEDIATE(copy(u_value));
3140 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3141
3142 return img::format("BEQIC %s, %s, %s", rt, u, s);
3143}
3144
3145
3146/*
3147 *
3148 *
3149 * 3 2 1
3150 * 10987654321098765432109876543210
3151 * 001000 x1110000101
3152 * rt -----
3153 * rs -----
3154 * rd -----
3155 */
3156std::string NMD::BEQZC_16_(uint64 instruction)
3157{
3158 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3159 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
3160
3161 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
3162 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
3163
3164 return img::format("BEQZC %s, %s", rt3, s);
3165}
3166
3167
3168/*
3169 *
3170 *
3171 * 3 2 1
3172 * 10987654321098765432109876543210
3173 * 001000 x1110000101
3174 * rt -----
3175 * rs -----
3176 * rd -----
3177 */
3178std::string NMD::BGEC(uint64 instruction)
3179{
3180 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3181 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3182 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3183
3184 std::string rs = GPR(copy(rs_value));
3185 std::string rt = GPR(copy(rt_value));
3186 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3187
3188 return img::format("BGEC %s, %s, %s", rs, rt, s);
3189}
3190
3191
3192/*
3193 *
3194 *
3195 * 3 2 1
3196 * 10987654321098765432109876543210
3197 * 001000 x1110000101
3198 * rt -----
3199 * rs -----
3200 * rd -----
3201 */
3202std::string NMD::BGEIC(uint64 instruction)
3203{
3204 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3205 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3206 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3207
3208 std::string rt = GPR(copy(rt_value));
3209 std::string u = IMMEDIATE(copy(u_value));
3210 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3211
3212 return img::format("BGEIC %s, %s, %s", rt, u, s);
3213}
3214
3215
3216/*
3217 *
3218 *
3219 * 3 2 1
3220 * 10987654321098765432109876543210
3221 * 001000 x1110000101
3222 * rt -----
3223 * rs -----
3224 * rd -----
3225 */
3226std::string NMD::BGEIUC(uint64 instruction)
3227{
3228 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3229 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3230 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3231
3232 std::string rt = GPR(copy(rt_value));
3233 std::string u = IMMEDIATE(copy(u_value));
3234 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3235
3236 return img::format("BGEIUC %s, %s, %s", rt, u, s);
3237}
3238
3239
3240/*
3241 *
3242 *
3243 * 3 2 1
3244 * 10987654321098765432109876543210
3245 * 001000 x1110000101
3246 * rt -----
3247 * rs -----
3248 * rd -----
3249 */
3250std::string NMD::BGEUC(uint64 instruction)
3251{
3252 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3253 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3254 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3255
3256 std::string rs = GPR(copy(rs_value));
3257 std::string rt = GPR(copy(rt_value));
3258 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3259
3260 return img::format("BGEUC %s, %s, %s", rs, rt, s);
3261}
3262
3263
3264/*
3265 *
3266 *
3267 * 3 2 1
3268 * 10987654321098765432109876543210
3269 * 001000 x1110000101
3270 * rt -----
3271 * rs -----
3272 * rd -----
3273 */
3274std::string NMD::BLTC(uint64 instruction)
3275{
3276 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3277 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3278 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3279
3280 std::string rs = GPR(copy(rs_value));
3281 std::string rt = GPR(copy(rt_value));
3282 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3283
3284 return img::format("BLTC %s, %s, %s", rs, rt, s);
3285}
3286
3287
3288/*
3289 *
3290 *
3291 * 3 2 1
3292 * 10987654321098765432109876543210
3293 * 001000 x1110000101
3294 * rt -----
3295 * rs -----
3296 * rd -----
3297 */
3298std::string NMD::BLTIC(uint64 instruction)
3299{
3300 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3301 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3302 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3303
3304 std::string rt = GPR(copy(rt_value));
3305 std::string u = IMMEDIATE(copy(u_value));
3306 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3307
3308 return img::format("BLTIC %s, %s, %s", rt, u, s);
3309}
3310
3311
3312/*
3313 *
3314 *
3315 * 3 2 1
3316 * 10987654321098765432109876543210
3317 * 001000 x1110000101
3318 * rt -----
3319 * rs -----
3320 * rd -----
3321 */
3322std::string NMD::BLTIUC(uint64 instruction)
3323{
3324 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3325 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3326 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3327
3328 std::string rt = GPR(copy(rt_value));
3329 std::string u = IMMEDIATE(copy(u_value));
3330 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3331
3332 return img::format("BLTIUC %s, %s, %s", rt, u, s);
3333}
3334
3335
3336/*
3337 *
3338 *
3339 * 3 2 1
3340 * 10987654321098765432109876543210
3341 * 001000 x1110000101
3342 * rt -----
3343 * rs -----
3344 * rd -----
3345 */
3346std::string NMD::BLTUC(uint64 instruction)
3347{
3348 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3349 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3350 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3351
3352 std::string rs = GPR(copy(rs_value));
3353 std::string rt = GPR(copy(rt_value));
3354 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3355
3356 return img::format("BLTUC %s, %s, %s", rs, rt, s);
3357}
3358
3359
3360/*
3361 *
3362 *
3363 * 3 2 1
3364 * 10987654321098765432109876543210
3365 * 001000 x1110000101
3366 * rt -----
3367 * rs -----
3368 * rd -----
3369 */
3370std::string NMD::BNEC_16_(uint64 instruction)
3371{
3372 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3373 uint64 rs3_value = extract_rs3_6_5_4(instruction);
3374 uint64 u_value = extract_u_3_2_1_0__s1(instruction);
3375
3376 std::string rs3 = GPR(encode_rs3_and_check_rs3_ge_rt3(rs3_value));
3377 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
3378 std::string u = ADDRESS(encode_u_from_address(u_value), 2);
3379
3380 return img::format("BNEC %s, %s, %s", rs3, rt3, u);
3381}
3382
3383
3384/*
3385 *
3386 *
3387 * 3 2 1
3388 * 10987654321098765432109876543210
3389 * 001000 x1110000101
3390 * rt -----
3391 * rs -----
3392 * rd -----
3393 */
3394std::string NMD::BNEC_32_(uint64 instruction)
3395{
3396 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3397 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3398 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3399
3400 std::string rs = GPR(copy(rs_value));
3401 std::string rt = GPR(copy(rt_value));
3402 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3403
3404 return img::format("BNEC %s, %s, %s", rs, rt, s);
3405}
3406
3407
3408/*
3409 *
3410 *
3411 * 3 2 1
3412 * 10987654321098765432109876543210
3413 * 001000 x1110000101
3414 * rt -----
3415 * rs -----
3416 * rd -----
3417 */
3418std::string NMD::BNEIC(uint64 instruction)
3419{
3420 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3421 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3422 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3423
3424 std::string rt = GPR(copy(rt_value));
3425 std::string u = IMMEDIATE(copy(u_value));
3426 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3427
3428 return img::format("BNEIC %s, %s, %s", rt, u, s);
3429}
3430
3431
3432/*
3433 *
3434 *
3435 * 3 2 1
3436 * 10987654321098765432109876543210
3437 * 001000 x1110000101
3438 * rt -----
3439 * rs -----
3440 * rd -----
3441 */
3442std::string NMD::BNEZC_16_(uint64 instruction)
3443{
3444 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3445 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
3446
3447 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
3448 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
3449
3450 return img::format("BNEZC %s, %s", rt3, s);
3451}
3452
3453
3454/*
3455 * [DSP] BPOSGE32C offset - Branch on greater than or equal to value 32 in
3456 * DSPControl Pos field
3457 *
3458 * 3 2 1
3459 * 10987654321098765432109876543210
3460 * 100010xxxxx0010001
3461 * s[13:1] -------------
3462 * s[14] -
3463 */
3464std::string NMD::BPOSGE32C(uint64 instruction)
3465{
3466 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3467
3468 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3469
3470 return img::format("BPOSGE32C %s", s);
3471}
3472
3473
3474/*
3475 *
3476 *
3477 * 3 2 1
3478 * 10987654321098765432109876543210
3479 * 001000 x1110000101
3480 * rt -----
3481 * rs -----
3482 * rd -----
3483 */
3484std::string NMD::BREAK_16_(uint64 instruction)
3485{
3486 uint64 code_value = extract_code_2_1_0(instruction);
3487
3488 std::string code = IMMEDIATE(copy(code_value));
3489
3490 return img::format("BREAK %s", code);
3491}
3492
3493
3494/*
3495 * BREAK code - Break. Cause a Breakpoint exception
3496 *
3497 * 3 2 1
3498 * 10987654321098765432109876543210
3499 * 001000 x1110000101
3500 * rt -----
3501 * rs -----
3502 * rd -----
3503 */
3504std::string NMD::BREAK_32_(uint64 instruction)
3505{
3506 uint64 code_value = extract_code_18_to_0(instruction);
3507
3508 std::string code = IMMEDIATE(copy(code_value));
3509
3510 return img::format("BREAK %s", code);
3511}
3512
3513
3514/*
3515 *
3516 *
3517 * 3 2 1
3518 * 10987654321098765432109876543210
3519 * 001000 x1110000101
3520 * rt -----
3521 * rs -----
3522 * rd -----
3523 */
3524std::string NMD::BRSC(uint64 instruction)
3525{
3526 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3527
3528 std::string rs = GPR(copy(rs_value));
3529
3530 return img::format("BRSC %s", rs);
3531}
3532
3533
3534/*
3535 *
3536 *
3537 * 3 2 1
3538 * 10987654321098765432109876543210
3539 * 001000 x1110000101
3540 * rt -----
3541 * rs -----
3542 * rd -----
3543 */
3544std::string NMD::CACHE(uint64 instruction)
3545{
3546 uint64 op_value = extract_op_25_24_23_22_21(instruction);
3547 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3548 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3549
3550 std::string op = IMMEDIATE(copy(op_value));
3551 std::string s = IMMEDIATE(copy(s_value));
3552 std::string rs = GPR(copy(rs_value));
3553
3554 return img::format("CACHE %s, %s(%s)", op, s, rs);
3555}
3556
3557
3558/*
3559 *
3560 *
3561 * 3 2 1
3562 * 10987654321098765432109876543210
3563 * 001000 x1110000101
3564 * rt -----
3565 * rs -----
3566 * rd -----
3567 */
3568std::string NMD::CACHEE(uint64 instruction)
3569{
3570 uint64 op_value = extract_op_25_24_23_22_21(instruction);
3571 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3572 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3573
3574 std::string op = IMMEDIATE(copy(op_value));
3575 std::string s = IMMEDIATE(copy(s_value));
3576 std::string rs = GPR(copy(rs_value));
3577
3578 return img::format("CACHEE %s, %s(%s)", op, s, rs);
3579}
3580
3581
3582/*
3583 *
3584 *
3585 * 3 2 1
3586 * 10987654321098765432109876543210
3587 * 001000 x1110000101
3588 * rt -----
3589 * rs -----
3590 * rd -----
3591 */
3592std::string NMD::CEIL_L_D(uint64 instruction)
3593{
3594 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3595 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3596
3597 std::string ft = FPR(copy(ft_value));
3598 std::string fs = FPR(copy(fs_value));
3599
3600 return img::format("CEIL.L.D %s, %s", ft, fs);
3601}
3602
3603
3604/*
3605 *
3606 *
3607 * 3 2 1
3608 * 10987654321098765432109876543210
3609 * 001000 x1110000101
3610 * rt -----
3611 * rs -----
3612 * rd -----
3613 */
3614std::string NMD::CEIL_L_S(uint64 instruction)
3615{
3616 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3617 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3618
3619 std::string ft = FPR(copy(ft_value));
3620 std::string fs = FPR(copy(fs_value));
3621
3622 return img::format("CEIL.L.S %s, %s", ft, fs);
3623}
3624
3625
3626/*
3627 *
3628 *
3629 * 3 2 1
3630 * 10987654321098765432109876543210
3631 * 001000 x1110000101
3632 * rt -----
3633 * rs -----
3634 * rd -----
3635 */
3636std::string NMD::CEIL_W_D(uint64 instruction)
3637{
3638 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3639 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3640
3641 std::string ft = FPR(copy(ft_value));
3642 std::string fs = FPR(copy(fs_value));
3643
3644 return img::format("CEIL.W.D %s, %s", ft, fs);
3645}
3646
3647
3648/*
3649 *
3650 *
3651 * 3 2 1
3652 * 10987654321098765432109876543210
3653 * 001000 x1110000101
3654 * rt -----
3655 * rs -----
3656 * rd -----
3657 */
3658std::string NMD::CEIL_W_S(uint64 instruction)
3659{
3660 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3661 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3662
3663 std::string ft = FPR(copy(ft_value));
3664 std::string fs = FPR(copy(fs_value));
3665
3666 return img::format("CEIL.W.S %s, %s", ft, fs);
3667}
3668
3669
3670/*
3671 *
3672 *
3673 * 3 2 1
3674 * 10987654321098765432109876543210
3675 * 001000 x1110000101
3676 * rt -----
3677 * rs -----
3678 * rd -----
3679 */
3680std::string NMD::CFC1(uint64 instruction)
3681{
3682 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3683 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3684
3685 std::string rt = GPR(copy(rt_value));
3686 std::string cs = CPR(copy(cs_value));
3687
3688 return img::format("CFC1 %s, %s", rt, cs);
3689}
3690
3691
3692/*
3693 *
3694 *
3695 * 3 2 1
3696 * 10987654321098765432109876543210
3697 * 001000 x1110000101
3698 * rt -----
3699 * rs -----
3700 * rd -----
3701 */
3702std::string NMD::CFC2(uint64 instruction)
3703{
3704 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3705 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3706
3707 std::string rt = GPR(copy(rt_value));
3708 std::string cs = CPR(copy(cs_value));
3709
3710 return img::format("CFC2 %s, %s", rt, cs);
3711}
3712
3713
3714/*
3715 *
3716 *
3717 * 3 2 1
3718 * 10987654321098765432109876543210
3719 * 001000 x1110000101
3720 * rt -----
3721 * rs -----
3722 * rd -----
3723 */
3724std::string NMD::CLASS_D(uint64 instruction)
3725{
3726 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3727 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3728
3729 std::string ft = FPR(copy(ft_value));
3730 std::string fs = FPR(copy(fs_value));
3731
3732 return img::format("CLASS.D %s, %s", ft, fs);
3733}
3734
3735
3736/*
3737 *
3738 *
3739 * 3 2 1
3740 * 10987654321098765432109876543210
3741 * 001000 x1110000101
3742 * rt -----
3743 * rs -----
3744 * rd -----
3745 */
3746std::string NMD::CLASS_S(uint64 instruction)
3747{
3748 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3749 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3750
3751 std::string ft = FPR(copy(ft_value));
3752 std::string fs = FPR(copy(fs_value));
3753
3754 return img::format("CLASS.S %s, %s", ft, fs);
3755}
3756
3757
3758/*
3759 *
3760 *
3761 * 3 2 1
3762 * 10987654321098765432109876543210
3763 * 001000 x1110000101
3764 * rt -----
3765 * rs -----
3766 * rd -----
3767 */
3768std::string NMD::CLO(uint64 instruction)
3769{
3770 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3771 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3772
3773 std::string rt = GPR(copy(rt_value));
3774 std::string rs = GPR(copy(rs_value));
3775
3776 return img::format("CLO %s, %s", rt, rs);
3777}
3778
3779
3780/*
3781 *
3782 *
3783 * 3 2 1
3784 * 10987654321098765432109876543210
3785 * 001000 x1110000101
3786 * rt -----
3787 * rs -----
3788 * rd -----
3789 */
3790std::string NMD::CLZ(uint64 instruction)
3791{
3792 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3793 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3794
3795 std::string rt = GPR(copy(rt_value));
3796 std::string rs = GPR(copy(rs_value));
3797
3798 return img::format("CLZ %s, %s", rt, rs);
3799}
3800
3801
3802/*
3803 *
3804 *
3805 * 3 2 1
3806 * 10987654321098765432109876543210
3807 * 001000 x1110000101
3808 * rt -----
3809 * rs -----
3810 * rd -----
3811 */
3812std::string NMD::CMP_AF_D(uint64 instruction)
3813{
3814 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3815 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3816 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3817
3818 std::string fd = FPR(copy(fd_value));
3819 std::string fs = FPR(copy(fs_value));
3820 std::string ft = FPR(copy(ft_value));
3821
3822 return img::format("CMP.AF.D %s, %s, %s", fd, fs, ft);
3823}
3824
3825
3826/*
3827 *
3828 *
3829 * 3 2 1
3830 * 10987654321098765432109876543210
3831 * 001000 x1110000101
3832 * rt -----
3833 * rs -----
3834 * rd -----
3835 */
3836std::string NMD::CMP_AF_S(uint64 instruction)
3837{
3838 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3839 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3840 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3841
3842 std::string fd = FPR(copy(fd_value));
3843 std::string fs = FPR(copy(fs_value));
3844 std::string ft = FPR(copy(ft_value));
3845
3846 return img::format("CMP.AF.S %s, %s, %s", fd, fs, ft);
3847}
3848
3849
3850/*
3851 *
3852 *
3853 * 3 2 1
3854 * 10987654321098765432109876543210
3855 * 001000 x1110000101
3856 * rt -----
3857 * rs -----
3858 * rd -----
3859 */
3860std::string NMD::CMP_EQ_D(uint64 instruction)
3861{
3862 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3863 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3864 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3865
3866 std::string fd = FPR(copy(fd_value));
3867 std::string fs = FPR(copy(fs_value));
3868 std::string ft = FPR(copy(ft_value));
3869
3870 return img::format("CMP.EQ.D %s, %s, %s", fd, fs, ft);
3871}
3872
3873
3874/*
3875 * [DSP] CMP.EQ.PH rs, rt - Compare vectors of signed integer halfword values
3876 *
3877 * 3 2 1
3878 * 10987654321098765432109876543210
3879 * 001000 xxxxxx0000000101
3880 * rt -----
3881 * rs -----
3882 */
3883std::string NMD::CMP_EQ_PH(uint64 instruction)
3884{
3885 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3886 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3887
3888 std::string rs = GPR(copy(rs_value));
3889 std::string rt = GPR(copy(rt_value));
3890
3891 return img::format("CMP.EQ.PH %s, %s", rs, rt);
3892}
3893
3894
3895/*
3896 *
3897 *
3898 * 3 2 1
3899 * 10987654321098765432109876543210
3900 * 001000 x1110000101
3901 * rt -----
3902 * rs -----
3903 * rd -----
3904 */
3905std::string NMD::CMP_EQ_S(uint64 instruction)
3906{
3907 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3908 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3909 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3910
3911 std::string fd = FPR(copy(fd_value));
3912 std::string fs = FPR(copy(fs_value));
3913 std::string ft = FPR(copy(ft_value));
3914
3915 return img::format("CMP.EQ.S %s, %s, %s", fd, fs, ft);
3916}
3917
3918
3919/*
3920 *
3921 *
3922 * 3 2 1
3923 * 10987654321098765432109876543210
3924 * 001000 x1110000101
3925 * rt -----
3926 * rs -----
3927 * rd -----
3928 */
3929std::string NMD::CMP_LE_D(uint64 instruction)
3930{
3931 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3932 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3933 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3934
3935 std::string fd = FPR(copy(fd_value));
3936 std::string fs = FPR(copy(fs_value));
3937 std::string ft = FPR(copy(ft_value));
3938
3939 return img::format("CMP.LE.D %s, %s, %s", fd, fs, ft);
3940}
3941
3942
3943/*
3944 * [DSP] CMP.LE.PH rs, rt - Compare vectors of signed integer halfword values
3945 *
3946 * 3 2 1
3947 * 10987654321098765432109876543210
3948 * 001000 xxxxxx0010000101
3949 * rt -----
3950 * rs -----
3951 */
3952std::string NMD::CMP_LE_PH(uint64 instruction)
3953{
3954 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3955 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3956
3957 std::string rs = GPR(copy(rs_value));
3958 std::string rt = GPR(copy(rt_value));
3959
3960 return img::format("CMP.LE.PH %s, %s", rs, rt);
3961}
3962
3963
3964/*
3965 *
3966 *
3967 * 3 2 1
3968 * 10987654321098765432109876543210
3969 * 001000 x1110000101
3970 * rt -----
3971 * rs -----
3972 * rd -----
3973 */
3974std::string NMD::CMP_LE_S(uint64 instruction)
3975{
3976 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3977 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3978 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3979
3980 std::string fd = FPR(copy(fd_value));
3981 std::string fs = FPR(copy(fs_value));
3982 std::string ft = FPR(copy(ft_value));
3983
3984 return img::format("CMP.LE.S %s, %s, %s", fd, fs, ft);
3985}
3986
3987
3988/*
3989 *
3990 *
3991 * 3 2 1
3992 * 10987654321098765432109876543210
3993 * 001000 x1110000101
3994 * rt -----
3995 * rs -----
3996 * rd -----
3997 */
3998std::string NMD::CMP_LT_D(uint64 instruction)
3999{
4000 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4001 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4002 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4003
4004 std::string fd = FPR(copy(fd_value));
4005 std::string fs = FPR(copy(fs_value));
4006 std::string ft = FPR(copy(ft_value));
4007
4008 return img::format("CMP.LT.D %s, %s, %s", fd, fs, ft);
4009}
4010
4011
4012/*
4013 * [DSP] CMP.LT.PH rs, rt - Compare vectors of signed integer halfword values
4014 *
4015 * 3 2 1
4016 * 10987654321098765432109876543210
4017 * 001000 xxxxxx0001000101
4018 * rt -----
4019 * rs -----
4020 */
4021std::string NMD::CMP_LT_PH(uint64 instruction)
4022{
4023 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4024 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4025
4026 std::string rs = GPR(copy(rs_value));
4027 std::string rt = GPR(copy(rt_value));
4028
4029 return img::format("CMP.LT.PH %s, %s", rs, rt);
4030}
4031
4032
4033/*
4034 *
4035 *
4036 * 3 2 1
4037 * 10987654321098765432109876543210
4038 * 001000 x1110000101
4039 * rt -----
4040 * rs -----
4041 * rd -----
4042 */
4043std::string NMD::CMP_LT_S(uint64 instruction)
4044{
4045 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4046 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4047 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4048
4049 std::string fd = FPR(copy(fd_value));
4050 std::string fs = FPR(copy(fs_value));
4051 std::string ft = FPR(copy(ft_value));
4052
4053 return img::format("CMP.LT.S %s, %s, %s", fd, fs, ft);
4054}
4055
4056
4057/*
4058 *
4059 *
4060 * 3 2 1
4061 * 10987654321098765432109876543210
4062 * 001000 x1110000101
4063 * rt -----
4064 * rs -----
4065 * rd -----
4066 */
4067std::string NMD::CMP_NE_D(uint64 instruction)
4068{
4069 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4070 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4071 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4072
4073 std::string fd = FPR(copy(fd_value));
4074 std::string fs = FPR(copy(fs_value));
4075 std::string ft = FPR(copy(ft_value));
4076
4077 return img::format("CMP.NE.D %s, %s, %s", fd, fs, ft);
4078}
4079
4080
4081/*
4082 *
4083 *
4084 * 3 2 1
4085 * 10987654321098765432109876543210
4086 * 001000 x1110000101
4087 * rt -----
4088 * rs -----
4089 * rd -----
4090 */
4091std::string NMD::CMP_NE_S(uint64 instruction)
4092{
4093 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4094 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4095 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4096
4097 std::string fd = FPR(copy(fd_value));
4098 std::string fs = FPR(copy(fs_value));
4099 std::string ft = FPR(copy(ft_value));
4100
4101 return img::format("CMP.NE.S %s, %s, %s", fd, fs, ft);
4102}
4103
4104
4105/*
4106 *
4107 *
4108 * 3 2 1
4109 * 10987654321098765432109876543210
4110 * 001000 x1110000101
4111 * rt -----
4112 * rs -----
4113 * rd -----
4114 */
4115std::string NMD::CMP_OR_D(uint64 instruction)
4116{
4117 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4118 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4119 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4120
4121 std::string fd = FPR(copy(fd_value));
4122 std::string fs = FPR(copy(fs_value));
4123 std::string ft = FPR(copy(ft_value));
4124
4125 return img::format("CMP.OR.D %s, %s, %s", fd, fs, ft);
4126}
4127
4128
4129/*
4130 *
4131 *
4132 * 3 2 1
4133 * 10987654321098765432109876543210
4134 * 001000 x1110000101
4135 * rt -----
4136 * rs -----
4137 * rd -----
4138 */
4139std::string NMD::CMP_OR_S(uint64 instruction)
4140{
4141 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4142 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4143 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4144
4145 std::string fd = FPR(copy(fd_value));
4146 std::string fs = FPR(copy(fs_value));
4147 std::string ft = FPR(copy(ft_value));
4148
4149 return img::format("CMP.OR.S %s, %s, %s", fd, fs, ft);
4150}
4151
4152
4153/*
4154 *
4155 *
4156 * 3 2 1
4157 * 10987654321098765432109876543210
4158 * 001000 x1110000101
4159 * rt -----
4160 * rs -----
4161 * rd -----
4162 */
4163std::string NMD::CMP_SAF_D(uint64 instruction)
4164{
4165 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4166 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4167 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4168
4169 std::string fd = FPR(copy(fd_value));
4170 std::string fs = FPR(copy(fs_value));
4171 std::string ft = FPR(copy(ft_value));
4172
4173 return img::format("CMP.SAF.D %s, %s, %s", fd, fs, ft);
4174}
4175
4176
4177/*
4178 *
4179 *
4180 * 3 2 1
4181 * 10987654321098765432109876543210
4182 * 001000 x1110000101
4183 * rt -----
4184 * rs -----
4185 * rd -----
4186 */
4187std::string NMD::CMP_SAF_S(uint64 instruction)
4188{
4189 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4190 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4191 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4192
4193 std::string fd = FPR(copy(fd_value));
4194 std::string fs = FPR(copy(fs_value));
4195 std::string ft = FPR(copy(ft_value));
4196
4197 return img::format("CMP.SAF.S %s, %s, %s", fd, fs, ft);
4198}
4199
4200
4201/*
4202 *
4203 *
4204 * 3 2 1
4205 * 10987654321098765432109876543210
4206 * 001000 x1110000101
4207 * rt -----
4208 * rs -----
4209 * rd -----
4210 */
4211std::string NMD::CMP_SEQ_D(uint64 instruction)
4212{
4213 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4214 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4215 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4216
4217 std::string fd = FPR(copy(fd_value));
4218 std::string fs = FPR(copy(fs_value));
4219 std::string ft = FPR(copy(ft_value));
4220
4221 return img::format("CMP.SEQ.D %s, %s, %s", fd, fs, ft);
4222}
4223
4224
4225/*
4226 *
4227 *
4228 * 3 2 1
4229 * 10987654321098765432109876543210
4230 * 001000 x1110000101
4231 * rt -----
4232 * rs -----
4233 * rd -----
4234 */
4235std::string NMD::CMP_SEQ_S(uint64 instruction)
4236{
4237 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4238 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4239 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4240
4241 std::string fd = FPR(copy(fd_value));
4242 std::string fs = FPR(copy(fs_value));
4243 std::string ft = FPR(copy(ft_value));
4244
4245 return img::format("CMP.SEQ.S %s, %s, %s", fd, fs, ft);
4246}
4247
4248
4249/*
4250 *
4251 *
4252 * 3 2 1
4253 * 10987654321098765432109876543210
4254 * 001000 x1110000101
4255 * rt -----
4256 * rs -----
4257 * rd -----
4258 */
4259std::string NMD::CMP_SLE_D(uint64 instruction)
4260{
4261 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4262 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4263 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4264
4265 std::string fd = FPR(copy(fd_value));
4266 std::string fs = FPR(copy(fs_value));
4267 std::string ft = FPR(copy(ft_value));
4268
4269 return img::format("CMP.SLE.D %s, %s, %s", fd, fs, ft);
4270}
4271
4272
4273/*
4274 *
4275 *
4276 * 3 2 1
4277 * 10987654321098765432109876543210
4278 * 001000 x1110000101
4279 * rt -----
4280 * rs -----
4281 * rd -----
4282 */
4283std::string NMD::CMP_SLE_S(uint64 instruction)
4284{
4285 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4286 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4287 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4288
4289 std::string fd = FPR(copy(fd_value));
4290 std::string fs = FPR(copy(fs_value));
4291 std::string ft = FPR(copy(ft_value));
4292
4293 return img::format("CMP.SLE.S %s, %s, %s", fd, fs, ft);
4294}
4295
4296
4297/*
4298 *
4299 *
4300 * 3 2 1
4301 * 10987654321098765432109876543210
4302 * 001000 x1110000101
4303 * rt -----
4304 * rs -----
4305 * rd -----
4306 */
4307std::string NMD::CMP_SLT_D(uint64 instruction)
4308{
4309 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4310 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4311 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4312
4313 std::string fd = FPR(copy(fd_value));
4314 std::string fs = FPR(copy(fs_value));
4315 std::string ft = FPR(copy(ft_value));
4316
4317 return img::format("CMP.SLT.D %s, %s, %s", fd, fs, ft);
4318}
4319
4320
4321/*
4322 *
4323 *
4324 * 3 2 1
4325 * 10987654321098765432109876543210
4326 * 001000 x1110000101
4327 * rt -----
4328 * rs -----
4329 * rd -----
4330 */
4331std::string NMD::CMP_SLT_S(uint64 instruction)
4332{
4333 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4334 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4335 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4336
4337 std::string fd = FPR(copy(fd_value));
4338 std::string fs = FPR(copy(fs_value));
4339 std::string ft = FPR(copy(ft_value));
4340
4341 return img::format("CMP.SLT.S %s, %s, %s", fd, fs, ft);
4342}
4343
4344
4345/*
4346 *
4347 *
4348 * 3 2 1
4349 * 10987654321098765432109876543210
4350 * 001000 x1110000101
4351 * rt -----
4352 * rs -----
4353 * rd -----
4354 */
4355std::string NMD::CMP_SNE_D(uint64 instruction)
4356{
4357 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4358 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4359 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4360
4361 std::string fd = FPR(copy(fd_value));
4362 std::string fs = FPR(copy(fs_value));
4363 std::string ft = FPR(copy(ft_value));
4364
4365 return img::format("CMP.SNE.D %s, %s, %s", fd, fs, ft);
4366}
4367
4368
4369/*
4370 *
4371 *
4372 * 3 2 1
4373 * 10987654321098765432109876543210
4374 * 001000 x1110000101
4375 * rt -----
4376 * rs -----
4377 * rd -----
4378 */
4379std::string NMD::CMP_SNE_S(uint64 instruction)
4380{
4381 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4382 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4383 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4384
4385 std::string fd = FPR(copy(fd_value));
4386 std::string fs = FPR(copy(fs_value));
4387 std::string ft = FPR(copy(ft_value));
4388
4389 return img::format("CMP.SNE.S %s, %s, %s", fd, fs, ft);
4390}
4391
4392
4393/*
4394 *
4395 *
4396 * 3 2 1
4397 * 10987654321098765432109876543210
4398 * 001000 x1110000101
4399 * rt -----
4400 * rs -----
4401 * rd -----
4402 */
4403std::string NMD::CMP_SOR_D(uint64 instruction)
4404{
4405 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4406 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4407 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4408
4409 std::string fd = FPR(copy(fd_value));
4410 std::string fs = FPR(copy(fs_value));
4411 std::string ft = FPR(copy(ft_value));
4412
4413 return img::format("CMP.SOR.D %s, %s, %s", fd, fs, ft);
4414}
4415
4416
4417/*
4418 *
4419 *
4420 * 3 2 1
4421 * 10987654321098765432109876543210
4422 * 001000 x1110000101
4423 * rt -----
4424 * rs -----
4425 * rd -----
4426 */
4427std::string NMD::CMP_SOR_S(uint64 instruction)
4428{
4429 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4430 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4431 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4432
4433 std::string fd = FPR(copy(fd_value));
4434 std::string fs = FPR(copy(fs_value));
4435 std::string ft = FPR(copy(ft_value));
4436
4437 return img::format("CMP.SOR.S %s, %s, %s", fd, fs, ft);
4438}
4439
4440
4441/*
4442 *
4443 *
4444 * 3 2 1
4445 * 10987654321098765432109876543210
4446 * 001000 x1110000101
4447 * rt -----
4448 * rs -----
4449 * rd -----
4450 */
4451std::string NMD::CMP_SUEQ_D(uint64 instruction)
4452{
4453 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4454 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4455 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4456
4457 std::string fd = FPR(copy(fd_value));
4458 std::string fs = FPR(copy(fs_value));
4459 std::string ft = FPR(copy(ft_value));
4460
4461 return img::format("CMP.SUEQ.D %s, %s, %s", fd, fs, ft);
4462}
4463
4464
4465/*
4466 *
4467 *
4468 * 3 2 1
4469 * 10987654321098765432109876543210
4470 * 001000 x1110000101
4471 * rt -----
4472 * rs -----
4473 * rd -----
4474 */
4475std::string NMD::CMP_SUEQ_S(uint64 instruction)
4476{
4477 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4478 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4479 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4480
4481 std::string fd = FPR(copy(fd_value));
4482 std::string fs = FPR(copy(fs_value));
4483 std::string ft = FPR(copy(ft_value));
4484
4485 return img::format("CMP.SUEQ.S %s, %s, %s", fd, fs, ft);
4486}
4487
4488
4489/*
4490 *
4491 *
4492 * 3 2 1
4493 * 10987654321098765432109876543210
4494 * 001000 x1110000101
4495 * rt -----
4496 * rs -----
4497 * rd -----
4498 */
4499std::string NMD::CMP_SULE_D(uint64 instruction)
4500{
4501 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4502 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4503 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4504
4505 std::string fd = FPR(copy(fd_value));
4506 std::string fs = FPR(copy(fs_value));
4507 std::string ft = FPR(copy(ft_value));
4508
4509 return img::format("CMP.SULE.D %s, %s, %s", fd, fs, ft);
4510}
4511
4512
4513/*
4514 *
4515 *
4516 * 3 2 1
4517 * 10987654321098765432109876543210
4518 * 001000 x1110000101
4519 * rt -----
4520 * rs -----
4521 * rd -----
4522 */
4523std::string NMD::CMP_SULE_S(uint64 instruction)
4524{
4525 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4526 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4527 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4528
4529 std::string fd = FPR(copy(fd_value));
4530 std::string fs = FPR(copy(fs_value));
4531 std::string ft = FPR(copy(ft_value));
4532
4533 return img::format("CMP.SULE.S %s, %s, %s", fd, fs, ft);
4534}
4535
4536
4537/*
4538 *
4539 *
4540 * 3 2 1
4541 * 10987654321098765432109876543210
4542 * 001000 x1110000101
4543 * rt -----
4544 * rs -----
4545 * rd -----
4546 */
4547std::string NMD::CMP_SULT_D(uint64 instruction)
4548{
4549 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4550 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4551 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4552
4553 std::string fd = FPR(copy(fd_value));
4554 std::string fs = FPR(copy(fs_value));
4555 std::string ft = FPR(copy(ft_value));
4556
4557 return img::format("CMP.SULT.D %s, %s, %s", fd, fs, ft);
4558}
4559
4560
4561/*
4562 *
4563 *
4564 * 3 2 1
4565 * 10987654321098765432109876543210
4566 * 001000 x1110000101
4567 * rt -----
4568 * rs -----
4569 * rd -----
4570 */
4571std::string NMD::CMP_SULT_S(uint64 instruction)
4572{
4573 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4574 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4575 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4576
4577 std::string fd = FPR(copy(fd_value));
4578 std::string fs = FPR(copy(fs_value));
4579 std::string ft = FPR(copy(ft_value));
4580
4581 return img::format("CMP.SULT.S %s, %s, %s", fd, fs, ft);
4582}
4583
4584
4585/*
4586 *
4587 *
4588 * 3 2 1
4589 * 10987654321098765432109876543210
4590 * 001000 x1110000101
4591 * rt -----
4592 * rs -----
4593 * rd -----
4594 */
4595std::string NMD::CMP_SUN_D(uint64 instruction)
4596{
4597 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4598 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4599 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4600
4601 std::string fd = FPR(copy(fd_value));
4602 std::string fs = FPR(copy(fs_value));
4603 std::string ft = FPR(copy(ft_value));
4604
4605 return img::format("CMP.SUN.D %s, %s, %s", fd, fs, ft);
4606}
4607
4608
4609/*
4610 *
4611 *
4612 * 3 2 1
4613 * 10987654321098765432109876543210
4614 * 001000 x1110000101
4615 * rt -----
4616 * rs -----
4617 * rd -----
4618 */
4619std::string NMD::CMP_SUNE_D(uint64 instruction)
4620{
4621 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4622 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4623 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4624
4625 std::string fd = FPR(copy(fd_value));
4626 std::string fs = FPR(copy(fs_value));
4627 std::string ft = FPR(copy(ft_value));
4628
4629 return img::format("CMP.SUNE.D %s, %s, %s", fd, fs, ft);
4630}
4631
4632
4633/*
4634 *
4635 *
4636 * 3 2 1
4637 * 10987654321098765432109876543210
4638 * 001000 x1110000101
4639 * rt -----
4640 * rs -----
4641 * rd -----
4642 */
4643std::string NMD::CMP_SUNE_S(uint64 instruction)
4644{
4645 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4646 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4647 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4648
4649 std::string fd = FPR(copy(fd_value));
4650 std::string fs = FPR(copy(fs_value));
4651 std::string ft = FPR(copy(ft_value));
4652
4653 return img::format("CMP.SUNE.S %s, %s, %s", fd, fs, ft);
4654}
4655
4656
4657/*
4658 *
4659 *
4660 * 3 2 1
4661 * 10987654321098765432109876543210
4662 * 001000 x1110000101
4663 * rt -----
4664 * rs -----
4665 * rd -----
4666 */
4667std::string NMD::CMP_SUN_S(uint64 instruction)
4668{
4669 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4670 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4671 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4672
4673 std::string fd = FPR(copy(fd_value));
4674 std::string fs = FPR(copy(fs_value));
4675 std::string ft = FPR(copy(ft_value));
4676
4677 return img::format("CMP.SUN.S %s, %s, %s", fd, fs, ft);
4678}
4679
4680
4681/*
4682 *
4683 *
4684 * 3 2 1
4685 * 10987654321098765432109876543210
4686 * 001000 x1110000101
4687 * rt -----
4688 * rs -----
4689 * rd -----
4690 */
4691std::string NMD::CMP_UEQ_D(uint64 instruction)
4692{
4693 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4694 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4695 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4696
4697 std::string fd = FPR(copy(fd_value));
4698 std::string fs = FPR(copy(fs_value));
4699 std::string ft = FPR(copy(ft_value));
4700
4701 return img::format("CMP.UEQ.D %s, %s, %s", fd, fs, ft);
4702}
4703
4704
4705/*
4706 *
4707 *
4708 * 3 2 1
4709 * 10987654321098765432109876543210
4710 * 001000 x1110000101
4711 * rt -----
4712 * rs -----
4713 * rd -----
4714 */
4715std::string NMD::CMP_UEQ_S(uint64 instruction)
4716{
4717 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4718 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4719 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4720
4721 std::string fd = FPR(copy(fd_value));
4722 std::string fs = FPR(copy(fs_value));
4723 std::string ft = FPR(copy(ft_value));
4724
4725 return img::format("CMP.UEQ.S %s, %s, %s", fd, fs, ft);
4726}
4727
4728
4729/*
4730 *
4731 *
4732 * 3 2 1
4733 * 10987654321098765432109876543210
4734 * 001000 x1110000101
4735 * rt -----
4736 * rs -----
4737 * rd -----
4738 */
4739std::string NMD::CMP_ULE_D(uint64 instruction)
4740{
4741 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4742 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4743 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4744
4745 std::string fd = FPR(copy(fd_value));
4746 std::string fs = FPR(copy(fs_value));
4747 std::string ft = FPR(copy(ft_value));
4748
4749 return img::format("CMP.ULE.D %s, %s, %s", fd, fs, ft);
4750}
4751
4752
4753/*
4754 *
4755 *
4756 * 3 2 1
4757 * 10987654321098765432109876543210
4758 * 001000 x1110000101
4759 * rt -----
4760 * rs -----
4761 * rd -----
4762 */
4763std::string NMD::CMP_ULE_S(uint64 instruction)
4764{
4765 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4766 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4767 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4768
4769 std::string fd = FPR(copy(fd_value));
4770 std::string fs = FPR(copy(fs_value));
4771 std::string ft = FPR(copy(ft_value));
4772
4773 return img::format("CMP.ULE.S %s, %s, %s", fd, fs, ft);
4774}
4775
4776
4777/*
4778 *
4779 *
4780 * 3 2 1
4781 * 10987654321098765432109876543210
4782 * 001000 x1110000101
4783 * rt -----
4784 * rs -----
4785 * rd -----
4786 */
4787std::string NMD::CMP_ULT_D(uint64 instruction)
4788{
4789 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4790 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4791 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4792
4793 std::string fd = FPR(copy(fd_value));
4794 std::string fs = FPR(copy(fs_value));
4795 std::string ft = FPR(copy(ft_value));
4796
4797 return img::format("CMP.ULT.D %s, %s, %s", fd, fs, ft);
4798}
4799
4800
4801/*
4802 *
4803 *
4804 * 3 2 1
4805 * 10987654321098765432109876543210
4806 * 001000 x1110000101
4807 * rt -----
4808 * rs -----
4809 * rd -----
4810 */
4811std::string NMD::CMP_ULT_S(uint64 instruction)
4812{
4813 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4814 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4815 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4816
4817 std::string fd = FPR(copy(fd_value));
4818 std::string fs = FPR(copy(fs_value));
4819 std::string ft = FPR(copy(ft_value));
4820
4821 return img::format("CMP.ULT.S %s, %s, %s", fd, fs, ft);
4822}
4823
4824
4825/*
4826 *
4827 *
4828 * 3 2 1
4829 * 10987654321098765432109876543210
4830 * 001000 x1110000101
4831 * rt -----
4832 * rs -----
4833 * rd -----
4834 */
4835std::string NMD::CMP_UN_D(uint64 instruction)
4836{
4837 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4838 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4839 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4840
4841 std::string fd = FPR(copy(fd_value));
4842 std::string fs = FPR(copy(fs_value));
4843 std::string ft = FPR(copy(ft_value));
4844
4845 return img::format("CMP.UN.D %s, %s, %s", fd, fs, ft);
4846}
4847
4848
4849/*
4850 *
4851 *
4852 * 3 2 1
4853 * 10987654321098765432109876543210
4854 * 001000 x1110000101
4855 * rt -----
4856 * rs -----
4857 * rd -----
4858 */
4859std::string NMD::CMP_UNE_D(uint64 instruction)
4860{
4861 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4862 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4863 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4864
4865 std::string fd = FPR(copy(fd_value));
4866 std::string fs = FPR(copy(fs_value));
4867 std::string ft = FPR(copy(ft_value));
4868
4869 return img::format("CMP.UNE.D %s, %s, %s", fd, fs, ft);
4870}
4871
4872
4873/*
4874 *
4875 *
4876 * 3 2 1
4877 * 10987654321098765432109876543210
4878 * 001000 x1110000101
4879 * rt -----
4880 * rs -----
4881 * rd -----
4882 */
4883std::string NMD::CMP_UNE_S(uint64 instruction)
4884{
4885 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4886 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4887 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4888
4889 std::string fd = FPR(copy(fd_value));
4890 std::string fs = FPR(copy(fs_value));
4891 std::string ft = FPR(copy(ft_value));
4892
4893 return img::format("CMP.UNE.S %s, %s, %s", fd, fs, ft);
4894}
4895
4896
4897/*
4898 *
4899 *
4900 * 3 2 1
4901 * 10987654321098765432109876543210
4902 * 001000 x1110000101
4903 * rt -----
4904 * rs -----
4905 * rd -----
4906 */
4907std::string NMD::CMP_UN_S(uint64 instruction)
4908{
4909 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4910 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4911 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4912
4913 std::string fd = FPR(copy(fd_value));
4914 std::string fs = FPR(copy(fs_value));
4915 std::string ft = FPR(copy(ft_value));
4916
4917 return img::format("CMP.UN.S %s, %s, %s", fd, fs, ft);
4918}
4919
4920
4921/*
4922 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4923 * four bytes and write result to GPR and DSPControl
4924 *
4925 * 3 2 1
4926 * 10987654321098765432109876543210
4927 * 001000 x0110000101
4928 * rt -----
4929 * rs -----
4930 * rd -----
4931 */
4932std::string NMD::CMPGDU_EQ_QB(uint64 instruction)
4933{
4934 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4935 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4936 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4937
4938 std::string rd = GPR(copy(rd_value));
4939 std::string rs = GPR(copy(rs_value));
4940 std::string rt = GPR(copy(rt_value));
4941
4942 return img::format("CMPGDU.EQ.QB %s, %s, %s", rd, rs, rt);
4943}
4944
4945
4946/*
4947 * [DSP] CMPGDU.LE.QB rd, rs, rt - Compare unsigned vector of
4948 * four bytes and write result to GPR and DSPControl
4949 *
4950 * 3 2 1
4951 * 10987654321098765432109876543210
4952 * 001000 x1000000101
4953 * rt -----
4954 * rs -----
4955 * rd -----
4956 */
4957std::string NMD::CMPGDU_LE_QB(uint64 instruction)
4958{
4959 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4960 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4961 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4962
4963 std::string rd = GPR(copy(rd_value));
4964 std::string rs = GPR(copy(rs_value));
4965 std::string rt = GPR(copy(rt_value));
4966
4967 return img::format("CMPGDU.LE.QB %s, %s, %s", rd, rs, rt);
4968}
4969
4970
4971/*
4972 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4973 * four bytes and write result to GPR and DSPControl
4974 *
4975 * 3 2 1
4976 * 10987654321098765432109876543210
4977 * 001000 x0111000101
4978 * rt -----
4979 * rs -----
4980 * rd -----
4981 */
4982std::string NMD::CMPGDU_LT_QB(uint64 instruction)
4983{
4984 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4985 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4986 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4987
4988 std::string rd = GPR(copy(rd_value));
4989 std::string rs = GPR(copy(rs_value));
4990 std::string rt = GPR(copy(rt_value));
4991
4992 return img::format("CMPGDU.LT.QB %s, %s, %s", rd, rs, rt);
4993}
4994
4995
4996/*
4997 * [DSP] CMPGU.EQ.QB rd, rs, rt - Compare vectors of unsigned
4998 * byte values and write result to a GPR
4999 *
5000 * 3 2 1
5001 * 10987654321098765432109876543210
5002 * 001000 x0011000101
5003 * rt -----
5004 * rs -----
5005 * rd -----
5006 */
5007std::string NMD::CMPGU_EQ_QB(uint64 instruction)
5008{
5009 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5010 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5011 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5012
5013 std::string rd = GPR(copy(rd_value));
5014 std::string rs = GPR(copy(rs_value));
5015 std::string rt = GPR(copy(rt_value));
5016
5017 return img::format("CMPGU.EQ.QB %s, %s, %s", rd, rs, rt);
5018}
5019
5020
5021/*
5022 * [DSP] CMPGU.LE.QB rd, rs, rt - Compare vectors of unsigned
5023 * byte values and write result to a GPR
5024 *
5025 * 3 2 1
5026 * 10987654321098765432109876543210
5027 * 001000 x0101000101
5028 * rt -----
5029 * rs -----
5030 * rd -----
5031 */
5032std::string NMD::CMPGU_LE_QB(uint64 instruction)
5033{
5034 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5035 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5036 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5037
5038 std::string rd = GPR(copy(rd_value));
5039 std::string rs = GPR(copy(rs_value));
5040 std::string rt = GPR(copy(rt_value));
5041
5042 return img::format("CMPGU.LE.QB %s, %s, %s", rd, rs, rt);
5043}
5044
5045
5046/*
5047 * [DSP] CMPGU.LT.QB rd, rs, rt - Compare vectors of unsigned
5048 * byte values and write result to a GPR
5049 *
5050 * 3 2 1
5051 * 10987654321098765432109876543210
5052 * 001000 x0100000101
5053 * rt -----
5054 * rs -----
5055 * rd -----
5056 */
5057std::string NMD::CMPGU_LT_QB(uint64 instruction)
5058{
5059 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5060 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5061 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5062
5063 std::string rd = GPR(copy(rd_value));
5064 std::string rs = GPR(copy(rs_value));
5065 std::string rt = GPR(copy(rt_value));
5066
5067 return img::format("CMPGU.LT.QB %s, %s, %s", rd, rs, rt);
5068}
5069
5070
5071/*
5072 * [DSP] CMPU.EQ.QB rd, rs, rt - Compare vectors of unsigned
5073 * byte values
5074 *
5075 * 3 2 1
5076 * 10987654321098765432109876543210
5077 * 001000 xxxxxx1001000101
5078 * rt -----
5079 * rs -----
5080 */
5081std::string NMD::CMPU_EQ_QB(uint64 instruction)
5082{
5083 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5084 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5085
5086 std::string rs = GPR(copy(rs_value));
5087 std::string rt = GPR(copy(rt_value));
5088
5089 return img::format("CMPU.EQ.QB %s, %s", rs, rt);
5090}
5091
5092
5093/*
5094 * [DSP] CMPU.LE.QB rd, rs, rt - Compare vectors of unsigned
5095 * byte values
5096 *
5097 * 3 2 1
5098 * 10987654321098765432109876543210
5099 * 001000 xxxxxx1011000101
5100 * rt -----
5101 * rs -----
5102 */
5103std::string NMD::CMPU_LE_QB(uint64 instruction)
5104{
5105 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5106 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5107
5108 std::string rs = GPR(copy(rs_value));
5109 std::string rt = GPR(copy(rt_value));
5110
5111 return img::format("CMPU.LE.QB %s, %s", rs, rt);
5112}
5113
5114
5115/*
5116 * [DSP] CMPU.LT.QB rd, rs, rt - Compare vectors of unsigned
5117 * byte values
5118 *
5119 * 3 2 1
5120 * 10987654321098765432109876543210
5121 * 001000 xxxxxx1010000101
5122 * rt -----
5123 * rs -----
5124 */
5125std::string NMD::CMPU_LT_QB(uint64 instruction)
5126{
5127 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5128 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5129
5130 std::string rs = GPR(copy(rs_value));
5131 std::string rt = GPR(copy(rt_value));
5132
5133 return img::format("CMPU.LT.QB %s, %s", rs, rt);
5134}
5135
5136
5137/*
5138 *
5139 *
5140 * 3 2 1
5141 * 10987654321098765432109876543210
5142 * 001000 x1110000101
5143 * rt -----
5144 * rs -----
5145 * rd -----
5146 */
5147std::string NMD::COP2_1(uint64 instruction)
5148{
5149 uint64 cofun_value = extract_cofun_25_24_23(instruction);
5150
5151 std::string cofun = IMMEDIATE(copy(cofun_value));
5152
5153 return img::format("COP2_1 %s", cofun);
5154}
5155
5156
5157/*
5158 *
5159 *
5160 * 3 2 1
5161 * 10987654321098765432109876543210
5162 * 001000 x1110000101
5163 * rt -----
5164 * rs -----
5165 * rd -----
5166 */
5167std::string NMD::CTC1(uint64 instruction)
5168{
5169 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5170 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
5171
5172 std::string rt = GPR(copy(rt_value));
5173 std::string cs = CPR(copy(cs_value));
5174
5175 return img::format("CTC1 %s, %s", rt, cs);
5176}
5177
5178
5179/*
5180 *
5181 *
5182 * 3 2 1
5183 * 10987654321098765432109876543210
5184 * 001000 x1110000101
5185 * rt -----
5186 * rs -----
5187 * rd -----
5188 */
5189std::string NMD::CTC2(uint64 instruction)
5190{
5191 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5192 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
5193
5194 std::string rt = GPR(copy(rt_value));
5195 std::string cs = CPR(copy(cs_value));
5196
5197 return img::format("CTC2 %s, %s", rt, cs);
5198}
5199
5200
5201/*
5202 *
5203 *
5204 * 3 2 1
5205 * 10987654321098765432109876543210
5206 * 001000 x1110000101
5207 * rt -----
5208 * rs -----
5209 * rd -----
5210 */
5211std::string NMD::CVT_D_L(uint64 instruction)
5212{
5213 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5214 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5215
5216 std::string ft = FPR(copy(ft_value));
5217 std::string fs = FPR(copy(fs_value));
5218
5219 return img::format("CVT.D.L %s, %s", ft, fs);
5220}
5221
5222
5223/*
5224 *
5225 *
5226 * 3 2 1
5227 * 10987654321098765432109876543210
5228 * 001000 x1110000101
5229 * rt -----
5230 * rs -----
5231 * rd -----
5232 */
5233std::string NMD::CVT_D_S(uint64 instruction)
5234{
5235 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5236 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5237
5238 std::string ft = FPR(copy(ft_value));
5239 std::string fs = FPR(copy(fs_value));
5240
5241 return img::format("CVT.D.S %s, %s", ft, fs);
5242}
5243
5244
5245/*
5246 *
5247 *
5248 * 3 2 1
5249 * 10987654321098765432109876543210
5250 * 001000 x1110000101
5251 * rt -----
5252 * rs -----
5253 * rd -----
5254 */
5255std::string NMD::CVT_D_W(uint64 instruction)
5256{
5257 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5258 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5259
5260 std::string ft = FPR(copy(ft_value));
5261 std::string fs = FPR(copy(fs_value));
5262
5263 return img::format("CVT.D.W %s, %s", ft, fs);
5264}
5265
5266
5267/*
5268 *
5269 *
5270 * 3 2 1
5271 * 10987654321098765432109876543210
5272 * 001000 x1110000101
5273 * rt -----
5274 * rs -----
5275 * rd -----
5276 */
5277std::string NMD::CVT_L_D(uint64 instruction)
5278{
5279 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5280 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5281
5282 std::string ft = FPR(copy(ft_value));
5283 std::string fs = FPR(copy(fs_value));
5284
5285 return img::format("CVT.L.D %s, %s", ft, fs);
5286}
5287
5288
5289/*
5290 *
5291 *
5292 * 3 2 1
5293 * 10987654321098765432109876543210
5294 * 001000 x1110000101
5295 * rt -----
5296 * rs -----
5297 * rd -----
5298 */
5299std::string NMD::CVT_L_S(uint64 instruction)
5300{
5301 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5302 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5303
5304 std::string ft = FPR(copy(ft_value));
5305 std::string fs = FPR(copy(fs_value));
5306
5307 return img::format("CVT.L.S %s, %s", ft, fs);
5308}
5309
5310
5311/*
5312 *
5313 *
5314 * 3 2 1
5315 * 10987654321098765432109876543210
5316 * 001000 x1110000101
5317 * rt -----
5318 * rs -----
5319 * rd -----
5320 */
5321std::string NMD::CVT_S_D(uint64 instruction)
5322{
5323 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5324 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5325
5326 std::string ft = FPR(copy(ft_value));
5327 std::string fs = FPR(copy(fs_value));
5328
5329 return img::format("CVT.S.D %s, %s", ft, fs);
5330}
5331
5332
5333/*
5334 *
5335 *
5336 * 3 2 1
5337 * 10987654321098765432109876543210
5338 * 001000 x1110000101
5339 * rt -----
5340 * rs -----
5341 * rd -----
5342 */
5343std::string NMD::CVT_S_L(uint64 instruction)
5344{
5345 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5346 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5347
5348 std::string ft = FPR(copy(ft_value));
5349 std::string fs = FPR(copy(fs_value));
5350
5351 return img::format("CVT.S.L %s, %s", ft, fs);
5352}
5353
5354
5355/*
5356 *
5357 *
5358 * 3 2 1
5359 * 10987654321098765432109876543210
5360 * 001000 x1110000101
5361 * rt -----
5362 * rs -----
5363 * rd -----
5364 */
5365std::string NMD::CVT_S_PL(uint64 instruction)
5366{
5367 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5368 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5369
5370 std::string ft = FPR(copy(ft_value));
5371 std::string fs = FPR(copy(fs_value));
5372
5373 return img::format("CVT.S.PL %s, %s", ft, fs);
5374}
5375
5376
5377/*
5378 *
5379 *
5380 * 3 2 1
5381 * 10987654321098765432109876543210
5382 * 001000 x1110000101
5383 * rt -----
5384 * rs -----
5385 * rd -----
5386 */
5387std::string NMD::CVT_S_PU(uint64 instruction)
5388{
5389 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5390 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5391
5392 std::string ft = FPR(copy(ft_value));
5393 std::string fs = FPR(copy(fs_value));
5394
5395 return img::format("CVT.S.PU %s, %s", ft, fs);
5396}
5397
5398
5399/*
5400 *
5401 *
5402 * 3 2 1
5403 * 10987654321098765432109876543210
5404 * 001000 x1110000101
5405 * rt -----
5406 * rs -----
5407 * rd -----
5408 */
5409std::string NMD::CVT_S_W(uint64 instruction)
5410{
5411 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5412 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5413
5414 std::string ft = FPR(copy(ft_value));
5415 std::string fs = FPR(copy(fs_value));
5416
5417 return img::format("CVT.S.W %s, %s", ft, fs);
5418}
5419
5420
5421/*
5422 *
5423 *
5424 * 3 2 1
5425 * 10987654321098765432109876543210
5426 * 001000 x1110000101
5427 * rt -----
5428 * rs -----
5429 * rd -----
5430 */
5431std::string NMD::CVT_W_D(uint64 instruction)
5432{
5433 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5434 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5435
5436 std::string ft = FPR(copy(ft_value));
5437 std::string fs = FPR(copy(fs_value));
5438
5439 return img::format("CVT.W.D %s, %s", ft, fs);
5440}
5441
5442
5443/*
5444 *
5445 *
5446 * 3 2 1
5447 * 10987654321098765432109876543210
5448 * 001000 x1110000101
5449 * rt -----
5450 * rs -----
5451 * rd -----
5452 */
5453std::string NMD::CVT_W_S(uint64 instruction)
5454{
5455 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5456 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5457
5458 std::string ft = FPR(copy(ft_value));
5459 std::string fs = FPR(copy(fs_value));
5460
5461 return img::format("CVT.W.S %s, %s", ft, fs);
5462}
5463
5464
5465/*
5466 *
5467 *
5468 * 3 2 1
5469 * 10987654321098765432109876543210
5470 * 001000 x1110000101
5471 * rt -----
5472 * rs -----
5473 * rd -----
5474 */
5475std::string NMD::DADDIU_48_(uint64 instruction)
5476{
5477 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
5478 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
5479
5480 std::string rt = GPR(copy(rt_value));
5481 std::string s = IMMEDIATE(copy(s_value));
5482
5483 return img::format("DADDIU %s, %s", rt, s);
5484}
5485
5486
5487/*
5488 *
5489 *
5490 * 3 2 1
5491 * 10987654321098765432109876543210
5492 * 001000 x1110000101
5493 * rt -----
5494 * rs -----
5495 * rd -----
5496 */
5497std::string NMD::DADDIU_NEG_(uint64 instruction)
5498{
5499 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5500 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5501 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5502
5503 std::string rt = GPR(copy(rt_value));
5504 std::string rs = GPR(copy(rs_value));
5505 std::string u = IMMEDIATE(neg_copy(u_value));
5506
5507 return img::format("DADDIU %s, %s, %s", rt, rs, u);
5508}
5509
5510
5511/*
5512 *
5513 *
5514 * 3 2 1
5515 * 10987654321098765432109876543210
5516 * 001000 x1110000101
5517 * rt -----
5518 * rs -----
5519 * rd -----
5520 */
5521std::string NMD::DADDIU_U12_(uint64 instruction)
5522{
5523 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5524 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5525 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5526
5527 std::string rt = GPR(copy(rt_value));
5528 std::string rs = GPR(copy(rs_value));
5529 std::string u = IMMEDIATE(copy(u_value));
5530
5531 return img::format("DADDIU %s, %s, %s", rt, rs, u);
5532}
5533
5534
5535/*
5536 *
5537 *
5538 * 3 2 1
5539 * 10987654321098765432109876543210
5540 * 001000 x1110000101
5541 * rt -----
5542 * rs -----
5543 * rd -----
5544 */
5545std::string NMD::DADD(uint64 instruction)
5546{
5547 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5548 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5549 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5550
5551 std::string rd = GPR(copy(rd_value));
5552 std::string rs = GPR(copy(rs_value));
5553 std::string rt = GPR(copy(rt_value));
5554
5555 return img::format("DADD %s, %s, %s", rd, rs, rt);
5556}
5557
5558
5559/*
5560 *
5561 *
5562 * 3 2 1
5563 * 10987654321098765432109876543210
5564 * 001000 x1110000101
5565 * rt -----
5566 * rs -----
5567 * rd -----
5568 */
5569std::string NMD::DADDU(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 rd_value = extract_rd_15_14_13_12_11(instruction);
5574
5575 std::string rd = GPR(copy(rd_value));
5576 std::string rs = GPR(copy(rs_value));
5577 std::string rt = GPR(copy(rt_value));
5578
5579 return img::format("DADDU %s, %s, %s", rd, rs, rt);
5580}
5581
5582
5583/*
5584 *
5585 *
5586 * 3 2 1
5587 * 10987654321098765432109876543210
5588 * 001000 x1110000101
5589 * rt -----
5590 * rs -----
5591 * rd -----
5592 */
5593std::string NMD::DCLO(uint64 instruction)
5594{
5595 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5596 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5597
5598 std::string rt = GPR(copy(rt_value));
5599 std::string rs = GPR(copy(rs_value));
5600
5601 return img::format("DCLO %s, %s", rt, rs);
5602}
5603
5604
5605/*
5606 *
5607 *
5608 * 3 2 1
5609 * 10987654321098765432109876543210
5610 * 001000 x1110000101
5611 * rt -----
5612 * rs -----
5613 * rd -----
5614 */
5615std::string NMD::DCLZ(uint64 instruction)
5616{
5617 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5618 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5619
5620 std::string rt = GPR(copy(rt_value));
5621 std::string rs = GPR(copy(rs_value));
5622
5623 return img::format("DCLZ %s, %s", rt, rs);
5624}
5625
5626
5627/*
5628 *
5629 *
5630 * 3 2 1
5631 * 10987654321098765432109876543210
5632 * 001000 x1110000101
5633 * rt -----
5634 * rs -----
5635 * rd -----
5636 */
5637std::string NMD::DDIV(uint64 instruction)
5638{
5639 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5640 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5641 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5642
5643 std::string rd = GPR(copy(rd_value));
5644 std::string rs = GPR(copy(rs_value));
5645 std::string rt = GPR(copy(rt_value));
5646
5647 return img::format("DDIV %s, %s, %s", rd, rs, rt);
5648}
5649
5650
5651/*
5652 *
5653 *
5654 * 3 2 1
5655 * 10987654321098765432109876543210
5656 * 001000 x1110000101
5657 * rt -----
5658 * rs -----
5659 * rd -----
5660 */
5661std::string NMD::DDIVU(uint64 instruction)
5662{
5663 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5664 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5665 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5666
5667 std::string rd = GPR(copy(rd_value));
5668 std::string rs = GPR(copy(rs_value));
5669 std::string rt = GPR(copy(rt_value));
5670
5671 return img::format("DDIVU %s, %s, %s", rd, rs, rt);
5672}
5673
5674
5675/*
5676 *
5677 *
5678 * 3 2 1
5679 * 10987654321098765432109876543210
5680 * 001000 x1110000101
5681 * rt -----
5682 * rs -----
5683 * rd -----
5684 */
5685std::string NMD::DERET(uint64 instruction)
5686{
5687 (void)instruction;
5688
5689 return "DERET ";
5690}
5691
5692
5693/*
5694 *
5695 *
5696 * 3 2 1
5697 * 10987654321098765432109876543210
5698 * 001000 x1110000101
5699 * rt -----
5700 * rs -----
5701 * rd -----
5702 */
5703std::string NMD::DEXTM(uint64 instruction)
5704{
5705 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5706 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5707 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5708 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5709
5710 std::string rt = GPR(copy(rt_value));
5711 std::string rs = GPR(copy(rs_value));
5712 std::string lsb = IMMEDIATE(copy(lsb_value));
5713 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
5714
5715 return img::format("DEXTM %s, %s, %s, %s", rt, rs, lsb, msbd);
5716}
5717
5718
5719/*
5720 *
5721 *
5722 * 3 2 1
5723 * 10987654321098765432109876543210
5724 * 001000 x1110000101
5725 * rt -----
5726 * rs -----
5727 * rd -----
5728 */
5729std::string NMD::DEXT(uint64 instruction)
5730{
5731 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5732 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5733 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5734 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5735
5736 std::string rt = GPR(copy(rt_value));
5737 std::string rs = GPR(copy(rs_value));
5738 std::string lsb = IMMEDIATE(copy(lsb_value));
5739 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
5740
5741 return img::format("DEXT %s, %s, %s, %s", rt, rs, lsb, msbd);
5742}
5743
5744
5745/*
5746 *
5747 *
5748 * 3 2 1
5749 * 10987654321098765432109876543210
5750 * 001000 x1110000101
5751 * rt -----
5752 * rs -----
5753 * rd -----
5754 */
5755std::string NMD::DEXTU(uint64 instruction)
5756{
5757 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5758 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5759 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5760 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5761
5762 std::string rt = GPR(copy(rt_value));
5763 std::string rs = GPR(copy(rs_value));
5764 std::string lsb = IMMEDIATE(copy(lsb_value));
5765 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
5766
5767 return img::format("DEXTU %s, %s, %s, %s", rt, rs, lsb, msbd);
5768}
5769
5770
5771/*
5772 *
5773 *
5774 * 3 2 1
5775 * 10987654321098765432109876543210
5776 * 001000 x1110000101
5777 * rt -----
5778 * rs -----
5779 * rd -----
5780 */
5781std::string NMD::DINSM(uint64 instruction)
5782{
5783 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5784 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5785 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5786 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5787
5788 std::string rt = GPR(copy(rt_value));
5789 std::string rs = GPR(copy(rs_value));
5790 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
5791 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
5792 /* !!!!!!!!!! - no conversion function */
5793
5794 return img::format("DINSM %s, %s, %s, %s", rt, rs, pos, size);
5795 /* hand edited */
5796}
5797
5798
5799/*
5800 *
5801 *
5802 * 3 2 1
5803 * 10987654321098765432109876543210
5804 * 001000 x1110000101
5805 * rt -----
5806 * rs -----
5807 * rd -----
5808 */
5809std::string NMD::DINS(uint64 instruction)
5810{
5811 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5812 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5813 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5814 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5815
5816 std::string rt = GPR(copy(rt_value));
5817 std::string rs = GPR(copy(rs_value));
5818 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
5819 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
5820 /* !!!!!!!!!! - no conversion function */
5821
5822 return img::format("DINS %s, %s, %s, %s", rt, rs, pos, size);
5823 /* hand edited */
5824}
5825
5826
5827/*
5828 *
5829 *
5830 * 3 2 1
5831 * 10987654321098765432109876543210
5832 * 001000 x1110000101
5833 * rt -----
5834 * rs -----
5835 * rd -----
5836 */
5837std::string NMD::DINSU(uint64 instruction)
5838{
5839 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5840 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5841 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5842 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5843
5844 std::string rt = GPR(copy(rt_value));
5845 std::string rs = GPR(copy(rs_value));
5846 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
5847 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
5848 /* !!!!!!!!!! - no conversion function */
5849
5850 return img::format("DINSU %s, %s, %s, %s", rt, rs, pos, size);
5851 /* hand edited */
5852}
5853
5854
5855/*
5856 *
5857 *
5858 * 3 2 1
5859 * 10987654321098765432109876543210
5860 * 001000 x1110000101
5861 * rt -----
5862 * rs -----
5863 * rd -----
5864 */
5865std::string NMD::DI(uint64 instruction)
5866{
5867 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5868
5869 std::string rt = GPR(copy(rt_value));
5870
5871 return img::format("DI %s", rt);
5872}
5873
5874
5875/*
5876 *
5877 *
5878 * 3 2 1
5879 * 10987654321098765432109876543210
5880 * 001000 x1110000101
5881 * rt -----
5882 * rs -----
5883 * rd -----
5884 */
5885std::string NMD::DIV(uint64 instruction)
5886{
5887 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5888 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5889 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5890
5891 std::string rd = GPR(copy(rd_value));
5892 std::string rs = GPR(copy(rs_value));
5893 std::string rt = GPR(copy(rt_value));
5894
5895 return img::format("DIV %s, %s, %s", rd, rs, rt);
5896}
5897
5898
5899/*
5900 *
5901 *
5902 * 3 2 1
5903 * 10987654321098765432109876543210
5904 * 001000 x1110000101
5905 * rt -----
5906 * rs -----
5907 * rd -----
5908 */
5909std::string NMD::DIV_D(uint64 instruction)
5910{
5911 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5912 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5913 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5914
5915 std::string fd = FPR(copy(fd_value));
5916 std::string fs = FPR(copy(fs_value));
5917 std::string ft = FPR(copy(ft_value));
5918
5919 return img::format("DIV.D %s, %s, %s", fd, fs, ft);
5920}
5921
5922
5923/*
5924 *
5925 *
5926 * 3 2 1
5927 * 10987654321098765432109876543210
5928 * 001000 x1110000101
5929 * rt -----
5930 * rs -----
5931 * rd -----
5932 */
5933std::string NMD::DIV_S(uint64 instruction)
5934{
5935 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5936 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5937 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5938
5939 std::string fd = FPR(copy(fd_value));
5940 std::string fs = FPR(copy(fs_value));
5941 std::string ft = FPR(copy(ft_value));
5942
5943 return img::format("DIV.S %s, %s, %s", fd, fs, ft);
5944}
5945
5946
5947/*
5948 *
5949 *
5950 * 3 2 1
5951 * 10987654321098765432109876543210
5952 * 001000 x1110000101
5953 * rt -----
5954 * rs -----
5955 * rd -----
5956 */
5957std::string NMD::DIVU(uint64 instruction)
5958{
5959 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5960 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5961 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5962
5963 std::string rd = GPR(copy(rd_value));
5964 std::string rs = GPR(copy(rs_value));
5965 std::string rt = GPR(copy(rt_value));
5966
5967 return img::format("DIVU %s, %s, %s", rd, rs, rt);
5968}
5969
5970
5971/*
5972 *
5973 *
5974 * 3 2 1
5975 * 10987654321098765432109876543210
5976 * 001000 x1110000101
5977 * rt -----
5978 * rs -----
5979 * rd -----
5980 */
5981std::string NMD::DLSA(uint64 instruction)
5982{
5983 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5984 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5985 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5986 uint64 u2_value = extract_u2_10_9(instruction);
5987
5988 std::string rd = GPR(copy(rd_value));
5989 std::string rs = GPR(copy(rs_value));
5990 std::string rt = GPR(copy(rt_value));
5991 std::string u2 = IMMEDIATE(copy(u2_value));
5992
5993 return img::format("DLSA %s, %s, %s, %s", rd, rs, rt, u2);
5994}
5995
5996
5997/*
5998 *
5999 *
6000 * 3 2 1
6001 * 10987654321098765432109876543210
6002 * 001000 x1110000101
6003 * rt -----
6004 * rs -----
6005 * rd -----
6006 */
6007std::string NMD::DLUI_48_(uint64 instruction)
6008{
6009 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
6010 uint64 u_value = extract_u_31_to_0__s32(instruction);
6011
6012 std::string rt = GPR(copy(rt_value));
6013 std::string u = IMMEDIATE(copy(u_value));
6014
6015 return img::format("DLUI %s, %s", rt, u);
6016}
6017
6018
6019/*
6020 *
6021 *
6022 * 3 2 1
6023 * 10987654321098765432109876543210
6024 * 001000 x1110000101
6025 * rt -----
6026 * rs -----
6027 * rd -----
6028 */
6029std::string NMD::DMFC0(uint64 instruction)
6030{
6031 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6032 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
6033 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
6034
6035 std::string rt = GPR(copy(rt_value));
6036 std::string c0s = CPR(copy(c0s_value));
6037 std::string sel = IMMEDIATE(copy(sel_value));
6038
6039 return img::format("DMFC0 %s, %s, %s", rt, c0s, sel);
6040}
6041
6042
6043/*
6044 *
6045 *
6046 * 3 2 1
6047 * 10987654321098765432109876543210
6048 * 001000 x1110000101
6049 * rt -----
6050 * rs -----
6051 * rd -----
6052 */
6053std::string NMD::DMFC1(uint64 instruction)
6054{
6055 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6056 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
6057
6058 std::string rt = GPR(copy(rt_value));
6059 std::string fs = FPR(copy(fs_value));
6060
6061 return img::format("DMFC1 %s, %s", rt, fs);
6062}
6063
6064
6065/*
6066 *
6067 *
6068 * 3 2 1
6069 * 10987654321098765432109876543210
6070 * 001000 x1110000101
6071 * rt -----
6072 * rs -----
6073 * rd -----
6074 */
6075std::string NMD::DMFC2(uint64 instruction)
6076{
6077 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6078 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
6079
6080 std::string rt = GPR(copy(rt_value));
6081 std::string cs = CPR(copy(cs_value));
6082
6083 return img::format("DMFC2 %s, %s", rt, cs);
6084}
6085
6086
6087/*
6088 *
6089 *
6090 * 3 2 1
6091 * 10987654321098765432109876543210
6092 * 001000 x1110000101
6093 * rt -----
6094 * rs -----
6095 * rd -----
6096 */
6097std::string NMD::DMFGC0(uint64 instruction)
6098{
6099 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6100 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
6101 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
6102
6103 std::string rt = GPR(copy(rt_value));
6104 std::string c0s = CPR(copy(c0s_value));
6105 std::string sel = IMMEDIATE(copy(sel_value));
6106
6107 return img::format("DMFGC0 %s, %s, %s", rt, c0s, sel);
6108}
6109
6110
6111/*
6112 *
6113 *
6114 * 3 2 1
6115 * 10987654321098765432109876543210
6116 * 001000 x1110000101
6117 * rt -----
6118 * rs -----
6119 * rd -----
6120 */
6121std::string NMD::DMOD(uint64 instruction)
6122{
6123 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6124 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6125 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6126
6127 std::string rd = GPR(copy(rd_value));
6128 std::string rs = GPR(copy(rs_value));
6129 std::string rt = GPR(copy(rt_value));
6130
6131 return img::format("DMOD %s, %s, %s", rd, rs, rt);
6132}
6133
6134
6135/*
6136 *
6137 *
6138 * 3 2 1
6139 * 10987654321098765432109876543210
6140 * 001000 x1110000101
6141 * rt -----
6142 * rs -----
6143 * rd -----
6144 */
6145std::string NMD::DMODU(uint64 instruction)
6146{
6147 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6148 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6149 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6150
6151 std::string rd = GPR(copy(rd_value));
6152 std::string rs = GPR(copy(rs_value));
6153 std::string rt = GPR(copy(rt_value));
6154
6155 return img::format("DMODU %s, %s, %s", rd, rs, rt);
6156}
6157
6158
6159/*
6160 *
6161 *
6162 * 3 2 1
6163 * 10987654321098765432109876543210
6164 * 001000 x1110000101
6165 * rt -----
6166 * rs -----
6167 * rd -----
6168 */
6169std::string NMD::DMTC0(uint64 instruction)
6170{
6171 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6172 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
6173 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
6174
6175 std::string rt = GPR(copy(rt_value));
6176 std::string c0s = CPR(copy(c0s_value));
6177 std::string sel = IMMEDIATE(copy(sel_value));
6178
6179 return img::format("DMTC0 %s, %s, %s", rt, c0s, sel);
6180}
6181
6182
6183/*
6184 *
6185 *
6186 * 3 2 1
6187 * 10987654321098765432109876543210
6188 * 001000 x1110000101
6189 * rt -----
6190 * rs -----
6191 * rd -----
6192 */
6193std::string NMD::DMTC1(uint64 instruction)
6194{
6195 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6196 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
6197
6198 std::string rt = GPR(copy(rt_value));
6199 std::string fs = FPR(copy(fs_value));
6200
6201 return img::format("DMTC1 %s, %s", rt, fs);
6202}
6203
6204
6205/*
6206 *
6207 *
6208 * 3 2 1
6209 * 10987654321098765432109876543210
6210 * 001000 x1110000101
6211 * rt -----
6212 * rs -----
6213 * rd -----
6214 */
6215std::string NMD::DMTC2(uint64 instruction)
6216{
6217 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6218 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
6219
6220 std::string rt = GPR(copy(rt_value));
6221 std::string cs = CPR(copy(cs_value));
6222
6223 return img::format("DMTC2 %s, %s", rt, cs);
6224}
6225
6226
6227/*
6228 *
6229 *
6230 * 3 2 1
6231 * 10987654321098765432109876543210
6232 * 001000 x1110000101
6233 * rt -----
6234 * rs -----
6235 * rd -----
6236 */
6237std::string NMD::DMTGC0(uint64 instruction)
6238{
6239 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6240 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
6241 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
6242
6243 std::string rt = GPR(copy(rt_value));
6244 std::string c0s = CPR(copy(c0s_value));
6245 std::string sel = IMMEDIATE(copy(sel_value));
6246
6247 return img::format("DMTGC0 %s, %s, %s", rt, c0s, sel);
6248}
6249
6250
6251/*
6252 *
6253 *
6254 * 3 2 1
6255 * 10987654321098765432109876543210
6256 * 001000 x1110000101
6257 * rt -----
6258 * rs -----
6259 * rd -----
6260 */
6261std::string NMD::DMT(uint64 instruction)
6262{
6263 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6264
6265 std::string rt = GPR(copy(rt_value));
6266
6267 return img::format("DMT %s", rt);
6268}
6269
6270
6271/*
6272 *
6273 *
6274 * 3 2 1
6275 * 10987654321098765432109876543210
6276 * 001000 x1110000101
6277 * rt -----
6278 * rs -----
6279 * rd -----
6280 */
6281std::string NMD::DMUH(uint64 instruction)
6282{
6283 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6284 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6285 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6286
6287 std::string rd = GPR(copy(rd_value));
6288 std::string rs = GPR(copy(rs_value));
6289 std::string rt = GPR(copy(rt_value));
6290
6291 return img::format("DMUH %s, %s, %s", rd, rs, rt);
6292}
6293
6294
6295/*
6296 *
6297 *
6298 * 3 2 1
6299 * 10987654321098765432109876543210
6300 * 001000 x1110000101
6301 * rt -----
6302 * rs -----
6303 * rd -----
6304 */
6305std::string NMD::DMUHU(uint64 instruction)
6306{
6307 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6308 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6309 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6310
6311 std::string rd = GPR(copy(rd_value));
6312 std::string rs = GPR(copy(rs_value));
6313 std::string rt = GPR(copy(rt_value));
6314
6315 return img::format("DMUHU %s, %s, %s", rd, rs, rt);
6316}
6317
6318
6319/*
6320 *
6321 *
6322 * 3 2 1
6323 * 10987654321098765432109876543210
6324 * 001000 x1110000101
6325 * rt -----
6326 * rs -----
6327 * rd -----
6328 */
6329std::string NMD::DMUL(uint64 instruction)
6330{
6331 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6332 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6333 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6334
6335 std::string rd = GPR(copy(rd_value));
6336 std::string rs = GPR(copy(rs_value));
6337 std::string rt = GPR(copy(rt_value));
6338
6339 return img::format("DMUL %s, %s, %s", rd, rs, rt);
6340}
6341
6342
6343/*
6344 *
6345 *
6346 * 3 2 1
6347 * 10987654321098765432109876543210
6348 * 001000 x1110000101
6349 * rt -----
6350 * rs -----
6351 * rd -----
6352 */
6353std::string NMD::DMULU(uint64 instruction)
6354{
6355 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6356 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6357 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6358
6359 std::string rd = GPR(copy(rd_value));
6360 std::string rs = GPR(copy(rs_value));
6361 std::string rt = GPR(copy(rt_value));
6362
6363 return img::format("DMULU %s, %s, %s", rd, rs, rt);
6364}
6365
6366
6367/*
6368 * [DSP] DPA.W.PH ac, rs, rt - Dot product with accumulate on
6369 * vector integer halfword elements
6370 *
6371 * 3 2 1
6372 * 10987654321098765432109876543210
6373 * 001000 00000010111111
6374 * rt -----
6375 * rs -----
6376 * ac --
6377 */
6378std::string NMD::DPA_W_PH(uint64 instruction)
6379{
6380 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6381 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6382 uint64 ac_value = extract_ac_15_14(instruction);
6383
6384 std::string ac = AC(copy(ac_value));
6385 std::string rs = GPR(copy(rs_value));
6386 std::string rt = GPR(copy(rt_value));
6387
6388 return img::format("DPA.W.PH %s, %s, %s", ac, rs, rt);
6389}
6390
6391
6392/*
6393 *
6394 *
6395 * 3 2 1
6396 * 10987654321098765432109876543210
6397 * 001000 x1110000101
6398 * rt -----
6399 * rs -----
6400 * rd -----
6401 */
6402std::string NMD::DPAQ_SA_L_W(uint64 instruction)
6403{
6404 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6405 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6406 uint64 ac_value = extract_ac_15_14(instruction);
6407
6408 std::string ac = AC(copy(ac_value));
6409 std::string rs = GPR(copy(rs_value));
6410 std::string rt = GPR(copy(rt_value));
6411
6412 return img::format("DPAQ_SA.L.W %s, %s, %s", ac, rs, rt);
6413}
6414
6415
6416/*
6417 *
6418 *
6419 * 3 2 1
6420 * 10987654321098765432109876543210
6421 * 001000 x1110000101
6422 * rt -----
6423 * rs -----
6424 * rd -----
6425 */
6426std::string NMD::DPAQ_S_W_PH(uint64 instruction)
6427{
6428 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6429 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6430 uint64 ac_value = extract_ac_15_14(instruction);
6431
6432 std::string ac = AC(copy(ac_value));
6433 std::string rs = GPR(copy(rs_value));
6434 std::string rt = GPR(copy(rt_value));
6435
6436 return img::format("DPAQ_S.W.PH %s, %s, %s", ac, rs, rt);
6437}
6438
6439
6440/*
6441 *
6442 *
6443 * 3 2 1
6444 * 10987654321098765432109876543210
6445 * 001000 x1110000101
6446 * rt -----
6447 * rs -----
6448 * rd -----
6449 */
6450std::string NMD::DPAQX_SA_W_PH(uint64 instruction)
6451{
6452 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6453 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6454 uint64 ac_value = extract_ac_15_14(instruction);
6455
6456 std::string ac = AC(copy(ac_value));
6457 std::string rs = GPR(copy(rs_value));
6458 std::string rt = GPR(copy(rt_value));
6459
6460 return img::format("DPAQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6461}
6462
6463
6464/*
6465 *
6466 *
6467 * 3 2 1
6468 * 10987654321098765432109876543210
6469 * 001000 x1110000101
6470 * rt -----
6471 * rs -----
6472 * rd -----
6473 */
6474std::string NMD::DPAQX_S_W_PH(uint64 instruction)
6475{
6476 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6477 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6478 uint64 ac_value = extract_ac_15_14(instruction);
6479
6480 std::string ac = AC(copy(ac_value));
6481 std::string rs = GPR(copy(rs_value));
6482 std::string rt = GPR(copy(rt_value));
6483
6484 return img::format("DPAQX_S.W.PH %s, %s, %s", ac, rs, rt);
6485}
6486
6487
6488/*
6489 *
6490 *
6491 * 3 2 1
6492 * 10987654321098765432109876543210
6493 * 001000 x1110000101
6494 * rt -----
6495 * rs -----
6496 * rd -----
6497 */
6498std::string NMD::DPAU_H_QBL(uint64 instruction)
6499{
6500 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6501 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6502 uint64 ac_value = extract_ac_15_14(instruction);
6503
6504 std::string ac = AC(copy(ac_value));
6505 std::string rs = GPR(copy(rs_value));
6506 std::string rt = GPR(copy(rt_value));
6507
6508 return img::format("DPAU.H.QBL %s, %s, %s", ac, rs, rt);
6509}
6510
6511
6512/*
6513 *
6514 *
6515 * 3 2 1
6516 * 10987654321098765432109876543210
6517 * 001000 x1110000101
6518 * rt -----
6519 * rs -----
6520 * rd -----
6521 */
6522std::string NMD::DPAU_H_QBR(uint64 instruction)
6523{
6524 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6525 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6526 uint64 ac_value = extract_ac_15_14(instruction);
6527
6528 std::string ac = AC(copy(ac_value));
6529 std::string rs = GPR(copy(rs_value));
6530 std::string rt = GPR(copy(rt_value));
6531
6532 return img::format("DPAU.H.QBR %s, %s, %s", ac, rs, rt);
6533}
6534
6535
6536/*
6537 *
6538 *
6539 * 3 2 1
6540 * 10987654321098765432109876543210
6541 * 001000 x1110000101
6542 * rt -----
6543 * rs -----
6544 * rd -----
6545 */
6546std::string NMD::DPAX_W_PH(uint64 instruction)
6547{
6548 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6549 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6550 uint64 ac_value = extract_ac_15_14(instruction);
6551
6552 std::string ac = AC(copy(ac_value));
6553 std::string rs = GPR(copy(rs_value));
6554 std::string rt = GPR(copy(rt_value));
6555
6556 return img::format("DPAX.W.PH %s, %s, %s", ac, rs, rt);
6557}
6558
6559
6560/*
6561 *
6562 *
6563 * 3 2 1
6564 * 10987654321098765432109876543210
6565 * 001000 x1110000101
6566 * rt -----
6567 * rs -----
6568 * rd -----
6569 */
6570std::string NMD::DPS_W_PH(uint64 instruction)
6571{
6572 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6573 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6574 uint64 ac_value = extract_ac_15_14(instruction);
6575
6576 std::string ac = AC(copy(ac_value));
6577 std::string rs = GPR(copy(rs_value));
6578 std::string rt = GPR(copy(rt_value));
6579
6580 return img::format("DPS.W.PH %s, %s, %s", ac, rs, rt);
6581}
6582
6583
6584/*
6585 *
6586 *
6587 * 3 2 1
6588 * 10987654321098765432109876543210
6589 * 001000 x1110000101
6590 * rt -----
6591 * rs -----
6592 * rd -----
6593 */
6594std::string NMD::DPSQ_SA_L_W(uint64 instruction)
6595{
6596 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6597 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6598 uint64 ac_value = extract_ac_15_14(instruction);
6599
6600 std::string ac = AC(copy(ac_value));
6601 std::string rs = GPR(copy(rs_value));
6602 std::string rt = GPR(copy(rt_value));
6603
6604 return img::format("DPSQ_SA.L.W %s, %s, %s", ac, rs, rt);
6605}
6606
6607
6608/*
6609 *
6610 *
6611 * 3 2 1
6612 * 10987654321098765432109876543210
6613 * 001000 x1110000101
6614 * rt -----
6615 * rs -----
6616 * rd -----
6617 */
6618std::string NMD::DPSQ_S_W_PH(uint64 instruction)
6619{
6620 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6621 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6622 uint64 ac_value = extract_ac_15_14(instruction);
6623
6624 std::string ac = AC(copy(ac_value));
6625 std::string rs = GPR(copy(rs_value));
6626 std::string rt = GPR(copy(rt_value));
6627
6628 return img::format("DPSQ_S.W.PH %s, %s, %s", ac, rs, rt);
6629}
6630
6631
6632/*
6633 *
6634 *
6635 * 3 2 1
6636 * 10987654321098765432109876543210
6637 * 001000 x1110000101
6638 * rt -----
6639 * rs -----
6640 * rd -----
6641 */
6642std::string NMD::DPSQX_SA_W_PH(uint64 instruction)
6643{
6644 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6645 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6646 uint64 ac_value = extract_ac_15_14(instruction);
6647
6648 std::string ac = AC(copy(ac_value));
6649 std::string rs = GPR(copy(rs_value));
6650 std::string rt = GPR(copy(rt_value));
6651
6652 return img::format("DPSQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6653}
6654
6655
6656/*
6657 *
6658 *
6659 * 3 2 1
6660 * 10987654321098765432109876543210
6661 * 001000 x1110000101
6662 * rt -----
6663 * rs -----
6664 * rd -----
6665 */
6666std::string NMD::DPSQX_S_W_PH(uint64 instruction)
6667{
6668 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6669 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6670 uint64 ac_value = extract_ac_15_14(instruction);
6671
6672 std::string ac = AC(copy(ac_value));
6673 std::string rs = GPR(copy(rs_value));
6674 std::string rt = GPR(copy(rt_value));
6675
6676 return img::format("DPSQX_S.W.PH %s, %s, %s", ac, rs, rt);
6677}
6678
6679
6680/*
6681 *
6682 *
6683 * 3 2 1
6684 * 10987654321098765432109876543210
6685 * 001000 x1110000101
6686 * rt -----
6687 * rs -----
6688 * rd -----
6689 */
6690std::string NMD::DPSU_H_QBL(uint64 instruction)
6691{
6692 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6693 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6694 uint64 ac_value = extract_ac_15_14(instruction);
6695
6696 std::string ac = AC(copy(ac_value));
6697 std::string rs = GPR(copy(rs_value));
6698 std::string rt = GPR(copy(rt_value));
6699
6700 return img::format("DPSU.H.QBL %s, %s, %s", ac, rs, rt);
6701}
6702
6703
6704/*
6705 *
6706 *
6707 * 3 2 1
6708 * 10987654321098765432109876543210
6709 * 001000 x1110000101
6710 * rt -----
6711 * rs -----
6712 * rd -----
6713 */
6714std::string NMD::DPSU_H_QBR(uint64 instruction)
6715{
6716 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6717 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6718 uint64 ac_value = extract_ac_15_14(instruction);
6719
6720 std::string ac = AC(copy(ac_value));
6721 std::string rs = GPR(copy(rs_value));
6722 std::string rt = GPR(copy(rt_value));
6723
6724 return img::format("DPSU.H.QBR %s, %s, %s", ac, rs, rt);
6725}
6726
6727
6728/*
6729 *
6730 *
6731 * 3 2 1
6732 * 10987654321098765432109876543210
6733 * 001000 x1110000101
6734 * rt -----
6735 * rs -----
6736 * rd -----
6737 */
6738std::string NMD::DPSX_W_PH(uint64 instruction)
6739{
6740 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6741 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6742 uint64 ac_value = extract_ac_15_14(instruction);
6743
6744 std::string ac = AC(copy(ac_value));
6745 std::string rs = GPR(copy(rs_value));
6746 std::string rt = GPR(copy(rt_value));
6747
6748 return img::format("DPSX.W.PH %s, %s, %s", ac, rs, rt);
6749}
6750
6751
6752/*
6753 * DROTR -
6754 *
6755 * 3 2 1
6756 * 10987654321098765432109876543210
6757 * 001000 x1110000101
6758 * rt -----
6759 * rs -----
6760 * rd -----
6761 */
6762std::string NMD::DROTR(uint64 instruction)
6763{
6764 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6765 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6766 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6767
6768 std::string rt = GPR(copy(rt_value));
6769 std::string rs = GPR(copy(rs_value));
6770 std::string shift = IMMEDIATE(copy(shift_value));
6771
6772 return img::format("DROTR %s, %s, %s", rt, rs, shift);
6773}
6774
6775
6776/*
6777 * DROTR[32] -
6778 *
6779 * 3 2 1
6780 * 10987654321098765432109876543210
6781 * 10o000 1100xxx0110
6782 * rt -----
6783 * rs -----
6784 * shift -----
6785 */
6786std::string NMD::DROTR32(uint64 instruction)
6787{
6788 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6789 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6790 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6791
6792 std::string rt = GPR(copy(rt_value));
6793 std::string rs = GPR(copy(rs_value));
6794 std::string shift = IMMEDIATE(copy(shift_value));
6795
6796 return img::format("DROTR32 %s, %s, %s", rt, rs, shift);
6797}
6798
6799
6800/*
6801 *
6802 *
6803 * 3 2 1
6804 * 10987654321098765432109876543210
6805 * 001000 x1110000101
6806 * rt -----
6807 * rs -----
6808 * rd -----
6809 */
6810std::string NMD::DROTRV(uint64 instruction)
6811{
6812 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6813 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6814 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6815
6816 std::string rd = GPR(copy(rd_value));
6817 std::string rs = GPR(copy(rs_value));
6818 std::string rt = GPR(copy(rt_value));
6819
6820 return img::format("DROTRV %s, %s, %s", rd, rs, rt);
6821}
6822
6823
6824/*
6825 *
6826 *
6827 * 3 2 1
6828 * 10987654321098765432109876543210
6829 * 001000 x1110000101
6830 * rt -----
6831 * rs -----
6832 * rd -----
6833 */
6834std::string NMD::DROTX(uint64 instruction)
6835{
6836 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6837 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6838 uint64 shiftx_value = extract_shiftx_11_10_9_8_7_6(instruction);
6839 uint64 shift_value = extract_shift_5_4_3_2_1_0(instruction);
6840
6841 std::string rt = GPR(copy(rt_value));
6842 std::string rs = GPR(copy(rs_value));
6843 std::string shift = IMMEDIATE(copy(shift_value));
6844 std::string shiftx = IMMEDIATE(copy(shiftx_value));
6845
6846 return img::format("DROTX %s, %s, %s, %s", rt, rs, shift, shiftx);
6847}
6848
6849
6850/*
6851 * DSLL -
6852 *
6853 * 3 2 1
6854 * 10987654321098765432109876543210
6855 * 10o000 1100xxx0000
6856 * rt -----
6857 * rs -----
6858 * shift -----
6859 */
6860std::string NMD::DSLL(uint64 instruction)
6861{
6862 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6863 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6864 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6865
6866 std::string rt = GPR(copy(rt_value));
6867 std::string rs = GPR(copy(rs_value));
6868 std::string shift = IMMEDIATE(copy(shift_value));
6869
6870 return img::format("DSLL %s, %s, %s", rt, rs, shift);
6871}
6872
6873
6874/*
6875 * DSLL[32] -
6876 *
6877 * 3 2 1
6878 * 10987654321098765432109876543210
6879 * 10o000 1100xxx0000
6880 * rt -----
6881 * rs -----
6882 * shift -----
6883 */
6884std::string NMD::DSLL32(uint64 instruction)
6885{
6886 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6887 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6888 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6889
6890 std::string rt = GPR(copy(rt_value));
6891 std::string rs = GPR(copy(rs_value));
6892 std::string shift = IMMEDIATE(copy(shift_value));
6893
6894 return img::format("DSLL32 %s, %s, %s", rt, rs, shift);
6895}
6896
6897
6898/*
6899 *
6900 *
6901 * 3 2 1
6902 * 10987654321098765432109876543210
6903 * 001000 x1110000101
6904 * rt -----
6905 * rs -----
6906 * rd -----
6907 */
6908std::string NMD::DSLLV(uint64 instruction)
6909{
6910 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6911 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6912 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6913
6914 std::string rd = GPR(copy(rd_value));
6915 std::string rs = GPR(copy(rs_value));
6916 std::string rt = GPR(copy(rt_value));
6917
6918 return img::format("DSLLV %s, %s, %s", rd, rs, rt);
6919}
6920
6921
6922/*
6923 * DSRA -
6924 *
6925 * 3 2 1
6926 * 10987654321098765432109876543210
6927 * 10o000 1100xxx0100
6928 * rt -----
6929 * rs -----
6930 * shift -----
6931 */
6932std::string NMD::DSRA(uint64 instruction)
6933{
6934 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6935 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6936 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6937
6938 std::string rt = GPR(copy(rt_value));
6939 std::string rs = GPR(copy(rs_value));
6940 std::string shift = IMMEDIATE(copy(shift_value));
6941
6942 return img::format("DSRA %s, %s, %s", rt, rs, shift);
6943}
6944
6945
6946/*
6947 * DSRA[32] -
6948 *
6949 * 3 2 1
6950 * 10987654321098765432109876543210
6951 * 10o000 1100xxx0100
6952 * rt -----
6953 * rs -----
6954 * shift -----
6955 */
6956std::string NMD::DSRA32(uint64 instruction)
6957{
6958 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6959 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6960 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6961
6962 std::string rt = GPR(copy(rt_value));
6963 std::string rs = GPR(copy(rs_value));
6964 std::string shift = IMMEDIATE(copy(shift_value));
6965
6966 return img::format("DSRA32 %s, %s, %s", rt, rs, shift);
6967}
6968
6969
6970/*
6971 *
6972 *
6973 * 3 2 1
6974 * 10987654321098765432109876543210
6975 * 001000 x1110000101
6976 * rt -----
6977 * rs -----
6978 * rd -----
6979 */
6980std::string NMD::DSRAV(uint64 instruction)
6981{
6982 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6983 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6984 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6985
6986 std::string rd = GPR(copy(rd_value));
6987 std::string rs = GPR(copy(rs_value));
6988 std::string rt = GPR(copy(rt_value));
6989
6990 return img::format("DSRAV %s, %s, %s", rd, rs, rt);
6991}
6992
6993
6994/*
6995 * DSRL -
6996 *
6997 * 3 2 1
6998 * 10987654321098765432109876543210
6999 * 10o000 1100xxx0100
7000 * rt -----
7001 * rs -----
7002 * shift -----
7003 */
7004std::string NMD::DSRL(uint64 instruction)
7005{
7006 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7007 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7008 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
7009
7010 std::string rt = GPR(copy(rt_value));
7011 std::string rs = GPR(copy(rs_value));
7012 std::string shift = IMMEDIATE(copy(shift_value));
7013
7014 return img::format("DSRL %s, %s, %s", rt, rs, shift);
7015}
7016
7017
7018/*
7019 * DSRL[32] -
7020 *
7021 * 3 2 1
7022 * 10987654321098765432109876543210
7023 * 10o000 1100xxx0010
7024 * rt -----
7025 * rs -----
7026 * shift -----
7027 */
7028std::string NMD::DSRL32(uint64 instruction)
7029{
7030 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7031 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7032 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
7033
7034 std::string rt = GPR(copy(rt_value));
7035 std::string rs = GPR(copy(rs_value));
7036 std::string shift = IMMEDIATE(copy(shift_value));
7037
7038 return img::format("DSRL32 %s, %s, %s", rt, rs, shift);
7039}
7040
7041
7042/*
7043 *
7044 *
7045 * 3 2 1
7046 * 10987654321098765432109876543210
7047 * 001000 x1110000101
7048 * rt -----
7049 * rs -----
7050 * rd -----
7051 */
7052std::string NMD::DSRLV(uint64 instruction)
7053{
7054 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7055 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7056 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7057
7058 std::string rd = GPR(copy(rd_value));
7059 std::string rs = GPR(copy(rs_value));
7060 std::string rt = GPR(copy(rt_value));
7061
7062 return img::format("DSRLV %s, %s, %s", rd, rs, rt);
7063}
7064
7065
7066/*
7067 *
7068 *
7069 * 3 2 1
7070 * 10987654321098765432109876543210
7071 * 001000 x1110000101
7072 * rt -----
7073 * rs -----
7074 * rd -----
7075 */
7076std::string NMD::DSUB(uint64 instruction)
7077{
7078 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7079 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7080 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7081
7082 std::string rd = GPR(copy(rd_value));
7083 std::string rs = GPR(copy(rs_value));
7084 std::string rt = GPR(copy(rt_value));
7085
7086 return img::format("DSUB %s, %s, %s", rd, rs, rt);
7087}
7088
7089
7090/*
7091 *
7092 *
7093 * 3 2 1
7094 * 10987654321098765432109876543210
7095 * 001000 x1110000101
7096 * rt -----
7097 * rs -----
7098 * rd -----
7099 */
7100std::string NMD::DSUBU(uint64 instruction)
7101{
7102 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7103 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7104 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7105
7106 std::string rd = GPR(copy(rd_value));
7107 std::string rs = GPR(copy(rs_value));
7108 std::string rt = GPR(copy(rt_value));
7109
7110 return img::format("DSUBU %s, %s, %s", rd, rs, rt);
7111}
7112
7113
7114/*
7115 *
7116 *
7117 * 3 2 1
7118 * 10987654321098765432109876543210
7119 * 001000 x1110000101
7120 * rt -----
7121 * rs -----
7122 * rd -----
7123 */
7124std::string NMD::DVPE(uint64 instruction)
7125{
7126 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7127
7128 std::string rt = GPR(copy(rt_value));
7129
7130 return img::format("DVPE %s", rt);
7131}
7132
7133
7134/*
7135 *
7136 *
7137 * 3 2 1
7138 * 10987654321098765432109876543210
7139 * 001000 x1110000101
7140 * rt -----
7141 * rs -----
7142 * rd -----
7143 */
7144std::string NMD::DVP(uint64 instruction)
7145{
7146 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7147
7148 std::string rt = GPR(copy(rt_value));
7149
7150 return img::format("DVP %s", rt);
7151}
7152
7153
7154/*
7155 *
7156 *
7157 * 3 2 1
7158 * 10987654321098765432109876543210
7159 * 001000 x1110000101
7160 * rt -----
7161 * rs -----
7162 * rd -----
7163 */
7164std::string NMD::EHB(uint64 instruction)
7165{
7166 (void)instruction;
7167
7168 return "EHB ";
7169}
7170
7171
7172/*
7173 *
7174 *
7175 * 3 2 1
7176 * 10987654321098765432109876543210
7177 * 001000 x1110000101
7178 * rt -----
7179 * rs -----
7180 * rd -----
7181 */
7182std::string NMD::EI(uint64 instruction)
7183{
7184 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7185
7186 std::string rt = GPR(copy(rt_value));
7187
7188 return img::format("EI %s", rt);
7189}
7190
7191
7192/*
7193 *
7194 *
7195 * 3 2 1
7196 * 10987654321098765432109876543210
7197 * 001000 x1110000101
7198 * rt -----
7199 * rs -----
7200 * rd -----
7201 */
7202std::string NMD::EMT(uint64 instruction)
7203{
7204 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7205
7206 std::string rt = GPR(copy(rt_value));
7207
7208 return img::format("EMT %s", rt);
7209}
7210
7211
7212/*
7213 *
7214 *
7215 * 3 2 1
7216 * 10987654321098765432109876543210
7217 * 001000 x1110000101
7218 * rt -----
7219 * rs -----
7220 * rd -----
7221 */
7222std::string NMD::ERET(uint64 instruction)
7223{
7224 (void)instruction;
7225
7226 return "ERET ";
7227}
7228
7229
7230/*
7231 *
7232 *
7233 * 3 2 1
7234 * 10987654321098765432109876543210
7235 * 001000 x1110000101
7236 * rt -----
7237 * rs -----
7238 * rd -----
7239 */
7240std::string NMD::ERETNC(uint64 instruction)
7241{
7242 (void)instruction;
7243
7244 return "ERETNC ";
7245}
7246
7247
7248/*
7249 *
7250 *
7251 * 3 2 1
7252 * 10987654321098765432109876543210
7253 * 001000 x1110000101
7254 * rt -----
7255 * rs -----
7256 * rd -----
7257 */
7258std::string NMD::EVP(uint64 instruction)
7259{
7260 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7261
7262 std::string rt = GPR(copy(rt_value));
7263
7264 return img::format("EVP %s", rt);
7265}
7266
7267
7268/*
7269 *
7270 *
7271 * 3 2 1
7272 * 10987654321098765432109876543210
7273 * 001000 x1110000101
7274 * rt -----
7275 * rs -----
7276 * rd -----
7277 */
7278std::string NMD::EVPE(uint64 instruction)
7279{
7280 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7281
7282 std::string rt = GPR(copy(rt_value));
7283
7284 return img::format("EVPE %s", rt);
7285}
7286
7287
7288/*
7289 *
7290 *
7291 * 3 2 1
7292 * 10987654321098765432109876543210
7293 * 001000 x1110000101
7294 * rt -----
7295 * rs -----
7296 * rd -----
7297 */
7298std::string NMD::EXT(uint64 instruction)
7299{
7300 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7301 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7302 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
7303 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
7304
7305 std::string rt = GPR(copy(rt_value));
7306 std::string rs = GPR(copy(rs_value));
7307 std::string lsb = IMMEDIATE(copy(lsb_value));
7308 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
7309
7310 return img::format("EXT %s, %s, %s, %s", rt, rs, lsb, msbd);
7311}
7312
7313
7314/*
7315 *
7316 *
7317 * 3 2 1
7318 * 10987654321098765432109876543210
7319 * 001000 x1110000101
7320 * rt -----
7321 * rs -----
7322 * rd -----
7323 */
7324std::string NMD::EXTD(uint64 instruction)
7325{
7326 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7327 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7328 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7329 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7330
7331 std::string rd = GPR(copy(rd_value));
7332 std::string rs = GPR(copy(rs_value));
7333 std::string rt = GPR(copy(rt_value));
7334 std::string shift = IMMEDIATE(copy(shift_value));
7335
7336 return img::format("EXTD %s, %s, %s, %s", rd, rs, rt, shift);
7337}
7338
7339
7340/*
7341 *
7342 *
7343 * 3 2 1
7344 * 10987654321098765432109876543210
7345 * 001000 x1110000101
7346 * rt -----
7347 * rs -----
7348 * rd -----
7349 */
7350std::string NMD::EXTD32(uint64 instruction)
7351{
7352 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7353 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7354 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7355 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7356
7357 std::string rd = GPR(copy(rd_value));
7358 std::string rs = GPR(copy(rs_value));
7359 std::string rt = GPR(copy(rt_value));
7360 std::string shift = IMMEDIATE(copy(shift_value));
7361
7362 return img::format("EXTD32 %s, %s, %s, %s", rd, rs, rt, shift);
7363}
7364
7365
7366/*
7367 *
7368 *
7369 * 3 2 1
7370 * 10987654321098765432109876543210
7371 * 001000 x1110000101
7372 * rt -----
7373 * rs -----
7374 * rd -----
7375 */
7376std::string NMD::EXTPDP(uint64 instruction)
7377{
7378 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7379 uint64 size_value = extract_size_20_19_18_17_16(instruction);
7380 uint64 ac_value = extract_ac_15_14(instruction);
7381
7382 std::string rt = GPR(copy(rt_value));
7383 std::string ac = AC(copy(ac_value));
7384 std::string size = IMMEDIATE(copy(size_value));
7385
7386 return img::format("EXTPDP %s, %s, %s", rt, ac, size);
7387}
7388
7389
7390/*
7391 *
7392 *
7393 * 3 2 1
7394 * 10987654321098765432109876543210
7395 * 001000 x1110000101
7396 * rt -----
7397 * rs -----
7398 * rd -----
7399 */
7400std::string NMD::EXTPDPV(uint64 instruction)
7401{
7402 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7403 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7404 uint64 ac_value = extract_ac_15_14(instruction);
7405
7406 std::string rt = GPR(copy(rt_value));
7407 std::string ac = AC(copy(ac_value));
7408 std::string rs = GPR(copy(rs_value));
7409
7410 return img::format("EXTPDPV %s, %s, %s", rt, ac, rs);
7411}
7412
7413
7414/*
7415 *
7416 *
7417 * 3 2 1
7418 * 10987654321098765432109876543210
7419 * 001000 x1110000101
7420 * rt -----
7421 * rs -----
7422 * rd -----
7423 */
7424std::string NMD::EXTP(uint64 instruction)
7425{
7426 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7427 uint64 size_value = extract_size_20_19_18_17_16(instruction);
7428 uint64 ac_value = extract_ac_15_14(instruction);
7429
7430 std::string rt = GPR(copy(rt_value));
7431 std::string ac = AC(copy(ac_value));
7432 std::string size = IMMEDIATE(copy(size_value));
7433
7434 return img::format("EXTP %s, %s, %s", rt, ac, size);
7435}
7436
7437
7438/*
7439 *
7440 *
7441 * 3 2 1
7442 * 10987654321098765432109876543210
7443 * 001000 x1110000101
7444 * rt -----
7445 * rs -----
7446 * rd -----
7447 */
7448std::string NMD::EXTPV(uint64 instruction)
7449{
7450 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7451 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7452 uint64 ac_value = extract_ac_15_14(instruction);
7453
7454 std::string rt = GPR(copy(rt_value));
7455 std::string ac = AC(copy(ac_value));
7456 std::string rs = GPR(copy(rs_value));
7457
7458 return img::format("EXTPV %s, %s, %s", rt, ac, rs);
7459}
7460
7461
7462/*
7463 * [DSP] EXTR_RS.W rt, ac, shift - Extract word value from accumulator to GPR
7464 * with right shift
7465 *
7466 * 3 2 1
7467 * 10987654321098765432109876543210
7468 * 001000 10111001111111
7469 * rt -----
7470 * shift -----
7471 * ac --
7472 */
7473std::string NMD::EXTR_RS_W(uint64 instruction)
7474{
7475 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7476 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7477 uint64 ac_value = extract_ac_15_14(instruction);
7478
7479 std::string rt = GPR(copy(rt_value));
7480 std::string ac = AC(copy(ac_value));
7481 std::string shift = IMMEDIATE(copy(shift_value));
7482
7483 return img::format("EXTR_RS.W %s, %s, %s", rt, ac, shift);
7484}
7485
7486
7487/*
7488 * [DSP] EXTR_R.W rt, ac, shift - Extract word value from accumulator to GPR
7489 * with right shift
7490 *
7491 * 3 2 1
7492 * 10987654321098765432109876543210
7493 * 001000 01111001111111
7494 * rt -----
7495 * shift -----
7496 * ac --
7497 */
7498std::string NMD::EXTR_R_W(uint64 instruction)
7499{
7500 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7501 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7502 uint64 ac_value = extract_ac_15_14(instruction);
7503
7504 std::string rt = GPR(copy(rt_value));
7505 std::string ac = AC(copy(ac_value));
7506 std::string shift = IMMEDIATE(copy(shift_value));
7507
7508 return img::format("EXTR_R.W %s, %s, %s", rt, ac, shift);
7509}
7510
7511
7512/*
7513 * [DSP] EXTR_S.H rt, ac, shift - Extract halfword value from accumulator
7514 * to GPR with right shift and saturate
7515 *
7516 * 3 2 1
7517 * 10987654321098765432109876543210
7518 * 001000 11111001111111
7519 * rt -----
7520 * shift -----
7521 * ac --
7522 */
7523std::string NMD::EXTR_S_H(uint64 instruction)
7524{
7525 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7526 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7527 uint64 ac_value = extract_ac_15_14(instruction);
7528
7529 std::string rt = GPR(copy(rt_value));
7530 std::string ac = AC(copy(ac_value));
7531 std::string shift = IMMEDIATE(copy(shift_value));
7532
7533 return img::format("EXTR_S.H %s, %s, %s", rt, ac, shift);
7534}
7535
7536
7537/*
7538 * [DSP] EXTR.W rt, ac, shift - Extract word value from accumulator to GPR
7539 * with right shift
7540 *
7541 * 3 2 1
7542 * 10987654321098765432109876543210
7543 * 001000 00111001111111
7544 * rt -----
7545 * shift -----
7546 * ac --
7547 */
7548std::string NMD::EXTR_W(uint64 instruction)
7549{
7550 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7551 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7552 uint64 ac_value = extract_ac_15_14(instruction);
7553
7554 std::string rt = GPR(copy(rt_value));
7555 std::string ac = AC(copy(ac_value));
7556 std::string shift = IMMEDIATE(copy(shift_value));
7557
7558 return img::format("EXTR.W %s, %s, %s", rt, ac, shift);
7559}
7560
7561
7562/*
7563 * [DSP] EXTRV_RS.W rt, ac, rs - Extract word value with variable
7564 * right shift from accumulator to GPR
7565 *
7566 * 3 2 1
7567 * 10987654321098765432109876543210
7568 * 001000 10111010111111
7569 * rt -----
7570 * rs -----
7571 * ac --
7572 */
7573std::string NMD::EXTRV_RS_W(uint64 instruction)
7574{
7575 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7576 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7577 uint64 ac_value = extract_ac_15_14(instruction);
7578
7579 std::string rt = GPR(copy(rt_value));
7580 std::string ac = AC(copy(ac_value));
7581 std::string rs = GPR(copy(rs_value));
7582
7583 return img::format("EXTRV_RS.W %s, %s, %s", rt, ac, rs);
7584}
7585
7586
7587/*
7588 * [DSP] EXTRV_R.W rt, ac, rs - Extract word value with variable
7589 * right shift from accumulator to GPR
7590 *
7591 * 3 2 1
7592 * 10987654321098765432109876543210
7593 * 001000 01111010111111
7594 * rt -----
7595 * rs -----
7596 * ac --
7597 */
7598std::string NMD::EXTRV_R_W(uint64 instruction)
7599{
7600 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7601 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7602 uint64 ac_value = extract_ac_15_14(instruction);
7603
7604 std::string rt = GPR(copy(rt_value));
7605 std::string ac = AC(copy(ac_value));
7606 std::string rs = GPR(copy(rs_value));
7607
7608 return img::format("EXTRV_R.W %s, %s, %s", rt, ac, rs);
7609}
7610
7611
7612/*
7613 * [DSP] EXTRV_S.H rt, ac, rs - Extract halfword value variable from
7614 * accumulator to GPR with right shift and saturate
7615 *
7616 * 3 2 1
7617 * 10987654321098765432109876543210
7618 * 001000 11111010111111
7619 * rt -----
7620 * rs -----
7621 * ac --
7622 */
7623std::string NMD::EXTRV_S_H(uint64 instruction)
7624{
7625 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7626 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7627 uint64 ac_value = extract_ac_15_14(instruction);
7628
7629 std::string rt = GPR(copy(rt_value));
7630 std::string ac = AC(copy(ac_value));
7631 std::string rs = GPR(copy(rs_value));
7632
7633 return img::format("EXTRV_S.H %s, %s, %s", rt, ac, rs);
7634}
7635
7636
7637/*
7638 * [DSP] EXTRV.W rt, ac, rs - Extract word value with variable
7639 * right shift from accumulator to GPR
7640 *
7641 * 3 2 1
7642 * 10987654321098765432109876543210
7643 * 001000 00111010111111
7644 * rt -----
7645 * rs -----
7646 * ac --
7647 */
7648std::string NMD::EXTRV_W(uint64 instruction)
7649{
7650 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7651 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7652 uint64 ac_value = extract_ac_15_14(instruction);
7653
7654 std::string rt = GPR(copy(rt_value));
7655 std::string ac = AC(copy(ac_value));
7656 std::string rs = GPR(copy(rs_value));
7657
7658 return img::format("EXTRV.W %s, %s, %s", rt, ac, rs);
7659}
7660
7661
7662/*
7663 * EXTW - Extract Word
7664 *
7665 * 3 2 1
7666 * 10987654321098765432109876543210
7667 * 001000 011111
7668 * rt -----
7669 * rs -----
7670 * rd -----
7671 * shift -----
7672 */
7673std::string NMD::EXTW(uint64 instruction)
7674{
7675 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7676 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7677 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7678 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7679
7680 std::string rd = GPR(copy(rd_value));
7681 std::string rs = GPR(copy(rs_value));
7682 std::string rt = GPR(copy(rt_value));
7683 std::string shift = IMMEDIATE(copy(shift_value));
7684
7685 return img::format("EXTW %s, %s, %s, %s", rd, rs, rt, shift);
7686}
7687
7688
7689/*
7690 *
7691 *
7692 * 3 2 1
7693 * 10987654321098765432109876543210
7694 * 001000 x1110000101
7695 * rt -----
7696 * rs -----
7697 * rd -----
7698 */
7699std::string NMD::FLOOR_L_D(uint64 instruction)
7700{
7701 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7702 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7703
7704 std::string ft = FPR(copy(ft_value));
7705 std::string fs = FPR(copy(fs_value));
7706
7707 return img::format("FLOOR.L.D %s, %s", ft, fs);
7708}
7709
7710
7711/*
7712 *
7713 *
7714 * 3 2 1
7715 * 10987654321098765432109876543210
7716 * 001000 x1110000101
7717 * rt -----
7718 * rs -----
7719 * rd -----
7720 */
7721std::string NMD::FLOOR_L_S(uint64 instruction)
7722{
7723 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7724 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7725
7726 std::string ft = FPR(copy(ft_value));
7727 std::string fs = FPR(copy(fs_value));
7728
7729 return img::format("FLOOR.L.S %s, %s", ft, fs);
7730}
7731
7732
7733/*
7734 *
7735 *
7736 * 3 2 1
7737 * 10987654321098765432109876543210
7738 * 001000 x1110000101
7739 * rt -----
7740 * rs -----
7741 * rd -----
7742 */
7743std::string NMD::FLOOR_W_D(uint64 instruction)
7744{
7745 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7746 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7747
7748 std::string ft = FPR(copy(ft_value));
7749 std::string fs = FPR(copy(fs_value));
7750
7751 return img::format("FLOOR.W.D %s, %s", ft, fs);
7752}
7753
7754
7755/*
7756 *
7757 *
7758 * 3 2 1
7759 * 10987654321098765432109876543210
7760 * 001000 x1110000101
7761 * rt -----
7762 * rs -----
7763 * rd -----
7764 */
7765std::string NMD::FLOOR_W_S(uint64 instruction)
7766{
7767 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7768 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7769
7770 std::string ft = FPR(copy(ft_value));
7771 std::string fs = FPR(copy(fs_value));
7772
7773 return img::format("FLOOR.W.S %s, %s", ft, fs);
7774}
7775
7776
7777/*
7778 *
7779 *
7780 * 3 2 1
7781 * 10987654321098765432109876543210
7782 * 001000 x1110000101
7783 * rt -----
7784 * rs -----
7785 * rd -----
7786 */
7787std::string NMD::FORK(uint64 instruction)
7788{
7789 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7790 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7791 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7792
7793 std::string rd = GPR(copy(rd_value));
7794 std::string rs = GPR(copy(rs_value));
7795 std::string rt = GPR(copy(rt_value));
7796
7797 return img::format("FORK %s, %s, %s", rd, rs, rt);
7798}
7799
7800
7801/*
7802 *
7803 *
7804 * 3 2 1
7805 * 10987654321098765432109876543210
7806 * 001000 x1110000101
7807 * rt -----
7808 * rs -----
7809 * rd -----
7810 */
7811std::string NMD::HYPCALL(uint64 instruction)
7812{
7813 uint64 code_value = extract_code_17_to_0(instruction);
7814
7815 std::string code = IMMEDIATE(copy(code_value));
7816
7817 return img::format("HYPCALL %s", code);
7818}
7819
7820
7821/*
7822 *
7823 *
7824 * 3 2 1
7825 * 10987654321098765432109876543210
7826 * 001000 x1110000101
7827 * rt -----
7828 * rs -----
7829 * rd -----
7830 */
7831std::string NMD::HYPCALL_16_(uint64 instruction)
7832{
7833 uint64 code_value = extract_code_1_0(instruction);
7834
7835 std::string code = IMMEDIATE(copy(code_value));
7836
7837 return img::format("HYPCALL %s", code);
7838}
7839
7840
7841/*
7842 *
7843 *
7844 * 3 2 1
7845 * 10987654321098765432109876543210
7846 * 001000 x1110000101
7847 * rt -----
7848 * rs -----
7849 * rd -----
7850 */
7851std::string NMD::INS(uint64 instruction)
7852{
7853 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7854 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7855 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
7856 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
7857
7858 std::string rt = GPR(copy(rt_value));
7859 std::string rs = GPR(copy(rs_value));
7860 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
7861 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
7862 /* !!!!!!!!!! - no conversion function */
7863
7864 return img::format("INS %s, %s, %s, %s", rt, rs, pos, size);
7865 /* hand edited */
7866}
7867
7868
7869/*
7870 * [DSP] INSV rt, rs - Insert bit field variable
7871 *
7872 * 3 2 1
7873 * 10987654321098765432109876543210
7874 * 001000 0100000100111111
7875 * rt -----
7876 * rs -----
7877 */
7878std::string NMD::INSV(uint64 instruction)
7879{
7880 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7881 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7882
7883 std::string rt = GPR(copy(rt_value));
7884 std::string rs = GPR(copy(rs_value));
7885
7886 return img::format("INSV %s, %s", rt, rs);
7887}
7888
7889
7890/*
7891 *
7892 *
7893 * 3 2 1
7894 * 10987654321098765432109876543210
7895 * 001000 x1110000101
7896 * rt -----
7897 * rs -----
7898 * rd -----
7899 */
7900std::string NMD::IRET(uint64 instruction)
7901{
7902 (void)instruction;
7903
7904 return "IRET ";
7905}
7906
7907
7908/*
7909 *
7910 *
7911 * 3 2 1
7912 * 10987654321098765432109876543210
7913 * 001000 x1110000101
7914 * rt -----
7915 * rs -----
7916 * rd -----
7917 */
7918std::string NMD::JALRC_16_(uint64 instruction)
7919{
7920 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7921
7922 std::string rt = GPR(copy(rt_value));
7923
7924 return img::format("JALRC $%d, %s", 31, rt);
7925}
7926
7927
7928/*
7929 *
7930 *
7931 * 3 2 1
7932 * 10987654321098765432109876543210
7933 * 001000 x1110000101
7934 * rt -----
7935 * rs -----
7936 * rd -----
7937 */
7938std::string NMD::JALRC_32_(uint64 instruction)
7939{
7940 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7941 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7942
7943 std::string rt = GPR(copy(rt_value));
7944 std::string rs = GPR(copy(rs_value));
7945
7946 return img::format("JALRC %s, %s", rt, rs);
7947}
7948
7949
7950/*
7951 *
7952 *
7953 * 3 2 1
7954 * 10987654321098765432109876543210
7955 * 001000 x1110000101
7956 * rt -----
7957 * rs -----
7958 * rd -----
7959 */
7960std::string NMD::JALRC_HB(uint64 instruction)
7961{
7962 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7963 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7964
7965 std::string rt = GPR(copy(rt_value));
7966 std::string rs = GPR(copy(rs_value));
7967
7968 return img::format("JALRC.HB %s, %s", rt, rs);
7969}
7970
7971
7972/*
7973 *
7974 *
7975 * 3 2 1
7976 * 10987654321098765432109876543210
7977 * 001000 x1110000101
7978 * rt -----
7979 * rs -----
7980 * rd -----
7981 */
7982std::string NMD::JRC(uint64 instruction)
7983{
7984 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7985
7986 std::string rt = GPR(copy(rt_value));
7987
7988 return img::format("JRC %s", rt);
7989}
7990
7991
7992/*
7993 *
7994 *
7995 * 3 2 1
7996 * 10987654321098765432109876543210
7997 * 001000 x1110000101
7998 * rt -----
7999 * rs -----
8000 * rd -----
8001 */
8002std::string NMD::LB_16_(uint64 instruction)
8003{
8004 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8005 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8006 uint64 u_value = extract_u_1_0(instruction);
8007
8008 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8009 std::string u = IMMEDIATE(copy(u_value));
8010 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
8011
8012 return img::format("LB %s, %s(%s)", rt3, u, rs3);
8013}
8014
8015
8016/*
8017 *
8018 *
8019 * 3 2 1
8020 * 10987654321098765432109876543210
8021 * 001000 x1110000101
8022 * rt -----
8023 * rs -----
8024 * rd -----
8025 */
8026std::string NMD::LB_GP_(uint64 instruction)
8027{
8028 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8029 uint64 u_value = extract_u_17_to_0(instruction);
8030
8031 std::string rt = GPR(copy(rt_value));
8032 std::string u = IMMEDIATE(copy(u_value));
8033
8034 return img::format("LB %s, %s($%d)", rt, u, 28);
8035}
8036
8037
8038/*
8039 *
8040 *
8041 * 3 2 1
8042 * 10987654321098765432109876543210
8043 * 001000 x1110000101
8044 * rt -----
8045 * rs -----
8046 * rd -----
8047 */
8048std::string NMD::LB_S9_(uint64 instruction)
8049{
8050 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8051 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8052 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8053
8054 std::string rt = GPR(copy(rt_value));
8055 std::string s = IMMEDIATE(copy(s_value));
8056 std::string rs = GPR(copy(rs_value));
8057
8058 return img::format("LB %s, %s(%s)", rt, s, rs);
8059}
8060
8061
8062/*
8063 *
8064 *
8065 * 3 2 1
8066 * 10987654321098765432109876543210
8067 * 001000 x1110000101
8068 * rt -----
8069 * rs -----
8070 * rd -----
8071 */
8072std::string NMD::LB_U12_(uint64 instruction)
8073{
8074 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8075 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8076 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8077
8078 std::string rt = GPR(copy(rt_value));
8079 std::string u = IMMEDIATE(copy(u_value));
8080 std::string rs = GPR(copy(rs_value));
8081
8082 return img::format("LB %s, %s(%s)", rt, u, rs);
8083}
8084
8085
8086/*
8087 *
8088 *
8089 * 3 2 1
8090 * 10987654321098765432109876543210
8091 * 001000 x1110000101
8092 * rt -----
8093 * rs -----
8094 * rd -----
8095 */
8096std::string NMD::LBE(uint64 instruction)
8097{
8098 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8099 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8100 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8101
8102 std::string rt = GPR(copy(rt_value));
8103 std::string s = IMMEDIATE(copy(s_value));
8104 std::string rs = GPR(copy(rs_value));
8105
8106 return img::format("LBE %s, %s(%s)", rt, s, rs);
8107}
8108
8109
8110/*
8111 *
8112 *
8113 * 3 2 1
8114 * 10987654321098765432109876543210
8115 * 001000 x1110000101
8116 * rt -----
8117 * rs -----
8118 * rd -----
8119 */
8120std::string NMD::LBU_16_(uint64 instruction)
8121{
8122 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8123 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8124 uint64 u_value = extract_u_1_0(instruction);
8125
8126 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8127 std::string u = IMMEDIATE(copy(u_value));
8128 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
8129
8130 return img::format("LBU %s, %s(%s)", rt3, u, rs3);
8131}
8132
8133
8134/*
8135 *
8136 *
8137 * 3 2 1
8138 * 10987654321098765432109876543210
8139 * 001000 x1110000101
8140 * rt -----
8141 * rs -----
8142 * rd -----
8143 */
8144std::string NMD::LBU_GP_(uint64 instruction)
8145{
8146 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8147 uint64 u_value = extract_u_17_to_0(instruction);
8148
8149 std::string rt = GPR(copy(rt_value));
8150 std::string u = IMMEDIATE(copy(u_value));
8151
8152 return img::format("LBU %s, %s($%d)", rt, u, 28);
8153}
8154
8155
8156/*
8157 *
8158 *
8159 * 3 2 1
8160 * 10987654321098765432109876543210
8161 * 001000 x1110000101
8162 * rt -----
8163 * rs -----
8164 * rd -----
8165 */
8166std::string NMD::LBU_S9_(uint64 instruction)
8167{
8168 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8169 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8170 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8171
8172 std::string rt = GPR(copy(rt_value));
8173 std::string s = IMMEDIATE(copy(s_value));
8174 std::string rs = GPR(copy(rs_value));
8175
8176 return img::format("LBU %s, %s(%s)", rt, s, rs);
8177}
8178
8179
8180/*
8181 *
8182 *
8183 * 3 2 1
8184 * 10987654321098765432109876543210
8185 * 001000 x1110000101
8186 * rt -----
8187 * rs -----
8188 * rd -----
8189 */
8190std::string NMD::LBU_U12_(uint64 instruction)
8191{
8192 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8193 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8194 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8195
8196 std::string rt = GPR(copy(rt_value));
8197 std::string u = IMMEDIATE(copy(u_value));
8198 std::string rs = GPR(copy(rs_value));
8199
8200 return img::format("LBU %s, %s(%s)", rt, u, rs);
8201}
8202
8203
8204/*
8205 *
8206 *
8207 * 3 2 1
8208 * 10987654321098765432109876543210
8209 * 001000 x1110000101
8210 * rt -----
8211 * rs -----
8212 * rd -----
8213 */
8214std::string NMD::LBUE(uint64 instruction)
8215{
8216 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8217 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8218 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8219
8220 std::string rt = GPR(copy(rt_value));
8221 std::string s = IMMEDIATE(copy(s_value));
8222 std::string rs = GPR(copy(rs_value));
8223
8224 return img::format("LBUE %s, %s(%s)", rt, s, rs);
8225}
8226
8227
8228/*
8229 *
8230 *
8231 * 3 2 1
8232 * 10987654321098765432109876543210
8233 * 001000 x1110000101
8234 * rt -----
8235 * rs -----
8236 * rd -----
8237 */
8238std::string NMD::LBUX(uint64 instruction)
8239{
8240 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8241 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8242 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8243
8244 std::string rd = GPR(copy(rd_value));
8245 std::string rs = GPR(copy(rs_value));
8246 std::string rt = GPR(copy(rt_value));
8247
8248 return img::format("LBUX %s, %s(%s)", rd, rs, rt);
8249}
8250
8251
8252/*
8253 *
8254 *
8255 * 3 2 1
8256 * 10987654321098765432109876543210
8257 * 001000 x1110000101
8258 * rt -----
8259 * rs -----
8260 * rd -----
8261 */
8262std::string NMD::LBX(uint64 instruction)
8263{
8264 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8265 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8266 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8267
8268 std::string rd = GPR(copy(rd_value));
8269 std::string rs = GPR(copy(rs_value));
8270 std::string rt = GPR(copy(rt_value));
8271
8272 return img::format("LBX %s, %s(%s)", rd, rs, rt);
8273}
8274
8275
8276/*
8277 *
8278 *
8279 * 3 2 1
8280 * 10987654321098765432109876543210
8281 * 001000 x1110000101
8282 * rt -----
8283 * rs -----
8284 * rd -----
8285 */
8286std::string NMD::LD_GP_(uint64 instruction)
8287{
8288 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8289 uint64 u_value = extract_u_20_to_3__s3(instruction);
8290
8291 std::string rt = GPR(copy(rt_value));
8292 std::string u = IMMEDIATE(copy(u_value));
8293
8294 return img::format("LD %s, %s($%d)", rt, u, 28);
8295}
8296
8297
8298/*
8299 *
8300 *
8301 * 3 2 1
8302 * 10987654321098765432109876543210
8303 * 001000 x1110000101
8304 * rt -----
8305 * rs -----
8306 * rd -----
8307 */
8308std::string NMD::LD_S9_(uint64 instruction)
8309{
8310 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8311 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8312 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8313
8314 std::string rt = GPR(copy(rt_value));
8315 std::string s = IMMEDIATE(copy(s_value));
8316 std::string rs = GPR(copy(rs_value));
8317
8318 return img::format("LD %s, %s(%s)", rt, s, rs);
8319}
8320
8321
8322/*
8323 *
8324 *
8325 * 3 2 1
8326 * 10987654321098765432109876543210
8327 * 001000 x1110000101
8328 * rt -----
8329 * rs -----
8330 * rd -----
8331 */
8332std::string NMD::LD_U12_(uint64 instruction)
8333{
8334 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8335 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8336 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8337
8338 std::string rt = GPR(copy(rt_value));
8339 std::string u = IMMEDIATE(copy(u_value));
8340 std::string rs = GPR(copy(rs_value));
8341
8342 return img::format("LD %s, %s(%s)", rt, u, rs);
8343}
8344
8345
8346/*
8347 *
8348 *
8349 * 3 2 1
8350 * 10987654321098765432109876543210
8351 * 001000 x1110000101
8352 * rt -----
8353 * rs -----
8354 * rd -----
8355 */
8356std::string NMD::LDC1_GP_(uint64 instruction)
8357{
8358 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8359 uint64 u_value = extract_u_17_to_2__s2(instruction);
8360
8361 std::string ft = FPR(copy(ft_value));
8362 std::string u = IMMEDIATE(copy(u_value));
8363
8364 return img::format("LDC1 %s, %s($%d)", ft, u, 28);
8365}
8366
8367
8368/*
8369 *
8370 *
8371 * 3 2 1
8372 * 10987654321098765432109876543210
8373 * 001000 x1110000101
8374 * rt -----
8375 * rs -----
8376 * rd -----
8377 */
8378std::string NMD::LDC1_S9_(uint64 instruction)
8379{
8380 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8381 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8382 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8383
8384 std::string ft = FPR(copy(ft_value));
8385 std::string s = IMMEDIATE(copy(s_value));
8386 std::string rs = GPR(copy(rs_value));
8387
8388 return img::format("LDC1 %s, %s(%s)", ft, s, rs);
8389}
8390
8391
8392/*
8393 *
8394 *
8395 * 3 2 1
8396 * 10987654321098765432109876543210
8397 * 001000 x1110000101
8398 * rt -----
8399 * rs -----
8400 * rd -----
8401 */
8402std::string NMD::LDC1_U12_(uint64 instruction)
8403{
8404 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8405 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8406 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8407
8408 std::string ft = FPR(copy(ft_value));
8409 std::string u = IMMEDIATE(copy(u_value));
8410 std::string rs = GPR(copy(rs_value));
8411
8412 return img::format("LDC1 %s, %s(%s)", ft, u, rs);
8413}
8414
8415
8416/*
8417 *
8418 *
8419 * 3 2 1
8420 * 10987654321098765432109876543210
8421 * 001000 x1110000101
8422 * rt -----
8423 * rs -----
8424 * rd -----
8425 */
8426std::string NMD::LDC1XS(uint64 instruction)
8427{
8428 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8429 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8430 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8431
8432 std::string ft = FPR(copy(ft_value));
8433 std::string rs = GPR(copy(rs_value));
8434 std::string rt = GPR(copy(rt_value));
8435
8436 return img::format("LDC1XS %s, %s(%s)", ft, rs, rt);
8437}
8438
8439
8440/*
8441 *
8442 *
8443 * 3 2 1
8444 * 10987654321098765432109876543210
8445 * 001000 x1110000101
8446 * rt -----
8447 * rs -----
8448 * rd -----
8449 */
8450std::string NMD::LDC1X(uint64 instruction)
8451{
8452 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8453 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8454 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8455
8456 std::string ft = FPR(copy(ft_value));
8457 std::string rs = GPR(copy(rs_value));
8458 std::string rt = GPR(copy(rt_value));
8459
8460 return img::format("LDC1X %s, %s(%s)", ft, rs, rt);
8461}
8462
8463
8464/*
8465 *
8466 *
8467 * 3 2 1
8468 * 10987654321098765432109876543210
8469 * 001000 x1110000101
8470 * rt -----
8471 * rs -----
8472 * rd -----
8473 */
8474std::string NMD::LDC2(uint64 instruction)
8475{
8476 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
8477 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8478 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8479
8480 std::string ct = CPR(copy(ct_value));
8481 std::string s = IMMEDIATE(copy(s_value));
8482 std::string rs = GPR(copy(rs_value));
8483
8484 return img::format("LDC2 %s, %s(%s)", ct, s, rs);
8485}
8486
8487
8488/*
8489 *
8490 *
8491 * 3 2 1
8492 * 10987654321098765432109876543210
8493 * 001000 x1110000101
8494 * rt -----
8495 * rs -----
8496 * rd -----
8497 */
8498std::string NMD::LDM(uint64 instruction)
8499{
8500 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8501 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8502 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8503 uint64 count3_value = extract_count3_14_13_12(instruction);
8504
8505 std::string rt = GPR(copy(rt_value));
8506 std::string s = IMMEDIATE(copy(s_value));
8507 std::string rs = GPR(copy(rs_value));
8508 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
8509
8510 return img::format("LDM %s, %s(%s), %s", rt, s, rs, count3);
8511}
8512
8513
8514/*
8515 *
8516 *
8517 * 3 2 1
8518 * 10987654321098765432109876543210
8519 * 001000 x1110000101
8520 * rt -----
8521 * rs -----
8522 * rd -----
8523 */
8524std::string NMD::LDPC_48_(uint64 instruction)
8525{
8526 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8527 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8528
8529 std::string rt = GPR(copy(rt_value));
8530 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
8531
8532 return img::format("LDPC %s, %s", rt, s);
8533}
8534
8535
8536/*
8537 *
8538 *
8539 * 3 2 1
8540 * 10987654321098765432109876543210
8541 * 001000 x1110000101
8542 * rt -----
8543 * rs -----
8544 * rd -----
8545 */
8546std::string NMD::LDX(uint64 instruction)
8547{
8548 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8549 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8550 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8551
8552 std::string rd = GPR(copy(rd_value));
8553 std::string rs = GPR(copy(rs_value));
8554 std::string rt = GPR(copy(rt_value));
8555
8556 return img::format("LDX %s, %s(%s)", rd, rs, rt);
8557}
8558
8559
8560/*
8561 *
8562 *
8563 * 3 2 1
8564 * 10987654321098765432109876543210
8565 * 001000 x1110000101
8566 * rt -----
8567 * rs -----
8568 * rd -----
8569 */
8570std::string NMD::LDXS(uint64 instruction)
8571{
8572 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8573 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8574 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8575
8576 std::string rd = GPR(copy(rd_value));
8577 std::string rs = GPR(copy(rs_value));
8578 std::string rt = GPR(copy(rt_value));
8579
8580 return img::format("LDXS %s, %s(%s)", rd, rs, rt);
8581}
8582
8583
8584/*
8585 *
8586 *
8587 * 3 2 1
8588 * 10987654321098765432109876543210
8589 * 001000 x1110000101
8590 * rt -----
8591 * rs -----
8592 * rd -----
8593 */
8594std::string NMD::LH_16_(uint64 instruction)
8595{
8596 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8597 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8598 uint64 u_value = extract_u_2_1__s1(instruction);
8599
8600 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8601 std::string u = IMMEDIATE(copy(u_value));
8602 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
8603
8604 return img::format("LH %s, %s(%s)", rt3, u, rs3);
8605}
8606
8607
8608/*
8609 *
8610 *
8611 * 3 2 1
8612 * 10987654321098765432109876543210
8613 * 001000 x1110000101
8614 * rt -----
8615 * rs -----
8616 * rd -----
8617 */
8618std::string NMD::LH_GP_(uint64 instruction)
8619{
8620 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8621 uint64 u_value = extract_u_17_to_1__s1(instruction);
8622
8623 std::string rt = GPR(copy(rt_value));
8624 std::string u = IMMEDIATE(copy(u_value));
8625
8626 return img::format("LH %s, %s($%d)", rt, u, 28);
8627}
8628
8629
8630/*
8631 *
8632 *
8633 * 3 2 1
8634 * 10987654321098765432109876543210
8635 * 001000 x1110000101
8636 * rt -----
8637 * rs -----
8638 * rd -----
8639 */
8640std::string NMD::LH_S9_(uint64 instruction)
8641{
8642 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8643 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8644 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8645
8646 std::string rt = GPR(copy(rt_value));
8647 std::string s = IMMEDIATE(copy(s_value));
8648 std::string rs = GPR(copy(rs_value));
8649
8650 return img::format("LH %s, %s(%s)", rt, s, rs);
8651}
8652
8653
8654/*
8655 *
8656 *
8657 * 3 2 1
8658 * 10987654321098765432109876543210
8659 * 001000 x1110000101
8660 * rt -----
8661 * rs -----
8662 * rd -----
8663 */
8664std::string NMD::LH_U12_(uint64 instruction)
8665{
8666 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8667 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8668 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8669
8670 std::string rt = GPR(copy(rt_value));
8671 std::string u = IMMEDIATE(copy(u_value));
8672 std::string rs = GPR(copy(rs_value));
8673
8674 return img::format("LH %s, %s(%s)", rt, u, rs);
8675}
8676
8677
8678/*
8679 *
8680 *
8681 * 3 2 1
8682 * 10987654321098765432109876543210
8683 * 001000 x1110000101
8684 * rt -----
8685 * rs -----
8686 * rd -----
8687 */
8688std::string NMD::LHE(uint64 instruction)
8689{
8690 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8691 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8692 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8693
8694 std::string rt = GPR(copy(rt_value));
8695 std::string s = IMMEDIATE(copy(s_value));
8696 std::string rs = GPR(copy(rs_value));
8697
8698 return img::format("LHE %s, %s(%s)", rt, s, rs);
8699}
8700
8701
8702/*
8703 *
8704 *
8705 * 3 2 1
8706 * 10987654321098765432109876543210
8707 * 001000 x1110000101
8708 * rt -----
8709 * rs -----
8710 * rd -----
8711 */
8712std::string NMD::LHU_16_(uint64 instruction)
8713{
8714 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8715 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8716 uint64 u_value = extract_u_2_1__s1(instruction);
8717
8718 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8719 std::string u = IMMEDIATE(copy(u_value));
8720 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
8721
8722 return img::format("LHU %s, %s(%s)", rt3, u, rs3);
8723}
8724
8725
8726/*
8727 *
8728 *
8729 * 3 2 1
8730 * 10987654321098765432109876543210
8731 * 001000 x1110000101
8732 * rt -----
8733 * rs -----
8734 * rd -----
8735 */
8736std::string NMD::LHU_GP_(uint64 instruction)
8737{
8738 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8739 uint64 u_value = extract_u_17_to_1__s1(instruction);
8740
8741 std::string rt = GPR(copy(rt_value));
8742 std::string u = IMMEDIATE(copy(u_value));
8743
8744 return img::format("LHU %s, %s($%d)", rt, u, 28);
8745}
8746
8747
8748/*
8749 *
8750 *
8751 * 3 2 1
8752 * 10987654321098765432109876543210
8753 * 001000 x1110000101
8754 * rt -----
8755 * rs -----
8756 * rd -----
8757 */
8758std::string NMD::LHU_S9_(uint64 instruction)
8759{
8760 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8761 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8762 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8763
8764 std::string rt = GPR(copy(rt_value));
8765 std::string s = IMMEDIATE(copy(s_value));
8766 std::string rs = GPR(copy(rs_value));
8767
8768 return img::format("LHU %s, %s(%s)", rt, s, rs);
8769}
8770
8771
8772/*
8773 *
8774 *
8775 * 3 2 1
8776 * 10987654321098765432109876543210
8777 * 001000 x1110000101
8778 * rt -----
8779 * rs -----
8780 * rd -----
8781 */
8782std::string NMD::LHU_U12_(uint64 instruction)
8783{
8784 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8785 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8786 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8787
8788 std::string rt = GPR(copy(rt_value));
8789 std::string u = IMMEDIATE(copy(u_value));
8790 std::string rs = GPR(copy(rs_value));
8791
8792 return img::format("LHU %s, %s(%s)", rt, u, rs);
8793}
8794
8795
8796/*
8797 *
8798 *
8799 * 3 2 1
8800 * 10987654321098765432109876543210
8801 * 001000 x1110000101
8802 * rt -----
8803 * rs -----
8804 * rd -----
8805 */
8806std::string NMD::LHUE(uint64 instruction)
8807{
8808 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8809 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8810 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8811
8812 std::string rt = GPR(copy(rt_value));
8813 std::string s = IMMEDIATE(copy(s_value));
8814 std::string rs = GPR(copy(rs_value));
8815
8816 return img::format("LHUE %s, %s(%s)", rt, s, rs);
8817}
8818
8819
8820/*
8821 *
8822 *
8823 * 3 2 1
8824 * 10987654321098765432109876543210
8825 * 001000 x1110000101
8826 * rt -----
8827 * rs -----
8828 * rd -----
8829 */
8830std::string NMD::LHUX(uint64 instruction)
8831{
8832 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8833 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8834 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8835
8836 std::string rd = GPR(copy(rd_value));
8837 std::string rs = GPR(copy(rs_value));
8838 std::string rt = GPR(copy(rt_value));
8839
8840 return img::format("LHUX %s, %s(%s)", rd, rs, rt);
8841}
8842
8843
8844/*
8845 *
8846 *
8847 * 3 2 1
8848 * 10987654321098765432109876543210
8849 * 001000 x1110000101
8850 * rt -----
8851 * rs -----
8852 * rd -----
8853 */
8854std::string NMD::LHUXS(uint64 instruction)
8855{
8856 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8857 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8858 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8859
8860 std::string rd = GPR(copy(rd_value));
8861 std::string rs = GPR(copy(rs_value));
8862 std::string rt = GPR(copy(rt_value));
8863
8864 return img::format("LHUXS %s, %s(%s)", rd, rs, rt);
8865}
8866
8867
8868/*
8869 *
8870 *
8871 * 3 2 1
8872 * 10987654321098765432109876543210
8873 * 001000 x1110000101
8874 * rt -----
8875 * rs -----
8876 * rd -----
8877 */
8878std::string NMD::LHXS(uint64 instruction)
8879{
8880 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8881 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8882 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8883
8884 std::string rd = GPR(copy(rd_value));
8885 std::string rs = GPR(copy(rs_value));
8886 std::string rt = GPR(copy(rt_value));
8887
8888 return img::format("LHXS %s, %s(%s)", rd, rs, rt);
8889}
8890
8891
8892/*
8893 *
8894 *
8895 * 3 2 1
8896 * 10987654321098765432109876543210
8897 * 001000 x1110000101
8898 * rt -----
8899 * rs -----
8900 * rd -----
8901 */
8902std::string NMD::LHX(uint64 instruction)
8903{
8904 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8905 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8906 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8907
8908 std::string rd = GPR(copy(rd_value));
8909 std::string rs = GPR(copy(rs_value));
8910 std::string rt = GPR(copy(rt_value));
8911
8912 return img::format("LHX %s, %s(%s)", rd, rs, rt);
8913}
8914
8915
8916/*
8917 *
8918 *
8919 * 3 2 1
8920 * 10987654321098765432109876543210
8921 * 001000 x1110000101
8922 * rt -----
8923 * rs -----
8924 * rd -----
8925 */
8926std::string NMD::LI_16_(uint64 instruction)
8927{
8928 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8929 uint64 eu_value = extract_eu_6_5_4_3_2_1_0(instruction);
8930
8931 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8932 std::string eu = IMMEDIATE(encode_eu_from_s_li16(eu_value));
8933
8934 return img::format("LI %s, %s", rt3, eu);
8935}
8936
8937
8938/*
8939 *
8940 *
8941 * 3 2 1
8942 * 10987654321098765432109876543210
8943 * 001000 x1110000101
8944 * rt -----
8945 * rs -----
8946 * rd -----
8947 */
8948std::string NMD::LI_48_(uint64 instruction)
8949{
8950 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8951 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8952
8953 std::string rt = GPR(copy(rt_value));
8954 std::string s = IMMEDIATE(copy(s_value));
8955
8956 return img::format("LI %s, %s", rt, s);
8957}
8958
8959
8960/*
8961 *
8962 *
8963 * 3 2 1
8964 * 10987654321098765432109876543210
8965 * 001000 x1110000101
8966 * rt -----
8967 * rs -----
8968 * rd -----
8969 */
8970std::string NMD::LL(uint64 instruction)
8971{
8972 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8973 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8974 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
8975
8976 std::string rt = GPR(copy(rt_value));
8977 std::string s = IMMEDIATE(copy(s_value));
8978 std::string rs = GPR(copy(rs_value));
8979
8980 return img::format("LL %s, %s(%s)", rt, s, rs);
8981}
8982
8983
8984/*
8985 *
8986 *
8987 * 3 2 1
8988 * 10987654321098765432109876543210
8989 * 001000 x1110000101
8990 * rt -----
8991 * rs -----
8992 * rd -----
8993 */
8994std::string NMD::LLD(uint64 instruction)
8995{
8996 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8997 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8998 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
8999
9000 std::string rt = GPR(copy(rt_value));
9001 std::string s = IMMEDIATE(copy(s_value));
9002 std::string rs = GPR(copy(rs_value));
9003
9004 return img::format("LLD %s, %s(%s)", rt, s, rs);
9005}
9006
9007
9008/*
9009 *
9010 *
9011 * 3 2 1
9012 * 10987654321098765432109876543210
9013 * 001000 x1110000101
9014 * rt -----
9015 * rs -----
9016 * rd -----
9017 */
9018std::string NMD::LLDP(uint64 instruction)
9019{
9020 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9021 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9022 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
9023
9024 std::string rt = GPR(copy(rt_value));
9025 std::string ru = GPR(copy(ru_value));
9026 std::string rs = GPR(copy(rs_value));
9027
9028 return img::format("LLDP %s, %s, (%s)", rt, ru, rs);
9029}
9030
9031
9032/*
9033 *
9034 *
9035 * 3 2 1
9036 * 10987654321098765432109876543210
9037 * 001000 x1110000101
9038 * rt -----
9039 * rs -----
9040 * rd -----
9041 */
9042std::string NMD::LLE(uint64 instruction)
9043{
9044 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9045 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9046 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
9047
9048 std::string rt = GPR(copy(rt_value));
9049 std::string s = IMMEDIATE(copy(s_value));
9050 std::string rs = GPR(copy(rs_value));
9051
9052 return img::format("LLE %s, %s(%s)", rt, s, rs);
9053}
9054
9055
9056/*
9057 *
9058 *
9059 * 3 2 1
9060 * 10987654321098765432109876543210
9061 * 001000 x1110000101
9062 * rt -----
9063 * rs -----
9064 * rd -----
9065 */
9066std::string NMD::LLWP(uint64 instruction)
9067{
9068 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9069 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9070 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
9071
9072 std::string rt = GPR(copy(rt_value));
9073 std::string ru = GPR(copy(ru_value));
9074 std::string rs = GPR(copy(rs_value));
9075
9076 return img::format("LLWP %s, %s, (%s)", rt, ru, rs);
9077}
9078
9079
9080/*
9081 *
9082 *
9083 * 3 2 1
9084 * 10987654321098765432109876543210
9085 * 001000 x1110000101
9086 * rt -----
9087 * rs -----
9088 * rd -----
9089 */
9090std::string NMD::LLWPE(uint64 instruction)
9091{
9092 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9093 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9094 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
9095
9096 std::string rt = GPR(copy(rt_value));
9097 std::string ru = GPR(copy(ru_value));
9098 std::string rs = GPR(copy(rs_value));
9099
9100 return img::format("LLWPE %s, %s, (%s)", rt, ru, rs);
9101}
9102
9103
9104/*
9105 *
9106 *
9107 * 3 2 1
9108 * 10987654321098765432109876543210
9109 * 001000 x1110000101
9110 * rt -----
9111 * rs -----
9112 * rd -----
9113 */
9114std::string NMD::LSA(uint64 instruction)
9115{
9116 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9117 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9118 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9119 uint64 u2_value = extract_u2_10_9(instruction);
9120
9121 std::string rd = GPR(copy(rd_value));
9122 std::string rs = GPR(copy(rs_value));
9123 std::string rt = GPR(copy(rt_value));
9124 std::string u2 = IMMEDIATE(copy(u2_value));
9125
9126 return img::format("LSA %s, %s, %s, %s", rd, rs, rt, u2);
9127}
9128
9129
9130/*
9131 *
9132 *
9133 * 3 2 1
9134 * 10987654321098765432109876543210
9135 * 001000 x1110000101
9136 * rt -----
9137 * rs -----
9138 * rd -----
9139 */
9140std::string NMD::LUI(uint64 instruction)
9141{
9142 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9143 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
9144
9145 std::string rt = GPR(copy(rt_value));
9146 std::string s = IMMEDIATE(copy(s_value));
9147
9148 return img::format("LUI %s, %%hi(%s)", rt, s);
9149}
9150
9151
9152/*
9153 *
9154 *
9155 * 3 2 1
9156 * 10987654321098765432109876543210
9157 * 001000 x1110000101
9158 * rt -----
9159 * rs -----
9160 * rd -----
9161 */
9162std::string NMD::LW_16_(uint64 instruction)
9163{
9164 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9165 uint64 rs3_value = extract_rs3_6_5_4(instruction);
9166 uint64 u_value = extract_u_3_2_1_0__s2(instruction);
9167
9168 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
9169 std::string u = IMMEDIATE(copy(u_value));
9170 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
9171
9172 return img::format("LW %s, %s(%s)", rt3, u, rs3);
9173}
9174
9175
9176/*
9177 *
9178 *
9179 * 3 2 1
9180 * 10987654321098765432109876543210
9181 * 001000 x1110000101
9182 * rt -----
9183 * rs -----
9184 * rd -----
9185 */
9186std::string NMD::LW_4X4_(uint64 instruction)
9187{
9188 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
9189 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
9190 uint64 u_value = extract_u_3_8__s2(instruction);
9191
9192 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
9193 std::string u = IMMEDIATE(copy(u_value));
9194 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
9195
9196 return img::format("LW %s, %s(%s)", rt4, u, rs4);
9197}
9198
9199
9200/*
9201 *
9202 *
9203 * 3 2 1
9204 * 10987654321098765432109876543210
9205 * 001000 x1110000101
9206 * rt -----
9207 * rs -----
9208 * rd -----
9209 */
9210std::string NMD::LW_GP_(uint64 instruction)
9211{
9212 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9213 uint64 u_value = extract_u_20_to_2__s2(instruction);
9214
9215 std::string rt = GPR(copy(rt_value));
9216 std::string u = IMMEDIATE(copy(u_value));
9217
9218 return img::format("LW %s, %s($%d)", rt, u, 28);
9219}
9220
9221
9222/*
9223 *
9224 *
9225 * 3 2 1
9226 * 10987654321098765432109876543210
9227 * 001000 x1110000101
9228 * rt -----
9229 * rs -----
9230 * rd -----
9231 */
9232std::string NMD::LW_GP16_(uint64 instruction)
9233{
9234 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9235 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
9236
9237 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
9238 std::string u = IMMEDIATE(copy(u_value));
9239
9240 return img::format("LW %s, %s($%d)", rt3, u, 28);
9241}
9242
9243
9244/*
9245 *
9246 *
9247 * 3 2 1
9248 * 10987654321098765432109876543210
9249 * 001000 x1110000101
9250 * rt -----
9251 * rs -----
9252 * rd -----
9253 */
9254std::string NMD::LW_S9_(uint64 instruction)
9255{
9256 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9257 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9258 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9259
9260 std::string rt = GPR(copy(rt_value));
9261 std::string s = IMMEDIATE(copy(s_value));
9262 std::string rs = GPR(copy(rs_value));
9263
9264 return img::format("LW %s, %s(%s)", rt, s, rs);
9265}
9266
9267
9268/*
9269 *
9270 *
9271 * 3 2 1
9272 * 10987654321098765432109876543210
9273 * 001000 x1110000101
9274 * rt -----
9275 * rs -----
9276 * rd -----
9277 */
9278std::string NMD::LW_SP_(uint64 instruction)
9279{
9280 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
9281 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
9282
9283 std::string rt = GPR(copy(rt_value));
9284 std::string u = IMMEDIATE(copy(u_value));
9285
9286 return img::format("LW %s, %s($%d)", rt, u, 29);
9287}
9288
9289
9290/*
9291 *
9292 *
9293 * 3 2 1
9294 * 10987654321098765432109876543210
9295 * 001000 x1110000101
9296 * rt -----
9297 * rs -----
9298 * rd -----
9299 */
9300std::string NMD::LW_U12_(uint64 instruction)
9301{
9302 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9303 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9304 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9305
9306 std::string rt = GPR(copy(rt_value));
9307 std::string u = IMMEDIATE(copy(u_value));
9308 std::string rs = GPR(copy(rs_value));
9309
9310 return img::format("LW %s, %s(%s)", rt, u, rs);
9311}
9312
9313
9314/*
9315 *
9316 *
9317 * 3 2 1
9318 * 10987654321098765432109876543210
9319 * 001000 x1110000101
9320 * rt -----
9321 * rs -----
9322 * rd -----
9323 */
9324std::string NMD::LWC1_GP_(uint64 instruction)
9325{
9326 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9327 uint64 u_value = extract_u_17_to_2__s2(instruction);
9328
9329 std::string ft = FPR(copy(ft_value));
9330 std::string u = IMMEDIATE(copy(u_value));
9331
9332 return img::format("LWC1 %s, %s($%d)", ft, u, 28);
9333}
9334
9335
9336/*
9337 *
9338 *
9339 * 3 2 1
9340 * 10987654321098765432109876543210
9341 * 001000 x1110000101
9342 * rt -----
9343 * rs -----
9344 * rd -----
9345 */
9346std::string NMD::LWC1_S9_(uint64 instruction)
9347{
9348 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9349 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9350 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9351
9352 std::string ft = FPR(copy(ft_value));
9353 std::string s = IMMEDIATE(copy(s_value));
9354 std::string rs = GPR(copy(rs_value));
9355
9356 return img::format("LWC1 %s, %s(%s)", ft, s, rs);
9357}
9358
9359
9360/*
9361 *
9362 *
9363 * 3 2 1
9364 * 10987654321098765432109876543210
9365 * 001000 x1110000101
9366 * rt -----
9367 * rs -----
9368 * rd -----
9369 */
9370std::string NMD::LWC1_U12_(uint64 instruction)
9371{
9372 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9373 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9374 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9375
9376 std::string ft = FPR(copy(ft_value));
9377 std::string u = IMMEDIATE(copy(u_value));
9378 std::string rs = GPR(copy(rs_value));
9379
9380 return img::format("LWC1 %s, %s(%s)", ft, u, rs);
9381}
9382
9383
9384/*
9385 *
9386 *
9387 * 3 2 1
9388 * 10987654321098765432109876543210
9389 * 001000 x1110000101
9390 * rt -----
9391 * rs -----
9392 * rd -----
9393 */
9394std::string NMD::LWC1X(uint64 instruction)
9395{
9396 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9397 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9398 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
9399
9400 std::string ft = FPR(copy(ft_value));
9401 std::string rs = GPR(copy(rs_value));
9402 std::string rt = GPR(copy(rt_value));
9403
9404 return img::format("LWC1X %s, %s(%s)", ft, rs, rt);
9405}
9406
9407
9408/*
9409 *
9410 *
9411 * 3 2 1
9412 * 10987654321098765432109876543210
9413 * 001000 x1110000101
9414 * rt -----
9415 * rs -----
9416 * rd -----
9417 */
9418std::string NMD::LWC1XS(uint64 instruction)
9419{
9420 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9421 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9422 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
9423
9424 std::string ft = FPR(copy(ft_value));
9425 std::string rs = GPR(copy(rs_value));
9426 std::string rt = GPR(copy(rt_value));
9427
9428 return img::format("LWC1XS %s, %s(%s)", ft, rs, rt);
9429}
9430
9431
9432/*
9433 *
9434 *
9435 * 3 2 1
9436 * 10987654321098765432109876543210
9437 * 001000 x1110000101
9438 * rt -----
9439 * rs -----
9440 * rd -----
9441 */
9442std::string NMD::LWC2(uint64 instruction)
9443{
9444 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
9445 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9446 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9447
9448 std::string ct = CPR(copy(ct_value));
9449 std::string s = IMMEDIATE(copy(s_value));
9450 std::string rs = GPR(copy(rs_value));
9451
9452 return img::format("LWC2 %s, %s(%s)", ct, s, rs);
9453}
9454
9455
9456/*
9457 *
9458 *
9459 * 3 2 1
9460 * 10987654321098765432109876543210
9461 * 001000 x1110000101
9462 * rt -----
9463 * rs -----
9464 * rd -----
9465 */
9466std::string NMD::LWE(uint64 instruction)
9467{
9468 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9469 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9470 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9471
9472 std::string rt = GPR(copy(rt_value));
9473 std::string s = IMMEDIATE(copy(s_value));
9474 std::string rs = GPR(copy(rs_value));
9475
9476 return img::format("LWE %s, %s(%s)", rt, s, rs);
9477}
9478
9479
9480/*
9481 *
9482 *
9483 * 3 2 1
9484 * 10987654321098765432109876543210
9485 * 001000 x1110000101
9486 * rt -----
9487 * rs -----
9488 * rd -----
9489 */
9490std::string NMD::LWM(uint64 instruction)
9491{
9492 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9493 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9494 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9495 uint64 count3_value = extract_count3_14_13_12(instruction);
9496
9497 std::string rt = GPR(copy(rt_value));
9498 std::string s = IMMEDIATE(copy(s_value));
9499 std::string rs = GPR(copy(rs_value));
9500 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
9501
9502 return img::format("LWM %s, %s(%s), %s", rt, s, rs, count3);
9503}
9504
9505
9506/*
9507 *
9508 *
9509 * 3 2 1
9510 * 10987654321098765432109876543210
9511 * 001000 x1110000101
9512 * rt -----
9513 * rs -----
9514 * rd -----
9515 */
9516std::string NMD::LWPC_48_(uint64 instruction)
9517{
9518 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
9519 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
9520
9521 std::string rt = GPR(copy(rt_value));
9522 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
9523
9524 return img::format("LWPC %s, %s", rt, s);
9525}
9526
9527
9528/*
9529 *
9530 *
9531 * 3 2 1
9532 * 10987654321098765432109876543210
9533 * 001000 x1110000101
9534 * rt -----
9535 * rs -----
9536 * rd -----
9537 */
9538std::string NMD::LWU_GP_(uint64 instruction)
9539{
9540 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9541 uint64 u_value = extract_u_17_to_2__s2(instruction);
9542
9543 std::string rt = GPR(copy(rt_value));
9544 std::string u = IMMEDIATE(copy(u_value));
9545
9546 return img::format("LWU %s, %s($%d)", rt, u, 28);
9547}
9548
9549
9550/*
9551 *
9552 *
9553 * 3 2 1
9554 * 10987654321098765432109876543210
9555 * 001000 x1110000101
9556 * rt -----
9557 * rs -----
9558 * rd -----
9559 */
9560std::string NMD::LWU_S9_(uint64 instruction)
9561{
9562 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9563 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9564 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9565
9566 std::string rt = GPR(copy(rt_value));
9567 std::string s = IMMEDIATE(copy(s_value));
9568 std::string rs = GPR(copy(rs_value));
9569
9570 return img::format("LWU %s, %s(%s)", rt, s, rs);
9571}
9572
9573
9574/*
9575 *
9576 *
9577 * 3 2 1
9578 * 10987654321098765432109876543210
9579 * 001000 x1110000101
9580 * rt -----
9581 * rs -----
9582 * rd -----
9583 */
9584std::string NMD::LWU_U12_(uint64 instruction)
9585{
9586 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9587 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9588 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9589
9590 std::string rt = GPR(copy(rt_value));
9591 std::string u = IMMEDIATE(copy(u_value));
9592 std::string rs = GPR(copy(rs_value));
9593
9594 return img::format("LWU %s, %s(%s)", rt, u, rs);
9595}
9596
9597
9598/*
9599 *
9600 *
9601 * 3 2 1
9602 * 10987654321098765432109876543210
9603 * 001000 x1110000101
9604 * rt -----
9605 * rs -----
9606 * rd -----
9607 */
9608std::string NMD::LWUX(uint64 instruction)
9609{
9610 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9611 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9612 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9613
9614 std::string rd = GPR(copy(rd_value));
9615 std::string rs = GPR(copy(rs_value));
9616 std::string rt = GPR(copy(rt_value));
9617
9618 return img::format("LWUX %s, %s(%s)", rd, rs, rt);
9619}
9620
9621
9622/*
9623 *
9624 *
9625 * 3 2 1
9626 * 10987654321098765432109876543210
9627 * 001000 x1110000101
9628 * rt -----
9629 * rs -----
9630 * rd -----
9631 */
9632std::string NMD::LWUXS(uint64 instruction)
9633{
9634 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9635 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9636 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9637
9638 std::string rd = GPR(copy(rd_value));
9639 std::string rs = GPR(copy(rs_value));
9640 std::string rt = GPR(copy(rt_value));
9641
9642 return img::format("LWUXS %s, %s(%s)", rd, rs, rt);
9643}
9644
9645
9646/*
9647 *
9648 *
9649 * 3 2 1
9650 * 10987654321098765432109876543210
9651 * 001000 x1110000101
9652 * rt -----
9653 * rs -----
9654 * rd -----
9655 */
9656std::string NMD::LWX(uint64 instruction)
9657{
9658 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9659 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9660 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9661
9662 std::string rd = GPR(copy(rd_value));
9663 std::string rs = GPR(copy(rs_value));
9664 std::string rt = GPR(copy(rt_value));
9665
9666 return img::format("LWX %s, %s(%s)", rd, rs, rt);
9667}
9668
9669
9670/*
9671 *
9672 *
9673 * 3 2 1
9674 * 10987654321098765432109876543210
9675 * 001000 x1110000101
9676 * rt -----
9677 * rs -----
9678 * rd -----
9679 */
9680std::string NMD::LWXS_16_(uint64 instruction)
9681{
9682 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9683 uint64 rs3_value = extract_rs3_6_5_4(instruction);
9684 uint64 rd3_value = extract_rd3_3_2_1(instruction);
9685
9686 std::string rd3 = GPR(decode_gpr_gpr3(rd3_value));
9687 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
9688 std::string rt3 = IMMEDIATE(decode_gpr_gpr3(rt3_value));
9689
9690 return img::format("LWXS %s, %s(%s)", rd3, rs3, rt3);
9691}
9692
9693
9694/*
9695 *
9696 *
9697 * 3 2 1
9698 * 10987654321098765432109876543210
9699 * 001000 x1110000101
9700 * rt -----
9701 * rs -----
9702 * rd -----
9703 */
9704std::string NMD::LWXS_32_(uint64 instruction)
9705{
9706 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9707 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9708 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9709
9710 std::string rd = GPR(copy(rd_value));
9711 std::string rs = GPR(copy(rs_value));
9712 std::string rt = GPR(copy(rt_value));
9713
9714 return img::format("LWXS %s, %s(%s)", rd, rs, rt);
9715}
9716
9717
9718/*
9719 * [DSP] MADD ac, rs, rt - Multiply two words and add to the specified
9720 * accumulator
9721 *
9722 * 3 2 1
9723 * 10987654321098765432109876543210
9724 * 001000 x1110000101
9725 * rt -----
9726 * rs -----
9727 * rd -----
9728 */
9729std::string NMD::MADD_DSP_(uint64 instruction)
9730{
9731 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9732 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9733 uint64 ac_value = extract_ac_15_14(instruction);
9734
9735 std::string ac = AC(copy(ac_value));
9736 std::string rs = GPR(copy(rs_value));
9737 std::string rt = GPR(copy(rt_value));
9738
9739 return img::format("MADD %s, %s, %s", ac, rs, rt);
9740}
9741
9742
9743/*
9744 *
9745 *
9746 * 3 2 1
9747 * 10987654321098765432109876543210
9748 * 001000 x1110000101
9749 * rt -----
9750 * rs -----
9751 * rd -----
9752 */
9753std::string NMD::MADDF_D(uint64 instruction)
9754{
9755 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9756 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9757 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9758
9759 std::string fd = FPR(copy(fd_value));
9760 std::string fs = FPR(copy(fs_value));
9761 std::string ft = FPR(copy(ft_value));
9762
9763 return img::format("MADDF.D %s, %s, %s", fd, fs, ft);
9764}
9765
9766
9767/*
9768 *
9769 *
9770 * 3 2 1
9771 * 10987654321098765432109876543210
9772 * 001000 x1110000101
9773 * rt -----
9774 * rs -----
9775 * rd -----
9776 */
9777std::string NMD::MADDF_S(uint64 instruction)
9778{
9779 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9780 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9781 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9782
9783 std::string fd = FPR(copy(fd_value));
9784 std::string fs = FPR(copy(fs_value));
9785 std::string ft = FPR(copy(ft_value));
9786
9787 return img::format("MADDF.S %s, %s, %s", fd, fs, ft);
9788}
9789
9790
9791/*
9792 * [DSP] MADDU ac, rs, rt - Multiply two unsigned words and add to the
9793 * specified accumulator
9794 *
9795 * 3 2 1
9796 * 10987654321098765432109876543210
9797 * 001000 x1110000101
9798 * rt -----
9799 * rs -----
9800 * rd -----
9801 */
9802std::string NMD::MADDU_DSP_(uint64 instruction)
9803{
9804 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9805 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9806 uint64 ac_value = extract_ac_15_14(instruction);
9807
9808 std::string ac = AC(copy(ac_value));
9809 std::string rs = GPR(copy(rs_value));
9810 std::string rt = GPR(copy(rt_value));
9811
9812 return img::format("MADDU %s, %s, %s", ac, rs, rt);
9813}
9814
9815
9816/*
9817 * [DSP] MAQ_S.W.PHL ac, rs, rt - Multiply the left-most single vector
9818 * fractional halfword elements with accumulation
9819 *
9820 * 3 2 1
9821 * 10987654321098765432109876543210
9822 * 001000 x1110000101
9823 * rt -----
9824 * rs -----
9825 * rd -----
9826 */
9827std::string NMD::MAQ_S_W_PHL(uint64 instruction)
9828{
9829 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9830 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9831 uint64 ac_value = extract_ac_15_14(instruction);
9832
9833 std::string ac = AC(copy(ac_value));
9834 std::string rs = GPR(copy(rs_value));
9835 std::string rt = GPR(copy(rt_value));
9836
9837 return img::format("MAQ_S.W.PHL %s, %s, %s", ac, rs, rt);
9838}
9839
9840
9841/*
9842 * [DSP] MAQ_S.W.PHR ac, rs, rt - Multiply the right-most single vector
9843 * fractional halfword elements with accumulation
9844 *
9845 * 3 2 1
9846 * 10987654321098765432109876543210
9847 * 001000 x1110000101
9848 * rt -----
9849 * rs -----
9850 * rd -----
9851 */
9852std::string NMD::MAQ_S_W_PHR(uint64 instruction)
9853{
9854 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9855 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9856 uint64 ac_value = extract_ac_15_14(instruction);
9857
9858 std::string ac = AC(copy(ac_value));
9859 std::string rs = GPR(copy(rs_value));
9860 std::string rt = GPR(copy(rt_value));
9861
9862 return img::format("MAQ_S.W.PHR %s, %s, %s", ac, rs, rt);
9863}
9864
9865
9866/*
9867 * [DSP] MAQ_SA.W.PHL ac, rs, rt - Multiply the left-most single vector
9868 * fractional halfword elements with saturating accumulation
9869 *
9870 * 3 2 1
9871 * 10987654321098765432109876543210
9872 * 001000 x1110000101
9873 * rt -----
9874 * rs -----
9875 * rd -----
9876 */
9877std::string NMD::MAQ_SA_W_PHL(uint64 instruction)
9878{
9879 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9880 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9881 uint64 ac_value = extract_ac_15_14(instruction);
9882
9883 std::string ac = AC(copy(ac_value));
9884 std::string rs = GPR(copy(rs_value));
9885 std::string rt = GPR(copy(rt_value));
9886
9887 return img::format("MAQ_SA.W.PHL %s, %s, %s", ac, rs, rt);
9888}
9889
9890
9891/*
9892 * [DSP] MAQ_SA.W.PHR ac, rs, rt - Multiply the right-most single vector
9893 * fractional halfword elements with saturating accumulation
9894 *
9895 * 3 2 1
9896 * 10987654321098765432109876543210
9897 * 001000 x1110000101
9898 * rt -----
9899 * rs -----
9900 * rd -----
9901 */
9902std::string NMD::MAQ_SA_W_PHR(uint64 instruction)
9903{
9904 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9905 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9906 uint64 ac_value = extract_ac_15_14(instruction);
9907
9908 std::string ac = AC(copy(ac_value));
9909 std::string rs = GPR(copy(rs_value));
9910 std::string rt = GPR(copy(rt_value));
9911
9912 return img::format("MAQ_SA.W.PHR %s, %s, %s", ac, rs, rt);
9913}
9914
9915
9916/*
9917 *
9918 *
9919 * 3 2 1
9920 * 10987654321098765432109876543210
9921 * 001000 x1110000101
9922 * rt -----
9923 * rs -----
9924 * rd -----
9925 */
9926std::string NMD::MAX_D(uint64 instruction)
9927{
9928 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9929 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9930 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9931
9932 std::string fd = FPR(copy(fd_value));
9933 std::string fs = FPR(copy(fs_value));
9934 std::string ft = FPR(copy(ft_value));
9935
9936 return img::format("MAX.D %s, %s, %s", fd, fs, ft);
9937}
9938
9939
9940/*
9941 *
9942 *
9943 * 3 2 1
9944 * 10987654321098765432109876543210
9945 * 001000 x1110000101
9946 * rt -----
9947 * rs -----
9948 * rd -----
9949 */
9950std::string NMD::MAX_S(uint64 instruction)
9951{
9952 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9953 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9954 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9955
9956 std::string fd = FPR(copy(fd_value));
9957 std::string fs = FPR(copy(fs_value));
9958 std::string ft = FPR(copy(ft_value));
9959
9960 return img::format("MAX.S %s, %s, %s", fd, fs, ft);
9961}
9962
9963
9964/*
9965 *
9966 *
9967 * 3 2 1
9968 * 10987654321098765432109876543210
9969 * 001000 x1110000101
9970 * rt -----
9971 * rs -----
9972 * rd -----
9973 */
9974std::string NMD::MAXA_D(uint64 instruction)
9975{
9976 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9977 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9978 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9979
9980 std::string fd = FPR(copy(fd_value));
9981 std::string fs = FPR(copy(fs_value));
9982 std::string ft = FPR(copy(ft_value));
9983
9984 return img::format("MAXA.D %s, %s, %s", fd, fs, ft);
9985}
9986
9987
9988/*
9989 *
9990 *
9991 * 3 2 1
9992 * 10987654321098765432109876543210
9993 * 001000 x1110000101
9994 * rt -----
9995 * rs -----
9996 * rd -----
9997 */
9998std::string NMD::MAXA_S(uint64 instruction)
9999{
10000 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10001 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10002 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10003
10004 std::string fd = FPR(copy(fd_value));
10005 std::string fs = FPR(copy(fs_value));
10006 std::string ft = FPR(copy(ft_value));
10007
10008 return img::format("MAXA.S %s, %s, %s", fd, fs, ft);
10009}
10010
10011
10012/*
10013 *
10014 *
10015 * 3 2 1
10016 * 10987654321098765432109876543210
10017 * 001000 x1110000101
10018 * rt -----
10019 * rs -----
10020 * rd -----
10021 */
10022std::string NMD::MFC0(uint64 instruction)
10023{
10024 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10025 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10026 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10027
10028 std::string rt = GPR(copy(rt_value));
10029 std::string c0s = CPR(copy(c0s_value));
10030 std::string sel = IMMEDIATE(copy(sel_value));
10031
10032 return img::format("MFC0 %s, %s, %s", rt, c0s, sel);
10033}
10034
10035
10036/*
10037 *
10038 *
10039 * 3 2 1
10040 * 10987654321098765432109876543210
10041 * 001000 x1110000101
10042 * rt -----
10043 * rs -----
10044 * rd -----
10045 */
10046std::string NMD::MFC1(uint64 instruction)
10047{
10048 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10049 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10050
10051 std::string rt = GPR(copy(rt_value));
10052 std::string fs = FPR(copy(fs_value));
10053
10054 return img::format("MFC1 %s, %s", rt, fs);
10055}
10056
10057
10058/*
10059 *
10060 *
10061 * 3 2 1
10062 * 10987654321098765432109876543210
10063 * 001000 x1110000101
10064 * rt -----
10065 * rs -----
10066 * rd -----
10067 */
10068std::string NMD::MFC2(uint64 instruction)
10069{
10070 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10071 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10072
10073 std::string rt = GPR(copy(rt_value));
10074 std::string cs = CPR(copy(cs_value));
10075
10076 return img::format("MFC2 %s, %s", rt, cs);
10077}
10078
10079
10080/*
10081 *
10082 *
10083 * 3 2 1
10084 * 10987654321098765432109876543210
10085 * 001000 x1110000101
10086 * rt -----
10087 * rs -----
10088 * rd -----
10089 */
10090std::string NMD::MFGC0(uint64 instruction)
10091{
10092 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10093 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10094 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10095
10096 std::string rt = GPR(copy(rt_value));
10097 std::string c0s = CPR(copy(c0s_value));
10098 std::string sel = IMMEDIATE(copy(sel_value));
10099
10100 return img::format("MFGC0 %s, %s, %s", rt, c0s, sel);
10101}
10102
10103
10104/*
10105 *
10106 *
10107 * 3 2 1
10108 * 10987654321098765432109876543210
10109 * 001000 x1110000101
10110 * rt -----
10111 * rs -----
10112 * rd -----
10113 */
10114std::string NMD::MFHC0(uint64 instruction)
10115{
10116 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10117 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10118 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10119
10120 std::string rt = GPR(copy(rt_value));
10121 std::string c0s = CPR(copy(c0s_value));
10122 std::string sel = IMMEDIATE(copy(sel_value));
10123
10124 return img::format("MFHC0 %s, %s, %s", rt, c0s, sel);
10125}
10126
10127
10128/*
10129 *
10130 *
10131 * 3 2 1
10132 * 10987654321098765432109876543210
10133 * 001000 x1110000101
10134 * rt -----
10135 * rs -----
10136 * rd -----
10137 */
10138std::string NMD::MFHC1(uint64 instruction)
10139{
10140 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10141 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10142
10143 std::string rt = GPR(copy(rt_value));
10144 std::string fs = FPR(copy(fs_value));
10145
10146 return img::format("MFHC1 %s, %s", rt, fs);
10147}
10148
10149
10150/*
10151 *
10152 *
10153 * 3 2 1
10154 * 10987654321098765432109876543210
10155 * 001000 x1110000101
10156 * rt -----
10157 * rs -----
10158 * rd -----
10159 */
10160std::string NMD::MFHC2(uint64 instruction)
10161{
10162 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10163 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10164
10165 std::string rt = GPR(copy(rt_value));
10166 std::string cs = CPR(copy(cs_value));
10167
10168 return img::format("MFHC2 %s, %s", rt, cs);
10169}
10170
10171
10172/*
10173 *
10174 *
10175 * 3 2 1
10176 * 10987654321098765432109876543210
10177 * 001000 x1110000101
10178 * rt -----
10179 * rs -----
10180 * rd -----
10181 */
10182std::string NMD::MFHGC0(uint64 instruction)
10183{
10184 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10185 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10186 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10187
10188 std::string rt = GPR(copy(rt_value));
10189 std::string c0s = CPR(copy(c0s_value));
10190 std::string sel = IMMEDIATE(copy(sel_value));
10191
10192 return img::format("MFHGC0 %s, %s, %s", rt, c0s, sel);
10193}
10194
10195
10196/*
10197 * [DSP] MFHI rs, ac - Move from HI register
10198 *
10199 * 3 2 1
10200 * 10987654321098765432109876543210
10201 * 001000 xxxxx 00000001111111
10202 * rt -----
10203 * ac --
10204 */
10205std::string NMD::MFHI_DSP_(uint64 instruction)
10206{
10207 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10208 uint64 ac_value = extract_ac_15_14(instruction);
10209
10210 std::string rt = GPR(copy(rt_value));
10211 std::string ac = AC(copy(ac_value));
10212
10213 return img::format("MFHI %s, %s", rt, ac);
10214}
10215
10216
10217/*
10218 *
10219 *
10220 * 3 2 1
10221 * 10987654321098765432109876543210
10222 * 001000 x1110000101
10223 * rt -----
10224 * rs -----
10225 * rd -----
10226 */
10227std::string NMD::MFHTR(uint64 instruction)
10228{
10229 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10230 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10231 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10232 uint64 u_value = extract_u_10(instruction);
10233
10234 std::string rt = GPR(copy(rt_value));
10235 std::string c0s = IMMEDIATE(copy(c0s_value));
10236 std::string u = IMMEDIATE(copy(u_value));
10237 std::string sel = IMMEDIATE(copy(sel_value));
10238
10239 return img::format("MFHTR %s, %s, %s, %s", rt, c0s, u, sel);
10240}
10241
10242
10243/*
10244 * [DSP] MFLO rs, ac - Move from HI register
10245 *
10246 * 3 2 1
10247 * 10987654321098765432109876543210
10248 * 001000 xxxxx 01000001111111
10249 * rt -----
10250 * ac --
10251 */
10252std::string NMD::MFLO_DSP_(uint64 instruction)
10253{
10254 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10255 uint64 ac_value = extract_ac_15_14(instruction);
10256
10257 std::string rt = GPR(copy(rt_value));
10258 std::string ac = AC(copy(ac_value));
10259
10260 return img::format("MFLO %s, %s", rt, ac);
10261}
10262
10263
10264/*
10265 *
10266 *
10267 * 3 2 1
10268 * 10987654321098765432109876543210
10269 * 001000 x1110000101
10270 * rt -----
10271 * rs -----
10272 * rd -----
10273 */
10274std::string NMD::MFTR(uint64 instruction)
10275{
10276 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10277 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10278 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10279 uint64 u_value = extract_u_10(instruction);
10280
10281 std::string rt = GPR(copy(rt_value));
10282 std::string c0s = IMMEDIATE(copy(c0s_value));
10283 std::string u = IMMEDIATE(copy(u_value));
10284 std::string sel = IMMEDIATE(copy(sel_value));
10285
10286 return img::format("MFTR %s, %s, %s, %s", rt, c0s, u, sel);
10287}
10288
10289
10290/*
10291 *
10292 *
10293 * 3 2 1
10294 * 10987654321098765432109876543210
10295 * 001000 x1110000101
10296 * rt -----
10297 * rs -----
10298 * rd -----
10299 */
10300std::string NMD::MIN_D(uint64 instruction)
10301{
10302 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10303 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10304 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10305
10306 std::string fd = FPR(copy(fd_value));
10307 std::string fs = FPR(copy(fs_value));
10308 std::string ft = FPR(copy(ft_value));
10309
10310 return img::format("MIN.D %s, %s, %s", fd, fs, ft);
10311}
10312
10313
10314/*
10315 *
10316 *
10317 * 3 2 1
10318 * 10987654321098765432109876543210
10319 * 001000 x1110000101
10320 * rt -----
10321 * rs -----
10322 * rd -----
10323 */
10324std::string NMD::MIN_S(uint64 instruction)
10325{
10326 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10327 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10328 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10329
10330 std::string fd = FPR(copy(fd_value));
10331 std::string fs = FPR(copy(fs_value));
10332 std::string ft = FPR(copy(ft_value));
10333
10334 return img::format("MIN.S %s, %s, %s", fd, fs, ft);
10335}
10336
10337
10338/*
10339 *
10340 *
10341 * 3 2 1
10342 * 10987654321098765432109876543210
10343 * 001000 x1110000101
10344 * rt -----
10345 * rs -----
10346 * rd -----
10347 */
10348std::string NMD::MINA_D(uint64 instruction)
10349{
10350 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10351 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10352 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10353
10354 std::string fd = FPR(copy(fd_value));
10355 std::string fs = FPR(copy(fs_value));
10356 std::string ft = FPR(copy(ft_value));
10357
10358 return img::format("MINA.D %s, %s, %s", fd, fs, ft);
10359}
10360
10361
10362/*
10363 *
10364 *
10365 * 3 2 1
10366 * 10987654321098765432109876543210
10367 * 001000 x1110000101
10368 * rt -----
10369 * rs -----
10370 * rd -----
10371 */
10372std::string NMD::MINA_S(uint64 instruction)
10373{
10374 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10375 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10376 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10377
10378 std::string fd = FPR(copy(fd_value));
10379 std::string fs = FPR(copy(fs_value));
10380 std::string ft = FPR(copy(ft_value));
10381
10382 return img::format("MINA.S %s, %s, %s", fd, fs, ft);
10383}
10384
10385
10386/*
10387 *
10388 *
10389 * 3 2 1
10390 * 10987654321098765432109876543210
10391 * 001000 x1110000101
10392 * rt -----
10393 * rs -----
10394 * rd -----
10395 */
10396std::string NMD::MOD(uint64 instruction)
10397{
10398 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10399 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10400 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10401
10402 std::string rd = GPR(copy(rd_value));
10403 std::string rs = GPR(copy(rs_value));
10404 std::string rt = GPR(copy(rt_value));
10405
10406 return img::format("MOD %s, %s, %s", rd, rs, rt);
10407}
10408
10409
10410/*
10411 * [DSP] MODSUB rd, rs, rt - Modular subtraction on an index value
10412 *
10413 * 3 2 1
10414 * 10987654321098765432109876543210
10415 * 001000 x1110000101
10416 * rt -----
10417 * rs -----
10418 * rd -----
10419 */
10420std::string NMD::MODSUB(uint64 instruction)
10421{
10422 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10423 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10424 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10425
10426 std::string rd = GPR(copy(rd_value));
10427 std::string rs = GPR(copy(rs_value));
10428 std::string rt = GPR(copy(rt_value));
10429
10430 return img::format("MODSUB %s, %s, %s", rd, rs, rt);
10431}
10432
10433
10434/*
10435 *
10436 *
10437 * 3 2 1
10438 * 10987654321098765432109876543210
10439 * 001000 x1010010101
10440 * rt -----
10441 * rs -----
10442 * rd -----
10443 */
10444std::string NMD::MODU(uint64 instruction)
10445{
10446 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10447 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10448 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10449
10450 std::string rd = GPR(copy(rd_value));
10451 std::string rs = GPR(copy(rs_value));
10452 std::string rt = GPR(copy(rt_value));
10453
10454 return img::format("MODU %s, %s, %s", rd, rs, rt);
10455}
10456
10457
10458/*
10459 *
10460 *
10461 * 3 2 1
10462 * 10987654321098765432109876543210
10463 * 001000 x1110000101
10464 * rt -----
10465 * rs -----
10466 * rd -----
10467 */
10468std::string NMD::MOV_D(uint64 instruction)
10469{
10470 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10471 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10472
10473 std::string ft = FPR(copy(ft_value));
10474 std::string fs = FPR(copy(fs_value));
10475
10476 return img::format("MOV.D %s, %s", ft, fs);
10477}
10478
10479
10480/*
10481 *
10482 *
10483 * 3 2 1
10484 * 10987654321098765432109876543210
10485 * 001000 x1110000101
10486 * rt -----
10487 * rs -----
10488 * rd -----
10489 */
10490std::string NMD::MOV_S(uint64 instruction)
10491{
10492 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10493 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10494
10495 std::string ft = FPR(copy(ft_value));
10496 std::string fs = FPR(copy(fs_value));
10497
10498 return img::format("MOV.S %s, %s", ft, fs);
10499}
10500
10501
10502/*
10503 *
10504 *
10505 * 3 2 1
10506 * 10987654321098765432109876543210
10507 * 001000 x1110000101
10508 * rt -----
10509 * rs -----
10510 * rd -----
10511 */
10512std::string NMD::MOVE_BALC(uint64 instruction)
10513{
10514 uint64 rtz4_value = extract_rtz4_27_26_25_23_22_21(instruction);
10515 uint64 rd1_value = extract_rdl_25_24(instruction);
10516 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
10517
10518 std::string rd1 = GPR(decode_gpr_gpr1(rd1_value));
10519 std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
10520 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
10521
10522 return img::format("MOVE.BALC %s, %s, %s", rd1, rtz4, s);
10523}
10524
10525
10526/*
10527 *
10528 *
10529 * 3 2 1
10530 * 10987654321098765432109876543210
10531 * 001000 x1110000101
10532 * rt -----
10533 * rs -----
10534 * rd -----
10535 */
10536std::string NMD::MOVEP(uint64 instruction)
10537{
10538 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
10539 uint64 rd2_value = extract_rd2_3_8(instruction);
10540 uint64 rsz4_value = extract_rsz4_4_2_1_0(instruction);
10541
10542 std::string rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value));
10543 std::string re2 = GPR(decode_gpr_gpr2_reg2(rd2_value));
10544 /* !!!!!!!!!! - no conversion function */
10545 std::string rsz4 = GPR(decode_gpr_gpr4_zero(rsz4_value));
10546 std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
10547
10548 return img::format("MOVEP %s, %s, %s, %s", rd2, re2, rsz4, rtz4);
10549 /* hand edited */
10550}
10551
10552
10553/*
10554 *
10555 *
10556 * 3 2 1
10557 * 10987654321098765432109876543210
10558 * 001000 x1110000101
10559 * rt -----
10560 * rs -----
10561 * rd -----
10562 */
10563std::string NMD::MOVEP_REV_(uint64 instruction)
10564{
10565 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
10566 uint64 rd2_value = extract_rd2_3_8(instruction);
10567 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
10568
10569 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
10570 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
10571 std::string rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value));
10572 std::string rs2 = GPR(decode_gpr_gpr2_reg2(rd2_value));
10573 /* !!!!!!!!!! - no conversion function */
10574
10575 return img::format("MOVEP %s, %s, %s, %s", rs4, rt4, rd2, rs2);
10576 /* hand edited */
10577}
10578
10579
10580/*
10581 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10582 *
10583 * 3 2 1
10584 * 10987654321098765432109876543210
10585 * 001000 00010001101
10586 * rt -----
10587 * rs -----
10588 * rd -----
10589 */
10590std::string NMD::MOVE(uint64 instruction)
10591{
10592 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
10593 uint64 rs_value = extract_rs_4_3_2_1_0(instruction);
10594
10595 std::string rt = GPR(copy(rt_value));
10596 std::string rs = GPR(copy(rs_value));
10597
10598 return img::format("MOVE %s, %s", rt, rs);
10599}
10600
10601
10602/*
10603 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10604 *
10605 * 3 2 1
10606 * 10987654321098765432109876543210
10607 * 001000 00010001101
10608 * rt -----
10609 * rs -----
10610 * rd -----
10611 */
10612std::string NMD::MOVN(uint64 instruction)
10613{
10614 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10615 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10616 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10617
10618 std::string rd = GPR(copy(rd_value));
10619 std::string rs = GPR(copy(rs_value));
10620 std::string rt = GPR(copy(rt_value));
10621
10622 return img::format("MOVN %s, %s, %s", rd, rs, rt);
10623}
10624
10625
10626/*
10627 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10628 *
10629 * 3 2 1
10630 * 10987654321098765432109876543210
10631 * 001000 00010001101
10632 * rt -----
10633 * rs -----
10634 * rd -----
10635 */
10636std::string NMD::MOVZ(uint64 instruction)
10637{
10638 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10639 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10640 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10641
10642 std::string rd = GPR(copy(rd_value));
10643 std::string rs = GPR(copy(rs_value));
10644 std::string rt = GPR(copy(rt_value));
10645
10646 return img::format("MOVZ %s, %s, %s", rd, rs, rt);
10647}
10648
10649
10650/*
10651 * [DSP] MSUB ac, rs, rt - Multiply word and subtract from accumulator
10652 *
10653 * 3 2 1
10654 * 10987654321098765432109876543210
10655 * 001000 10101010111111
10656 * rt -----
10657 * rs -----
10658 * ac --
10659 */
10660std::string NMD::MSUB_DSP_(uint64 instruction)
10661{
10662 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10663 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10664 uint64 ac_value = extract_ac_15_14(instruction);
10665
10666 std::string ac = AC(copy(ac_value));
10667 std::string rs = GPR(copy(rs_value));
10668 std::string rt = GPR(copy(rt_value));
10669
10670 return img::format("MSUB %s, %s, %s", ac, rs, rt);
10671}
10672
10673
10674/*
10675 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10676 *
10677 * 3 2 1
10678 * 10987654321098765432109876543210
10679 * 001000 00010001101
10680 * rt -----
10681 * rs -----
10682 * rd -----
10683 */
10684std::string NMD::MSUBF_D(uint64 instruction)
10685{
10686 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10687 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10688 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10689
10690 std::string fd = FPR(copy(fd_value));
10691 std::string fs = FPR(copy(fs_value));
10692 std::string ft = FPR(copy(ft_value));
10693
10694 return img::format("MSUBF.D %s, %s, %s", fd, fs, ft);
10695}
10696
10697
10698/*
10699 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10700 *
10701 * 3 2 1
10702 * 10987654321098765432109876543210
10703 * 001000 00010001101
10704 * rt -----
10705 * rs -----
10706 * rd -----
10707 */
10708std::string NMD::MSUBF_S(uint64 instruction)
10709{
10710 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10711 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10712 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10713
10714 std::string fd = FPR(copy(fd_value));
10715 std::string fs = FPR(copy(fs_value));
10716 std::string ft = FPR(copy(ft_value));
10717
10718 return img::format("MSUBF.S %s, %s, %s", fd, fs, ft);
10719}
10720
10721
10722/*
10723 * [DSP] MSUBU ac, rs, rt - Multiply word and add to accumulator
10724 *
10725 * 3 2 1
10726 * 10987654321098765432109876543210
10727 * 001000 11101010111111
10728 * rt -----
10729 * rs -----
10730 * ac --
10731 */
10732std::string NMD::MSUBU_DSP_(uint64 instruction)
10733{
10734 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10735 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10736 uint64 ac_value = extract_ac_15_14(instruction);
10737
10738 std::string ac = AC(copy(ac_value));
10739 std::string rs = GPR(copy(rs_value));
10740 std::string rt = GPR(copy(rt_value));
10741
10742 return img::format("MSUBU %s, %s, %s", ac, rs, rt);
10743}
10744
10745
10746/*
10747 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10748 *
10749 * 3 2 1
10750 * 10987654321098765432109876543210
10751 * 001000 00010001101
10752 * rt -----
10753 * rs -----
10754 * rd -----
10755 */
10756std::string NMD::MTC0(uint64 instruction)
10757{
10758 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10759 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10760 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10761
10762 std::string rt = GPR(copy(rt_value));
10763 std::string c0s = CPR(copy(c0s_value));
10764 std::string sel = IMMEDIATE(copy(sel_value));
10765
10766 return img::format("MTC0 %s, %s, %s", rt, c0s, sel);
10767}
10768
10769
10770/*
10771 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10772 *
10773 * 3 2 1
10774 * 10987654321098765432109876543210
10775 * 001000 00010001101
10776 * rt -----
10777 * rs -----
10778 * rd -----
10779 */
10780std::string NMD::MTC1(uint64 instruction)
10781{
10782 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10783 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10784
10785 std::string rt = GPR(copy(rt_value));
10786 std::string fs = FPR(copy(fs_value));
10787
10788 return img::format("MTC1 %s, %s", rt, fs);
10789}
10790
10791
10792/*
10793 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10794 *
10795 * 3 2 1
10796 * 10987654321098765432109876543210
10797 * 001000 00010001101
10798 * rt -----
10799 * rs -----
10800 * rd -----
10801 */
10802std::string NMD::MTC2(uint64 instruction)
10803{
10804 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10805 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10806
10807 std::string rt = GPR(copy(rt_value));
10808 std::string cs = CPR(copy(cs_value));
10809
10810 return img::format("MTC2 %s, %s", rt, cs);
10811}
10812
10813
10814/*
10815 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10816 *
10817 * 3 2 1
10818 * 10987654321098765432109876543210
10819 * 001000 00010001101
10820 * rt -----
10821 * rs -----
10822 * rd -----
10823 */
10824std::string NMD::MTGC0(uint64 instruction)
10825{
10826 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10827 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10828 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10829
10830 std::string rt = GPR(copy(rt_value));
10831 std::string c0s = CPR(copy(c0s_value));
10832 std::string sel = IMMEDIATE(copy(sel_value));
10833
10834 return img::format("MTGC0 %s, %s, %s", rt, c0s, sel);
10835}
10836
10837
10838/*
10839 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10840 *
10841 * 3 2 1
10842 * 10987654321098765432109876543210
10843 * 001000 00010001101
10844 * rt -----
10845 * rs -----
10846 * rd -----
10847 */
10848std::string NMD::MTHC0(uint64 instruction)
10849{
10850 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10851 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10852 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10853
10854 std::string rt = GPR(copy(rt_value));
10855 std::string c0s = CPR(copy(c0s_value));
10856 std::string sel = IMMEDIATE(copy(sel_value));
10857
10858 return img::format("MTHC0 %s, %s, %s", rt, c0s, sel);
10859}
10860
10861
10862/*
10863 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10864 *
10865 * 3 2 1
10866 * 10987654321098765432109876543210
10867 * 001000 00010001101
10868 * rt -----
10869 * rs -----
10870 * rd -----
10871 */
10872std::string NMD::MTHC1(uint64 instruction)
10873{
10874 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10875 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10876
10877 std::string rt = GPR(copy(rt_value));
10878 std::string fs = FPR(copy(fs_value));
10879
10880 return img::format("MTHC1 %s, %s", rt, fs);
10881}
10882
10883
10884/*
10885 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10886 *
10887 * 3 2 1
10888 * 10987654321098765432109876543210
10889 * 001000 00010001101
10890 * rt -----
10891 * rs -----
10892 * rd -----
10893 */
10894std::string NMD::MTHC2(uint64 instruction)
10895{
10896 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10897 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10898
10899 std::string rt = GPR(copy(rt_value));
10900 std::string cs = CPR(copy(cs_value));
10901
10902 return img::format("MTHC2 %s, %s", rt, cs);
10903}
10904
10905
10906/*
10907 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10908 *
10909 * 3 2 1
10910 * 10987654321098765432109876543210
10911 * 001000 00010001101
10912 * rt -----
10913 * rs -----
10914 * rd -----
10915 */
10916std::string NMD::MTHGC0(uint64 instruction)
10917{
10918 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10919 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10920 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10921
10922 std::string rt = GPR(copy(rt_value));
10923 std::string c0s = CPR(copy(c0s_value));
10924 std::string sel = IMMEDIATE(copy(sel_value));
10925
10926 return img::format("MTHGC0 %s, %s, %s", rt, c0s, sel);
10927}
10928
10929
10930/*
10931 * [DSP] MTHI rs, ac - Move to HI register
10932 *
10933 * 3 2 1
10934 * 10987654321098765432109876543210
10935 * 001000xxxxx 10000001111111
10936 * rs -----
10937 * ac --
10938 */
10939std::string NMD::MTHI_DSP_(uint64 instruction)
10940{
10941 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10942 uint64 ac_value = extract_ac_15_14(instruction);
10943
10944 std::string rs = GPR(copy(rs_value));
10945 std::string ac = AC(copy(ac_value));
10946
10947 return img::format("MTHI %s, %s", rs, ac);
10948}
10949
10950
10951/*
10952 * [DSP] MTHLIP rs, ac - Copy LO to HI and a GPR to LO and increment pos by 32
10953 *
10954 * 3 2 1
10955 * 10987654321098765432109876543210
10956 * 001000xxxxx 00001001111111
10957 * rs -----
10958 * ac --
10959 */
10960std::string NMD::MTHLIP(uint64 instruction)
10961{
10962 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10963 uint64 ac_value = extract_ac_15_14(instruction);
10964
10965 std::string rs = GPR(copy(rs_value));
10966 std::string ac = AC(copy(ac_value));
10967
10968 return img::format("MTHLIP %s, %s", rs, ac);
10969}
10970
10971
10972/*
10973 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10974 *
10975 * 3 2 1
10976 * 10987654321098765432109876543210
10977 * 001000 00010001101
10978 * rt -----
10979 * rs -----
10980 * rd -----
10981 */
10982std::string NMD::MTHTR(uint64 instruction)
10983{
10984 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10985 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10986 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10987 uint64 u_value = extract_u_10(instruction);
10988
10989 std::string rt = GPR(copy(rt_value));
10990 std::string c0s = IMMEDIATE(copy(c0s_value));
10991 std::string u = IMMEDIATE(copy(u_value));
10992 std::string sel = IMMEDIATE(copy(sel_value));
10993
10994 return img::format("MTHTR %s, %s, %s, %s", rt, c0s, u, sel);
10995}
10996
10997
10998/*
10999 * [DSP] MTLO rs, ac - Move to LO register
11000 *
11001 * 3 2 1
11002 * 10987654321098765432109876543210
11003 * 001000xxxxx 11000001111111
11004 * rs -----
11005 * ac --
11006 */
11007std::string NMD::MTLO_DSP_(uint64 instruction)
11008{
11009 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11010 uint64 ac_value = extract_ac_15_14(instruction);
11011
11012 std::string rs = GPR(copy(rs_value));
11013 std::string ac = AC(copy(ac_value));
11014
11015 return img::format("MTLO %s, %s", rs, ac);
11016}
11017
11018
11019/*
11020 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11021 *
11022 * 3 2 1
11023 * 10987654321098765432109876543210
11024 * 001000 00010001101
11025 * rt -----
11026 * rs -----
11027 * rd -----
11028 */
11029std::string NMD::MTTR(uint64 instruction)
11030{
11031 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11032 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
11033 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
11034 uint64 u_value = extract_u_10(instruction);
11035
11036 std::string rt = GPR(copy(rt_value));
11037 std::string c0s = IMMEDIATE(copy(c0s_value));
11038 std::string u = IMMEDIATE(copy(u_value));
11039 std::string sel = IMMEDIATE(copy(sel_value));
11040
11041 return img::format("MTTR %s, %s, %s, %s", rt, c0s, u, sel);
11042}
11043
11044
11045/*
11046 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11047 *
11048 * 3 2 1
11049 * 10987654321098765432109876543210
11050 * 001000 00010001101
11051 * rt -----
11052 * rs -----
11053 * rd -----
11054 */
11055std::string NMD::MUH(uint64 instruction)
11056{
11057 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11058 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11059 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11060
11061 std::string rd = GPR(copy(rd_value));
11062 std::string rs = GPR(copy(rs_value));
11063 std::string rt = GPR(copy(rt_value));
11064
11065 return img::format("MUH %s, %s, %s", rd, rs, rt);
11066}
11067
11068
11069/*
11070 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11071 *
11072 * 3 2 1
11073 * 10987654321098765432109876543210
11074 * 001000 00010001101
11075 * rt -----
11076 * rs -----
11077 * rd -----
11078 */
11079std::string NMD::MUHU(uint64 instruction)
11080{
11081 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11082 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11083 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11084
11085 std::string rd = GPR(copy(rd_value));
11086 std::string rs = GPR(copy(rs_value));
11087 std::string rt = GPR(copy(rt_value));
11088
11089 return img::format("MUHU %s, %s, %s", rd, rs, rt);
11090}
11091
11092
11093/*
11094 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11095 *
11096 * 3 2 1
11097 * 10987654321098765432109876543210
11098 * 001000 00010001101
11099 * rt -----
11100 * rs -----
11101 * rd -----
11102 */
11103std::string NMD::MUL_32_(uint64 instruction)
11104{
11105 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11106 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11107 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11108
11109 std::string rd = GPR(copy(rd_value));
11110 std::string rs = GPR(copy(rs_value));
11111 std::string rt = GPR(copy(rt_value));
11112
11113 return img::format("MUL %s, %s, %s", rd, rs, rt);
11114}
11115
11116
11117/*
11118 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11119 *
11120 * 3 2 1
11121 * 10987654321098765432109876543210
11122 * 001000 00010001101
11123 * rt -----
11124 * rs -----
11125 * rd -----
11126 */
11127std::string NMD::MUL_4X4_(uint64 instruction)
11128{
11129 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
11130 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
11131
11132 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
11133 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
11134
11135 return img::format("MUL %s, %s", rs4, rt4);
11136}
11137
11138
11139/*
11140 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11141 *
11142 * 3 2 1
11143 * 10987654321098765432109876543210
11144 * 001000 00010001101
11145 * rt -----
11146 * rs -----
11147 * rd -----
11148 */
11149std::string NMD::MUL_D(uint64 instruction)
11150{
11151 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11152 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11153 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
11154
11155 std::string fd = FPR(copy(fd_value));
11156 std::string fs = FPR(copy(fs_value));
11157 std::string ft = FPR(copy(ft_value));
11158
11159 return img::format("MUL.D %s, %s, %s", fd, fs, ft);
11160}
11161
11162
11163/*
11164 * [DSP] MUL.PH rd, rs, rt - Multiply vector integer half words to same size
11165 * products
11166 *
11167 * 3 2 1
11168 * 10987654321098765432109876543210
11169 * 001000 00000101101
11170 * rt -----
11171 * rs -----
11172 * rd -----
11173 */
11174std::string NMD::MUL_PH(uint64 instruction)
11175{
11176 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11177 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11178 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11179
11180 std::string rd = GPR(copy(rd_value));
11181 std::string rs = GPR(copy(rs_value));
11182 std::string rt = GPR(copy(rt_value));
11183
11184 return img::format("MUL.PH %s, %s, %s", rd, rs, rt);
11185}
11186
11187
11188/*
11189 * [DSP] MUL_S.PH rd, rs, rt - Multiply vector integer half words to same size
11190 * products (saturated)
11191 *
11192 * 3 2 1
11193 * 10987654321098765432109876543210
11194 * 001000 10000101101
11195 * rt -----
11196 * rs -----
11197 * rd -----
11198 */
11199std::string NMD::MUL_S_PH(uint64 instruction)
11200{
11201 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11202 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11203 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11204
11205 std::string rd = GPR(copy(rd_value));
11206 std::string rs = GPR(copy(rs_value));
11207 std::string rt = GPR(copy(rt_value));
11208
11209 return img::format("MUL_S.PH %s, %s, %s", rd, rs, rt);
11210}
11211
11212
11213/*
11214 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11215 *
11216 * 3 2 1
11217 * 10987654321098765432109876543210
11218 * 001000 00010001101
11219 * rt -----
11220 * rs -----
11221 * rd -----
11222 */
11223std::string NMD::MUL_S(uint64 instruction)
11224{
11225 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11226 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11227 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
11228
11229 std::string fd = FPR(copy(fd_value));
11230 std::string fs = FPR(copy(fs_value));
11231 std::string ft = FPR(copy(ft_value));
11232
11233 return img::format("MUL.S %s, %s, %s", fd, fs, ft);
11234}
11235
11236
11237/*
11238 * [DSP] MULEQ_S.W.PHL rd, rs, rt - Multiply vector fractional left halfwords
11239 * to expanded width products
11240 *
11241 * 3 2 1
11242 * 10987654321098765432109876543210
11243 * 001000 x0000100101
11244 * rt -----
11245 * rs -----
11246 * rd -----
11247 */
11248std::string NMD::MULEQ_S_W_PHL(uint64 instruction)
11249{
11250 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11251 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11252 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11253
11254 std::string rd = GPR(copy(rd_value));
11255 std::string rs = GPR(copy(rs_value));
11256 std::string rt = GPR(copy(rt_value));
11257
11258 return img::format("MULEQ_S.W.PHL %s, %s, %s", rd, rs, rt);
11259}
11260
11261
11262/*
11263 * [DSP] MULEQ_S.W.PHR rd, rs, rt - Multiply vector fractional right halfwords
11264 * to expanded width products
11265 *
11266 * 3 2 1
11267 * 10987654321098765432109876543210
11268 * 001000 x0001100101
11269 * rt -----
11270 * rs -----
11271 * rd -----
11272 */
11273std::string NMD::MULEQ_S_W_PHR(uint64 instruction)
11274{
11275 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11276 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11277 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11278
11279 std::string rd = GPR(copy(rd_value));
11280 std::string rs = GPR(copy(rs_value));
11281 std::string rt = GPR(copy(rt_value));
11282
11283 return img::format("MULEQ_S.W.PHR %s, %s, %s", rd, rs, rt);
11284}
11285
11286
11287/*
11288 * [DSP] MULEU_S.PH.QBL rd, rs, rt - Multiply vector fractional left bytes
11289 * by halfwords to halfword products
11290 *
11291 * 3 2 1
11292 * 10987654321098765432109876543210
11293 * 001000 x0010010101
11294 * rt -----
11295 * rs -----
11296 * rd -----
11297 */
11298std::string NMD::MULEU_S_PH_QBL(uint64 instruction)
11299{
11300 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11301 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11302 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11303
11304 std::string rd = GPR(copy(rd_value));
11305 std::string rs = GPR(copy(rs_value));
11306 std::string rt = GPR(copy(rt_value));
11307
11308 return img::format("MULEU_S.PH.QBL %s, %s, %s", rd, rs, rt);
11309}
11310
11311
11312/*
11313 * [DSP] MULEU_S.PH.QBR rd, rs, rt - Multiply vector fractional right bytes
11314 * by halfwords to halfword products
11315 *
11316 * 3 2 1
11317 * 10987654321098765432109876543210
11318 * 001000 x0011010101
11319 * rt -----
11320 * rs -----
11321 * rd -----
11322 */
11323std::string NMD::MULEU_S_PH_QBR(uint64 instruction)
11324{
11325 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11326 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11327 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11328
11329 std::string rd = GPR(copy(rd_value));
11330 std::string rs = GPR(copy(rs_value));
11331 std::string rt = GPR(copy(rt_value));
11332
11333 return img::format("MULEU_S.PH.QBR %s, %s, %s", rd, rs, rt);
11334}
11335
11336
11337/*
11338 * [DSP] MULQ_RS.PH rd, rs, rt - Multiply vector fractional halfwords
11339 * to fractional halfword products
11340 *
11341 * 3 2 1
11342 * 10987654321098765432109876543210
11343 * 001000 x0100010101
11344 * rt -----
11345 * rs -----
11346 * rd -----
11347 */
11348std::string NMD::MULQ_RS_PH(uint64 instruction)
11349{
11350 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11351 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11352 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11353
11354 std::string rd = GPR(copy(rd_value));
11355 std::string rs = GPR(copy(rs_value));
11356 std::string rt = GPR(copy(rt_value));
11357
11358 return img::format("MULQ_RS.PH %s, %s, %s", rd, rs, rt);
11359}
11360
11361
11362/*
11363 * [DSP] MULQ_RS.W rd, rs, rt - Multiply fractional words to same size
11364 * product with saturation and rounding
11365 *
11366 * 3 2 1
11367 * 10987654321098765432109876543210
11368 * 001000 x0110010101
11369 * rt -----
11370 * rs -----
11371 * rd -----
11372 */
11373std::string NMD::MULQ_RS_W(uint64 instruction)
11374{
11375 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11376 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11377 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11378
11379 std::string rd = GPR(copy(rd_value));
11380 std::string rs = GPR(copy(rs_value));
11381 std::string rt = GPR(copy(rt_value));
11382
11383 return img::format("MULQ_RS.W %s, %s, %s", rd, rs, rt);
11384}
11385
11386
11387/*
11388 * [DSP] MULQ_S.PH rd, rs, rt - Multiply fractional halfwords to same size
11389 * products
11390 *
11391 * 3 2 1
11392 * 10987654321098765432109876543210
11393 * 001000 x0101010101
11394 * rt -----
11395 * rs -----
11396 * rd -----
11397 */
11398std::string NMD::MULQ_S_PH(uint64 instruction)
11399{
11400 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11401 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11402 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11403
11404 std::string rd = GPR(copy(rd_value));
11405 std::string rs = GPR(copy(rs_value));
11406 std::string rt = GPR(copy(rt_value));
11407
11408 return img::format("MULQ_S.PH %s, %s, %s", rd, rs, rt);
11409}
11410
11411
11412/*
11413 * [DSP] MULQ_S.W rd, rs, rt - Multiply fractional words to same size product
11414 * with saturation
11415 *
11416 * 3 2 1
11417 * 10987654321098765432109876543210
11418 * 001000 x0111010101
11419 * rt -----
11420 * rs -----
11421 * rd -----
11422 */
11423std::string NMD::MULQ_S_W(uint64 instruction)
11424{
11425 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11426 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11427 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11428
11429 std::string rd = GPR(copy(rd_value));
11430 std::string rs = GPR(copy(rs_value));
11431 std::string rt = GPR(copy(rt_value));
11432
11433 return img::format("MULQ_S.W %s, %s, %s", rd, rs, rt);
11434}
11435
11436
11437/*
11438 * [DSP] MULSA.W.PH ac, rs, rt - Multiply and subtract vector integer halfword
11439 * elements and accumulate
11440 *
11441 * 3 2 1
11442 * 10987654321098765432109876543210
11443 * 001000 10110010111111
11444 * rt -----
11445 * rs -----
11446 * ac --
11447 */
11448std::string NMD::MULSA_W_PH(uint64 instruction)
11449{
11450 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11451 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11452 uint64 ac_value = extract_ac_15_14(instruction);
11453
11454 std::string ac = AC(copy(ac_value));
11455 std::string rs = GPR(copy(rs_value));
11456 std::string rt = GPR(copy(rt_value));
11457
11458 return img::format("MULSA.W.PH %s, %s, %s", ac, rs, rt);
11459}
11460
11461
11462/*
11463 * [DSP] MULSAQ_S.W.PH ac, rs, rt - Multiply and subtract vector fractional
11464 * halfwords and accumulate
11465 *
11466 * 3 2 1
11467 * 10987654321098765432109876543210
11468 * 001000 11110010111111
11469 * rt -----
11470 * rs -----
11471 * ac --
11472 */
11473std::string NMD::MULSAQ_S_W_PH(uint64 instruction)
11474{
11475 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11476 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11477 uint64 ac_value = extract_ac_15_14(instruction);
11478
11479 std::string ac = AC(copy(ac_value));
11480 std::string rs = GPR(copy(rs_value));
11481 std::string rt = GPR(copy(rt_value));
11482
11483 return img::format("MULSAQ_S.W.PH %s, %s, %s", ac, rs, rt);
11484}
11485
11486
11487/*
11488 * [DSP] MULT ac, rs, rt - Multiply word
11489 *
11490 * 3 2 1
11491 * 10987654321098765432109876543210
11492 * 001000 00110010111111
11493 * rt -----
11494 * rs -----
11495 * ac --
11496 */
11497std::string NMD::MULT_DSP_(uint64 instruction)
11498{
11499 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11500 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11501 uint64 ac_value = extract_ac_15_14(instruction);
11502
11503 std::string ac = AC(copy(ac_value));
11504 std::string rs = GPR(copy(rs_value));
11505 std::string rt = GPR(copy(rt_value));
11506
11507 return img::format("MULT %s, %s, %s", ac, rs, rt);
11508}
11509
11510
11511/*
11512 * [DSP] MULTU ac, rs, rt - Multiply unsigned word
11513 *
11514 * 3 2 1
11515 * 10987654321098765432109876543210
11516 * 001000 01110010111111
11517 * rt -----
11518 * rs -----
11519 * ac --
11520 */
11521std::string NMD::MULTU_DSP_(uint64 instruction)
11522{
11523 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11524 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11525 uint64 ac_value = extract_ac_15_14(instruction);
11526
11527 std::string ac = AC(copy(ac_value));
11528 std::string rs = GPR(copy(rs_value));
11529 std::string rt = GPR(copy(rt_value));
11530
11531 return img::format("MULTU %s, %s, %s", ac, rs, rt);
11532}
11533
11534
11535/*
11536 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11537 *
11538 * 3 2 1
11539 * 10987654321098765432109876543210
11540 * 001000 00010001101
11541 * rt -----
11542 * rs -----
11543 * rd -----
11544 */
11545std::string NMD::MULU(uint64 instruction)
11546{
11547 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11548 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11549 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11550
11551 std::string rd = GPR(copy(rd_value));
11552 std::string rs = GPR(copy(rs_value));
11553 std::string rt = GPR(copy(rt_value));
11554
11555 return img::format("MULU %s, %s, %s", rd, rs, rt);
11556}
11557
11558
11559/*
11560 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11561 *
11562 * 3 2 1
11563 * 10987654321098765432109876543210
11564 * 001000 00010001101
11565 * rt -----
11566 * rs -----
11567 * rd -----
11568 */
11569std::string NMD::NEG_D(uint64 instruction)
11570{
11571 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11572 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11573
11574 std::string ft = FPR(copy(ft_value));
11575 std::string fs = FPR(copy(fs_value));
11576
11577 return img::format("NEG.D %s, %s", ft, fs);
11578}
11579
11580
11581/*
11582 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11583 *
11584 * 3 2 1
11585 * 10987654321098765432109876543210
11586 * 001000 00010001101
11587 * rt -----
11588 * rs -----
11589 * rd -----
11590 */
11591std::string NMD::NEG_S(uint64 instruction)
11592{
11593 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11594 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11595
11596 std::string ft = FPR(copy(ft_value));
11597 std::string fs = FPR(copy(fs_value));
11598
11599 return img::format("NEG.S %s, %s", ft, fs);
11600}
11601
11602
11603/*
11604 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11605 *
11606 * 3 2 1
11607 * 10987654321098765432109876543210
11608 * 001000 00010001101
11609 * rt -----
11610 * rs -----
11611 * rd -----
11612 */
11613std::string NMD::NOP_16_(uint64 instruction)
11614{
11615 (void)instruction;
11616
11617 return "NOP ";
11618}
11619
11620
11621/*
11622 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11623 *
11624 * 3 2 1
11625 * 10987654321098765432109876543210
11626 * 001000 00010001101
11627 * rt -----
11628 * rs -----
11629 * rd -----
11630 */
11631std::string NMD::NOP_32_(uint64 instruction)
11632{
11633 (void)instruction;
11634
11635 return "NOP ";
11636}
11637
11638
11639/*
11640 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11641 *
11642 * 3 2 1
11643 * 10987654321098765432109876543210
11644 * 001000 00010001101
11645 * rt -----
11646 * rs -----
11647 * rd -----
11648 */
11649std::string NMD::NOR(uint64 instruction)
11650{
11651 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11652 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11653 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11654
11655 std::string rd = GPR(copy(rd_value));
11656 std::string rs = GPR(copy(rs_value));
11657 std::string rt = GPR(copy(rt_value));
11658
11659 return img::format("NOR %s, %s, %s", rd, rs, rt);
11660}
11661
11662
11663/*
11664 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11665 *
11666 * 3 2 1
11667 * 10987654321098765432109876543210
11668 * 001000 00010001101
11669 * rt -----
11670 * rs -----
11671 * rd -----
11672 */
11673std::string NMD::NOT_16_(uint64 instruction)
11674{
11675 uint64 rt3_value = extract_rt3_9_8_7(instruction);
11676 uint64 rs3_value = extract_rs3_6_5_4(instruction);
11677
11678 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
11679 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
11680
11681 return img::format("NOT %s, %s", rt3, rs3);
11682}
11683
11684
11685/*
11686 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11687 *
11688 * 3 2 1
11689 * 10987654321098765432109876543210
11690 * 001000 00010001101
11691 * rt -----
11692 * rs -----
11693 * rd -----
11694 */
11695std::string NMD::OR_16_(uint64 instruction)
11696{
11697 uint64 rt3_value = extract_rt3_9_8_7(instruction);
11698 uint64 rs3_value = extract_rs3_6_5_4(instruction);
11699
11700 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
11701 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
11702
11703 return img::format("OR %s, %s", rs3, rt3);
11704}
11705
11706
11707/*
11708 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11709 *
11710 * 3 2 1
11711 * 10987654321098765432109876543210
11712 * 001000 00010001101
11713 * rt -----
11714 * rs -----
11715 * rd -----
11716 */
11717std::string NMD::OR_32_(uint64 instruction)
11718{
11719 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11720 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11721 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11722
11723 std::string rd = GPR(copy(rd_value));
11724 std::string rs = GPR(copy(rs_value));
11725 std::string rt = GPR(copy(rt_value));
11726
11727 return img::format("OR %s, %s, %s", rd, rs, rt);
11728}
11729
11730
11731/*
11732 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11733 *
11734 * 3 2 1
11735 * 10987654321098765432109876543210
11736 * 001000 00010001101
11737 * rt -----
11738 * rs -----
11739 * rd -----
11740 */
11741std::string NMD::ORI(uint64 instruction)
11742{
11743 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11744 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11745 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
11746
11747 std::string rt = GPR(copy(rt_value));
11748 std::string rs = GPR(copy(rs_value));
11749 std::string u = IMMEDIATE(copy(u_value));
11750
11751 return img::format("ORI %s, %s, %s", rt, rs, u);
11752}
11753
11754
11755/*
11756 * [DSP] PACKRL.PH rd, rs, rt - Pack a word using the right halfword from one
11757 * source register and left halfword from another source register
11758 *
11759 * 3 2 1
11760 * 10987654321098765432109876543210
11761 * 001000 00010001101
11762 * rt -----
11763 * rs -----
11764 * rd -----
11765 */
11766std::string NMD::PACKRL_PH(uint64 instruction)
11767{
11768 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11769 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11770 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11771
11772 std::string rd = GPR(copy(rd_value));
11773 std::string rs = GPR(copy(rs_value));
11774 std::string rt = GPR(copy(rt_value));
11775
11776 return img::format("PACKRL.PH %s, %s, %s", rd, rs, rt);
11777}
11778
11779
11780/*
11781 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11782 *
11783 * 3 2 1
11784 * 10987654321098765432109876543210
11785 * 001000 00010001101
11786 * rt -----
11787 * rs -----
11788 * rd -----
11789 */
11790std::string NMD::PAUSE(uint64 instruction)
11791{
11792 (void)instruction;
11793
11794 return "PAUSE ";
11795}
11796
11797
11798/*
11799 * [DSP] PICK.PH rd, rs, rt - Pick a vector of halfwords based on condition
11800 * code bits
11801 *
11802 * 3 2 1
11803 * 10987654321098765432109876543210
11804 * 001000 00010001101
11805 * rt -----
11806 * rs -----
11807 * rd -----
11808 */
11809std::string NMD::PICK_PH(uint64 instruction)
11810{
11811 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11812 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11813 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11814
11815 std::string rd = GPR(copy(rd_value));
11816 std::string rs = GPR(copy(rs_value));
11817 std::string rt = GPR(copy(rt_value));
11818
11819 return img::format("PICK.PH %s, %s, %s", rd, rs, rt);
11820}
11821
11822
11823/*
11824 * [DSP] PICK.QB rd, rs, rt - Pick a vector of byte values based on condition
11825 * code bits
11826 *
11827 * 3 2 1
11828 * 10987654321098765432109876543210
11829 * 001000 00010001101
11830 * rt -----
11831 * rs -----
11832 * rd -----
11833 */
11834std::string NMD::PICK_QB(uint64 instruction)
11835{
11836 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11837 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11838 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11839
11840 std::string rd = GPR(copy(rd_value));
11841 std::string rs = GPR(copy(rs_value));
11842 std::string rt = GPR(copy(rt_value));
11843
11844 return img::format("PICK.QB %s, %s, %s", rd, rs, rt);
11845}
11846
11847
11848/*
11849 * [DSP] PRECEQ.W.PHL rt, rs - Expand the precision of the left-most element
11850 * of a paired halfword
11851 *
11852 * 3 2 1
11853 * 10987654321098765432109876543210
11854 * 001000 00010001101
11855 * rt -----
11856 * rs -----
11857 * rd -----
11858 */
11859std::string NMD::PRECEQ_W_PHL(uint64 instruction)
11860{
11861 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11862 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11863
11864 std::string rt = GPR(copy(rt_value));
11865 std::string rs = GPR(copy(rs_value));
11866
11867 return img::format("PRECEQ.W.PHL %s, %s", rt, rs);
11868}
11869
11870
11871/*
11872 * [DSP] PRECEQ.W.PHR rt, rs - Expand the precision of the right-most element
11873 * of a paired halfword
11874 *
11875 * 3 2 1
11876 * 10987654321098765432109876543210
11877 * 001000 00010001101
11878 * rt -----
11879 * rs -----
11880 * rd -----
11881 */
11882std::string NMD::PRECEQ_W_PHR(uint64 instruction)
11883{
11884 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11885 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11886
11887 std::string rt = GPR(copy(rt_value));
11888 std::string rs = GPR(copy(rs_value));
11889
11890 return img::format("PRECEQ.W.PHR %s, %s", rt, rs);
11891}
11892
11893
11894/*
11895 * [DSP] PRECEQU.PH.QBLA rt, rs - Expand the precision of the two
11896 * left-alternate elements of a quad byte vector
11897 *
11898 * 3 2 1
11899 * 10987654321098765432109876543210
11900 * 001000 00010001101
11901 * rt -----
11902 * rs -----
11903 * rd -----
11904 */
11905std::string NMD::PRECEQU_PH_QBLA(uint64 instruction)
11906{
11907 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11908 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11909
11910 std::string rt = GPR(copy(rt_value));
11911 std::string rs = GPR(copy(rs_value));
11912
11913 return img::format("PRECEQU.PH.QBLA %s, %s", rt, rs);
11914}
11915
11916
11917/*
11918 * [DSP] PRECEQU.PH.QBL rt, rs - Expand the precision of the two left-most
11919 * elements of a quad byte vector
11920 *
11921 * 3 2 1
11922 * 10987654321098765432109876543210
11923 * 001000 00010001101
11924 * rt -----
11925 * rs -----
11926 * rd -----
11927 */
11928std::string NMD::PRECEQU_PH_QBL(uint64 instruction)
11929{
11930 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11931 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11932
11933 std::string rt = GPR(copy(rt_value));
11934 std::string rs = GPR(copy(rs_value));
11935
11936 return img::format("PRECEQU.PH.QBL %s, %s", rt, rs);
11937}
11938
11939
11940/*
11941 * [DSP] PRECEQU.PH.QBRA rt, rs - Expand the precision of the two
11942 * right-alternate elements of a quad byte vector
11943 *
11944 * 3 2 1
11945 * 10987654321098765432109876543210
11946 * 001000 00010001101
11947 * rt -----
11948 * rs -----
11949 * rd -----
11950 */
11951std::string NMD::PRECEQU_PH_QBRA(uint64 instruction)
11952{
11953 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11954 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11955
11956 std::string rt = GPR(copy(rt_value));
11957 std::string rs = GPR(copy(rs_value));
11958
11959 return img::format("PRECEQU.PH.QBRA %s, %s", rt, rs);
11960}
11961
11962
11963/*
11964 * [DSP] PRECEQU.PH.QBR rt, rs - Expand the precision of the two right-most
11965 * elements of a quad byte vector
11966 *
11967 * 3 2 1
11968 * 10987654321098765432109876543210
11969 * 001000 00010001101
11970 * rt -----
11971 * rs -----
11972 * rd -----
11973 */
11974std::string NMD::PRECEQU_PH_QBR(uint64 instruction)
11975{
11976 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11977 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11978
11979 std::string rt = GPR(copy(rt_value));
11980 std::string rs = GPR(copy(rs_value));
11981
11982 return img::format("PRECEQU.PH.QBR %s, %s", rt, rs);
11983}
11984
11985
11986/*
11987 * [DSP] PRECEU.PH.QBLA rt, rs - Expand the precision of the two
11988 * left-alternate elements of a quad byte vector to four unsigned
11989 * halfwords
11990 *
11991 * 3 2 1
11992 * 10987654321098765432109876543210
11993 * 001000 00010001101
11994 * rt -----
11995 * rs -----
11996 * rd -----
11997 */
11998std::string NMD::PRECEU_PH_QBLA(uint64 instruction)
11999{
12000 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12001 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12002
12003 std::string rt = GPR(copy(rt_value));
12004 std::string rs = GPR(copy(rs_value));
12005
12006 return img::format("PRECEU.PH.QBLA %s, %s", rt, rs);
12007}
12008
12009
12010/*
12011 * [DSP] PRECEU.PH.QBL rt, rs - Expand the precision of the two left-most
12012 * elements of a quad byte vector to form unsigned halfwords
12013 *
12014 * 3 2 1
12015 * 10987654321098765432109876543210
12016 * 001000 00010001101
12017 * rt -----
12018 * rs -----
12019 * rd -----
12020 */
12021std::string NMD::PRECEU_PH_QBL(uint64 instruction)
12022{
12023 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12024 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12025
12026 std::string rt = GPR(copy(rt_value));
12027 std::string rs = GPR(copy(rs_value));
12028
12029 return img::format("PRECEU.PH.QBL %s, %s", rt, rs);
12030}
12031
12032
12033/*
12034 * [DSP] PRECEU.PH.QBRA rt, rs - Expand the precision of the two
12035 * right-alternate elements of a quad byte vector to form four
12036 * unsigned halfwords
12037 *
12038 * 3 2 1
12039 * 10987654321098765432109876543210
12040 * 001000 00010001101
12041 * rt -----
12042 * rs -----
12043 * rd -----
12044 */
12045std::string NMD::PRECEU_PH_QBRA(uint64 instruction)
12046{
12047 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12048 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12049
12050 std::string rt = GPR(copy(rt_value));
12051 std::string rs = GPR(copy(rs_value));
12052
12053 return img::format("PRECEU.PH.QBRA %s, %s", rt, rs);
12054}
12055
12056
12057/*
12058 * [DSP] PRECEU.PH.QBR rt, rs - Expand the precision of the two right-most
12059 * elements of a quad byte vector to form unsigned halfwords
12060 *
12061 * 3 2 1
12062 * 10987654321098765432109876543210
12063 * 001000 00010001101
12064 * rt -----
12065 * rs -----
12066 * rd -----
12067 */
12068std::string NMD::PRECEU_PH_QBR(uint64 instruction)
12069{
12070 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12071 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12072
12073 std::string rt = GPR(copy(rt_value));
12074 std::string rs = GPR(copy(rs_value));
12075
12076 return img::format("PRECEU.PH.QBR %s, %s", rt, rs);
12077}
12078
12079
12080/*
12081 * [DSP] PRECR.QB.PH rd, rs, rt - Reduce the precision of four integer
12082 * halfwords to four bytes
12083 *
12084 * 3 2 1
12085 * 10987654321098765432109876543210
12086 * 001000 x0001101101
12087 * rt -----
12088 * rs -----
12089 * rd -----
12090 */
12091std::string NMD::PRECR_QB_PH(uint64 instruction)
12092{
12093 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12094 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12095 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12096
12097 std::string rd = GPR(copy(rd_value));
12098 std::string rs = GPR(copy(rs_value));
12099 std::string rt = GPR(copy(rt_value));
12100
12101 return img::format("PRECR.QB.PH %s, %s, %s", rd, rs, rt);
12102}
12103
12104
12105/*
12106 * [DSP] PRECR_SRA.PH.W rt, rs, sa - Reduce the precision of two integer
12107 * words to halfwords after a right shift
12108 *
12109 * 3 2 1
12110 * 10987654321098765432109876543210
12111 * 001000 x1110000101
12112 * rt -----
12113 * rs -----
12114 * rd -----
12115 */
12116std::string NMD::PRECR_SRA_PH_W(uint64 instruction)
12117{
12118 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12119 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12120 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
12121
12122 std::string rt = GPR(copy(rt_value));
12123 std::string rs = GPR(copy(rs_value));
12124 std::string sa = IMMEDIATE(copy(sa_value));
12125
12126 return img::format("PRECR_SRA.PH.W %s, %s, %s", rt, rs, sa);
12127}
12128
12129
12130/*
12131 * [DSP] PRECR_SRA_R.PH.W rt, rs, sa - Reduce the precision of two integer
12132 * words to halfwords after a right shift with rounding
12133 *
12134 * 3 2 1
12135 * 10987654321098765432109876543210
12136 * 001000 x1110000101
12137 * rt -----
12138 * rs -----
12139 * rd -----
12140 */
12141std::string NMD::PRECR_SRA_R_PH_W(uint64 instruction)
12142{
12143 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12144 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12145 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
12146
12147 std::string rt = GPR(copy(rt_value));
12148 std::string rs = GPR(copy(rs_value));
12149 std::string sa = IMMEDIATE(copy(sa_value));
12150
12151 return img::format("PRECR_SRA_R.PH.W %s, %s, %s", rt, rs, sa);
12152}
12153
12154
12155/*
12156 * [DSP] PRECRQ.PH.W rd, rs, rt - Reduce the precision of fractional
12157 * words to fractional halfwords
12158 *
12159 * 3 2 1
12160 * 10987654321098765432109876543210
12161 * 001000 x1110000101
12162 * rt -----
12163 * rs -----
12164 * rd -----
12165 */
12166std::string NMD::PRECRQ_PH_W(uint64 instruction)
12167{
12168 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12169 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12170 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12171
12172 std::string rd = GPR(copy(rd_value));
12173 std::string rs = GPR(copy(rs_value));
12174 std::string rt = GPR(copy(rt_value));
12175
12176 return img::format("PRECRQ.PH.W %s, %s, %s", rd, rs, rt);
12177}
12178
12179
12180/*
12181 * [DSP] PRECRQ.QB.PH rd, rs, rt - Reduce the precision of four fractional
12182 * halfwords to four bytes
12183 *
12184 * 3 2 1
12185 * 10987654321098765432109876543210
12186 * 001000 x0010101101
12187 * rt -----
12188 * rs -----
12189 * rd -----
12190 */
12191std::string NMD::PRECRQ_QB_PH(uint64 instruction)
12192{
12193 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12194 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12195 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12196
12197 std::string rd = GPR(copy(rd_value));
12198 std::string rs = GPR(copy(rs_value));
12199 std::string rt = GPR(copy(rt_value));
12200
12201 return img::format("PRECRQ.QB.PH %s, %s, %s", rd, rs, rt);
12202}
12203
12204
12205/*
12206 * [DSP] PRECRQ_RS.PH.W rd, rs, rt - Reduce the precision of fractional
12207 * words to halfwords with rounding and saturation
12208 *
12209 * 3 2 1
12210 * 10987654321098765432109876543210
12211 * 001000 x1110000101
12212 * rt -----
12213 * rs -----
12214 * rd -----
12215 */
12216std::string NMD::PRECRQ_RS_PH_W(uint64 instruction)
12217{
12218 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12219 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12220 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12221
12222 std::string rd = GPR(copy(rd_value));
12223 std::string rs = GPR(copy(rs_value));
12224 std::string rt = GPR(copy(rt_value));
12225
12226 return img::format("PRECRQ_RS.PH.W %s, %s, %s", rd, rs, rt);
12227}
12228
12229
12230/*
12231 * [DSP] PRECRQU_S.QB.PH rd, rs, rt - Reduce the precision of fractional
12232 * halfwords to unsigned bytes with saturation
12233 *
12234 * 3 2 1
12235 * 10987654321098765432109876543210
12236 * 001000 x1110000101
12237 * rt -----
12238 * rs -----
12239 * rd -----
12240 */
12241std::string NMD::PRECRQU_S_QB_PH(uint64 instruction)
12242{
12243 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12244 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12245 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12246
12247 std::string rd = GPR(copy(rd_value));
12248 std::string rs = GPR(copy(rs_value));
12249 std::string rt = GPR(copy(rt_value));
12250
12251 return img::format("PRECRQU_S.QB.PH %s, %s, %s", rd, rs, rt);
12252}
12253
12254
12255/*
12256 *
12257 *
12258 * 3 2 1
12259 * 10987654321098765432109876543210
12260 * 001000 x1110000101
12261 * rt -----
12262 * rs -----
12263 * rd -----
12264 */
12265std::string NMD::PREF_S9_(uint64 instruction)
12266{
12267 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12268 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12269 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12270
12271 std::string hint = IMMEDIATE(copy(hint_value));
12272 std::string s = IMMEDIATE(copy(s_value));
12273 std::string rs = GPR(copy(rs_value));
12274
12275 return img::format("PREF %s, %s(%s)", hint, s, rs);
12276}
12277
12278
12279/*
12280 *
12281 *
12282 * 3 2 1
12283 * 10987654321098765432109876543210
12284 * 001000 x1110000101
12285 * rt -----
12286 * rs -----
12287 * rd -----
12288 */
12289std::string NMD::PREF_U12_(uint64 instruction)
12290{
12291 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12292 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12293 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12294
12295 std::string hint = IMMEDIATE(copy(hint_value));
12296 std::string u = IMMEDIATE(copy(u_value));
12297 std::string rs = GPR(copy(rs_value));
12298
12299 return img::format("PREF %s, %s(%s)", hint, u, rs);
12300}
12301
12302
12303/*
12304 *
12305 *
12306 * 3 2 1
12307 * 10987654321098765432109876543210
12308 * 001000 x1110000101
12309 * rt -----
12310 * rs -----
12311 * rd -----
12312 */
12313std::string NMD::PREFE(uint64 instruction)
12314{
12315 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12316 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12317 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12318
12319 std::string hint = IMMEDIATE(copy(hint_value));
12320 std::string s = IMMEDIATE(copy(s_value));
12321 std::string rs = GPR(copy(rs_value));
12322
12323 return img::format("PREFE %s, %s(%s)", hint, s, rs);
12324}
12325
12326
12327/*
12328 * [DSP] PREPEND rt, rs, sa - Right shift and prepend bits to the MSB
12329 *
12330 * 3 2 1
12331 * 10987654321098765432109876543210
12332 * 001000 x1110000101
12333 * rt -----
12334 * rs -----
12335 * rd -----
12336 */
12337std::string NMD::PREPEND(uint64 instruction)
12338{
12339 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12340 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12341 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
12342
12343 std::string rt = GPR(copy(rt_value));
12344 std::string rs = GPR(copy(rs_value));
12345 std::string sa = IMMEDIATE(copy(sa_value));
12346
12347 return img::format("PREPEND %s, %s, %s", rt, rs, sa);
12348}
12349
12350
12351/*
12352 * [DSP] RADDU.W.QB rt, rs - Unsigned reduction add of vector quad bytes
12353 *
12354 * 3 2 1
12355 * 10987654321098765432109876543210
12356 * 001000 1111000100111111
12357 * rt -----
12358 * rs -----
12359 */
12360std::string NMD::RADDU_W_QB(uint64 instruction)
12361{
12362 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12363 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12364
12365 std::string rt = GPR(copy(rt_value));
12366 std::string rs = GPR(copy(rs_value));
12367
12368 return img::format("RADDU.W.QB %s, %s", rt, rs);
12369}
12370
12371
12372/*
12373 * [DSP] RDDSP rt, mask - Read DSPControl register fields to a GPR
12374 *
12375 * 3 2 1
12376 * 10987654321098765432109876543210
12377 * 001000 00011001111111
12378 * rt -----
12379 * mask -------
12380 */
12381std::string NMD::RDDSP(uint64 instruction)
12382{
12383 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12384 uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
12385
12386 std::string rt = GPR(copy(rt_value));
12387 std::string mask = IMMEDIATE(copy(mask_value));
12388
12389 return img::format("RDDSP %s, %s", rt, mask);
12390}
12391
12392
12393/*
12394 *
12395 *
12396 * 3 2 1
12397 * 10987654321098765432109876543210
12398 * 001000 x1110000101
12399 * rt -----
12400 * rs -----
12401 * rd -----
12402 */
12403std::string NMD::RDHWR(uint64 instruction)
12404{
12405 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12406 uint64 hs_value = extract_hs_20_19_18_17_16(instruction);
12407 uint64 sel_value = extract_sel_13_12_11(instruction);
12408
12409 std::string rt = GPR(copy(rt_value));
12410 std::string hs = CPR(copy(hs_value));
12411 std::string sel = IMMEDIATE(copy(sel_value));
12412
12413 return img::format("RDHWR %s, %s, %s", rt, hs, sel);
12414}
12415
12416
12417/*
12418 *
12419 *
12420 * 3 2 1
12421 * 10987654321098765432109876543210
12422 * 001000 x1110000101
12423 * rt -----
12424 * rs -----
12425 * rd -----
12426 */
12427std::string NMD::RDPGPR(uint64 instruction)
12428{
12429 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12430 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12431
12432 std::string rt = GPR(copy(rt_value));
12433 std::string rs = GPR(copy(rs_value));
12434
12435 return img::format("RDPGPR %s, %s", rt, rs);
12436}
12437
12438
12439/*
12440 *
12441 *
12442 * 3 2 1
12443 * 10987654321098765432109876543210
12444 * 001000 x1110000101
12445 * rt -----
12446 * rs -----
12447 * rd -----
12448 */
12449std::string NMD::RECIP_D(uint64 instruction)
12450{
12451 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12452 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12453
12454 std::string ft = FPR(copy(ft_value));
12455 std::string fs = FPR(copy(fs_value));
12456
12457 return img::format("RECIP.D %s, %s", ft, fs);
12458}
12459
12460
12461/*
12462 *
12463 *
12464 * 3 2 1
12465 * 10987654321098765432109876543210
12466 * 001000 x1110000101
12467 * rt -----
12468 * rs -----
12469 * rd -----
12470 */
12471std::string NMD::RECIP_S(uint64 instruction)
12472{
12473 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12474 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12475
12476 std::string ft = FPR(copy(ft_value));
12477 std::string fs = FPR(copy(fs_value));
12478
12479 return img::format("RECIP.S %s, %s", ft, fs);
12480}
12481
12482
12483/*
12484 * [DSP] REPL.PH rd, s - Replicate immediate integer into all vector element
12485 * positions
12486 *
12487 * 3 2 1
12488 * 10987654321098765432109876543210
12489 * 001000 x0000111101
12490 * rt -----
12491 * s ----------
12492 */
12493std::string NMD::REPL_PH(uint64 instruction)
12494{
12495 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12496 int64 s_value = extract_s__se9_20_19_18_17_16_15_14_13_12_11(instruction);
12497
12498 std::string rt = GPR(copy(rt_value));
12499 std::string s = IMMEDIATE(copy(s_value));
12500
12501 return img::format("REPL.PH %s, %s", rt, s);
12502}
12503
12504
12505/*
12506 * [DSP] REPL.QB rd, u - Replicate immediate integer into all vector element
12507 * positions
12508 *
12509 * 3 2 1
12510 * 10987654321098765432109876543210
12511 * 001000 x010111111111
12512 * rt -----
12513 * u --------
12514 */
12515std::string NMD::REPL_QB(uint64 instruction)
12516{
12517 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12518 uint64 u_value = extract_u_20_19_18_17_16_15_14_13(instruction);
12519
12520 std::string rt = GPR(copy(rt_value));
12521 std::string u = IMMEDIATE(copy(u_value));
12522
12523 return img::format("REPL.QB %s, %s", rt, u);
12524}
12525
12526
12527/*
12528 * [DSP] REPLV.PH rt, rs - Replicate a halfword into all vector element
12529 * positions
12530 *
12531 * 3 2 1
12532 * 10987654321098765432109876543210
12533 * 001000 0000001100111111
12534 * rt -----
12535 * rs -----
12536 */
12537std::string NMD::REPLV_PH(uint64 instruction)
12538{
12539 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12540 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12541
12542 std::string rt = GPR(copy(rt_value));
12543 std::string rs = GPR(copy(rs_value));
12544
12545 return img::format("REPLV.PH %s, %s", rt, rs);
12546}
12547
12548
12549/*
12550 * [DSP] REPLV.QB rt, rs - Replicate byte into all vector element positions
12551 *
12552 * 3 2 1
12553 * 10987654321098765432109876543210
12554 * 001000 0001001100111111
12555 * rt -----
12556 * rs -----
12557 */
12558std::string NMD::REPLV_QB(uint64 instruction)
12559{
12560 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12561 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12562
12563 std::string rt = GPR(copy(rt_value));
12564 std::string rs = GPR(copy(rs_value));
12565
12566 return img::format("REPLV.QB %s, %s", rt, rs);
12567}
12568
12569
12570/*
12571 *
12572 *
12573 * 3 2 1
12574 * 10987654321098765432109876543210
12575 * 001000 x1110000101
12576 * rt -----
12577 * rs -----
12578 * rd -----
12579 */
12580std::string NMD::RESTORE_32_(uint64 instruction)
12581{
12582 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12583 uint64 count_value = extract_count_19_18_17_16(instruction);
12584 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12585 uint64 gp_value = extract_gp_2(instruction);
12586
12587 std::string u = IMMEDIATE(copy(u_value));
12588 return img::format("RESTORE %s%s", u,
12589 save_restore_list(rt_value, count_value, gp_value));
12590}
12591
12592
12593/*
12594 *
12595 *
12596 * 3 2 1
12597 * 10987654321098765432109876543210
12598 * 001000 x1110000101
12599 * rt -----
12600 * rs -----
12601 * rd -----
12602 */
12603std::string NMD::RESTORE_JRC_16_(uint64 instruction)
12604{
12605 uint64 rt1_value = extract_rtl_11(instruction);
12606 uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12607 uint64 count_value = extract_count_3_2_1_0(instruction);
12608
12609 std::string u = IMMEDIATE(copy(u_value));
12610 return img::format("RESTORE.JRC %s%s", u,
12611 save_restore_list(encode_rt1_from_rt(rt1_value), count_value, 0));
12612}
12613
12614
12615/*
12616 *
12617 *
12618 * 3 2 1
12619 * 10987654321098765432109876543210
12620 * 001000 x1110000101
12621 * rt -----
12622 * rs -----
12623 * rd -----
12624 */
12625std::string NMD::RESTORE_JRC_32_(uint64 instruction)
12626{
12627 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12628 uint64 count_value = extract_count_19_18_17_16(instruction);
12629 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12630 uint64 gp_value = extract_gp_2(instruction);
12631
12632 std::string u = IMMEDIATE(copy(u_value));
12633 return img::format("RESTORE.JRC %s%s", u,
12634 save_restore_list(rt_value, count_value, gp_value));
12635}
12636
12637
12638/*
12639 *
12640 *
12641 * 3 2 1
12642 * 10987654321098765432109876543210
12643 * 001000 x1110000101
12644 * rt -----
12645 * rs -----
12646 * rd -----
12647 */
12648std::string NMD::RESTOREF(uint64 instruction)
12649{
12650 uint64 count_value = extract_count_19_18_17_16(instruction);
12651 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12652
12653 std::string u = IMMEDIATE(copy(u_value));
12654 std::string count = IMMEDIATE(copy(count_value));
12655
12656 return img::format("RESTOREF %s, %s", u, count);
12657}
12658
12659
12660/*
12661 *
12662 *
12663 * 3 2 1
12664 * 10987654321098765432109876543210
12665 * 001000 x1110000101
12666 * rt -----
12667 * rs -----
12668 * rd -----
12669 */
12670std::string NMD::RINT_D(uint64 instruction)
12671{
12672 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12673 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12674
12675 std::string ft = FPR(copy(ft_value));
12676 std::string fs = FPR(copy(fs_value));
12677
12678 return img::format("RINT.D %s, %s", ft, fs);
12679}
12680
12681
12682/*
12683 *
12684 *
12685 * 3 2 1
12686 * 10987654321098765432109876543210
12687 * 001000 x1110000101
12688 * rt -----
12689 * rs -----
12690 * rd -----
12691 */
12692std::string NMD::RINT_S(uint64 instruction)
12693{
12694 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12695 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12696
12697 std::string ft = FPR(copy(ft_value));
12698 std::string fs = FPR(copy(fs_value));
12699
12700 return img::format("RINT.S %s, %s", ft, fs);
12701}
12702
12703
12704/*
12705 *
12706 *
12707 * 3 2 1
12708 * 10987654321098765432109876543210
12709 * 001000 x1110000101
12710 * rt -----
12711 * rs -----
12712 * rd -----
12713 */
12714std::string NMD::ROTR(uint64 instruction)
12715{
12716 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12717 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12718 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12719
12720 std::string rt = GPR(copy(rt_value));
12721 std::string rs = GPR(copy(rs_value));
12722 std::string shift = IMMEDIATE(copy(shift_value));
12723
12724 return img::format("ROTR %s, %s, %s", rt, rs, shift);
12725}
12726
12727
12728/*
12729 *
12730 *
12731 * 3 2 1
12732 * 10987654321098765432109876543210
12733 * 001000 x1110000101
12734 * rt -----
12735 * rs -----
12736 * rd -----
12737 */
12738std::string NMD::ROTRV(uint64 instruction)
12739{
12740 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12741 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12742 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12743
12744 std::string rd = GPR(copy(rd_value));
12745 std::string rs = GPR(copy(rs_value));
12746 std::string rt = GPR(copy(rt_value));
12747
12748 return img::format("ROTRV %s, %s, %s", rd, rs, rt);
12749}
12750
12751
12752/*
12753 *
12754 *
12755 * 3 2 1
12756 * 10987654321098765432109876543210
12757 * 001000 x1110000101
12758 * rt -----
12759 * rs -----
12760 * rd -----
12761 */
12762std::string NMD::ROTX(uint64 instruction)
12763{
12764 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12765 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12766 uint64 shiftx_value = extract_shiftx_10_9_8_7__s1(instruction);
12767 uint64 stripe_value = extract_stripe_6(instruction);
12768 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12769
12770 std::string rt = GPR(copy(rt_value));
12771 std::string rs = GPR(copy(rs_value));
12772 std::string shift = IMMEDIATE(copy(shift_value));
12773 std::string shiftx = IMMEDIATE(copy(shiftx_value));
12774 std::string stripe = IMMEDIATE(copy(stripe_value));
12775
12776 return img::format("ROTX %s, %s, %s, %s, %s",
12777 rt, rs, shift, shiftx, stripe);
12778}
12779
12780
12781/*
12782 *
12783 *
12784 * 3 2 1
12785 * 10987654321098765432109876543210
12786 * 001000 x1110000101
12787 * rt -----
12788 * rs -----
12789 * rd -----
12790 */
12791std::string NMD::ROUND_L_D(uint64 instruction)
12792{
12793 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12794 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12795
12796 std::string ft = FPR(copy(ft_value));
12797 std::string fs = FPR(copy(fs_value));
12798
12799 return img::format("ROUND.L.D %s, %s", ft, fs);
12800}
12801
12802
12803/*
12804 *
12805 *
12806 * 3 2 1
12807 * 10987654321098765432109876543210
12808 * 001000 x1110000101
12809 * rt -----
12810 * rs -----
12811 * rd -----
12812 */
12813std::string NMD::ROUND_L_S(uint64 instruction)
12814{
12815 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12816 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12817
12818 std::string ft = FPR(copy(ft_value));
12819 std::string fs = FPR(copy(fs_value));
12820
12821 return img::format("ROUND.L.S %s, %s", ft, fs);
12822}
12823
12824
12825/*
12826 *
12827 *
12828 * 3 2 1
12829 * 10987654321098765432109876543210
12830 * 001000 x1110000101
12831 * rt -----
12832 * rs -----
12833 * rd -----
12834 */
12835std::string NMD::ROUND_W_D(uint64 instruction)
12836{
12837 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12838 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12839
12840 std::string ft = FPR(copy(ft_value));
12841 std::string fs = FPR(copy(fs_value));
12842
12843 return img::format("ROUND.W.D %s, %s", ft, fs);
12844}
12845
12846
12847/*
12848 *
12849 *
12850 * 3 2 1
12851 * 10987654321098765432109876543210
12852 * 001000 x1110000101
12853 * rt -----
12854 * rs -----
12855 * rd -----
12856 */
12857std::string NMD::ROUND_W_S(uint64 instruction)
12858{
12859 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12860 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12861
12862 std::string ft = FPR(copy(ft_value));
12863 std::string fs = FPR(copy(fs_value));
12864
12865 return img::format("ROUND.W.S %s, %s", ft, fs);
12866}
12867
12868
12869/*
12870 *
12871 *
12872 * 3 2 1
12873 * 10987654321098765432109876543210
12874 * 001000 x1110000101
12875 * rt -----
12876 * rs -----
12877 * rd -----
12878 */
12879std::string NMD::RSQRT_D(uint64 instruction)
12880{
12881 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12882 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12883
12884 std::string ft = FPR(copy(ft_value));
12885 std::string fs = FPR(copy(fs_value));
12886
12887 return img::format("RSQRT.D %s, %s", ft, fs);
12888}
12889
12890
12891/*
12892 *
12893 *
12894 * 3 2 1
12895 * 10987654321098765432109876543210
12896 * 001000 x1110000101
12897 * rt -----
12898 * rs -----
12899 * rd -----
12900 */
12901std::string NMD::RSQRT_S(uint64 instruction)
12902{
12903 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12904 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12905
12906 std::string ft = FPR(copy(ft_value));
12907 std::string fs = FPR(copy(fs_value));
12908
12909 return img::format("RSQRT.S %s, %s", ft, fs);
12910}
12911
12912
12913/*
12914 *
12915 *
12916 * 3 2 1
12917 * 10987654321098765432109876543210
12918 * 001000 01001001101
12919 * rt -----
12920 * rs -----
12921 * rd -----
12922 */
12923std::string NMD::SAVE_16_(uint64 instruction)
12924{
12925 uint64 rt1_value = extract_rtl_11(instruction);
12926 uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12927 uint64 count_value = extract_count_3_2_1_0(instruction);
12928
12929 std::string u = IMMEDIATE(copy(u_value));
12930 return img::format("SAVE %s%s", u,
12931 save_restore_list(encode_rt1_from_rt(rt1_value), count_value, 0));
12932}
12933
12934
12935/*
12936 *
12937 *
12938 * 3 2 1
12939 * 10987654321098765432109876543210
12940 * 001000 01001001101
12941 * rt -----
12942 * rs -----
12943 * rd -----
12944 */
12945std::string NMD::SAVE_32_(uint64 instruction)
12946{
12947 uint64 count_value = extract_count_19_18_17_16(instruction);
12948 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12949 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12950 uint64 gp_value = extract_gp_2(instruction);
12951
12952 std::string u = IMMEDIATE(copy(u_value));
12953 return img::format("SAVE %s%s", u,
12954 save_restore_list(rt_value, count_value, gp_value));
12955}
12956
12957
12958/*
12959 *
12960 *
12961 * 3 2 1
12962 * 10987654321098765432109876543210
12963 * 001000 01001001101
12964 * rt -----
12965 * rs -----
12966 * rd -----
12967 */
12968std::string NMD::SAVEF(uint64 instruction)
12969{
12970 uint64 count_value = extract_count_19_18_17_16(instruction);
12971 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12972
12973 std::string u = IMMEDIATE(copy(u_value));
12974 std::string count = IMMEDIATE(copy(count_value));
12975
12976 return img::format("SAVEF %s, %s", u, count);
12977}
12978
12979
12980/*
12981 *
12982 *
12983 * 3 2 1
12984 * 10987654321098765432109876543210
12985 * 001000 01001001101
12986 * rt -----
12987 * rs -----
12988 * rd -----
12989 */
12990std::string NMD::SB_16_(uint64 instruction)
12991{
12992 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
12993 uint64 rs3_value = extract_rs3_6_5_4(instruction);
12994 uint64 u_value = extract_u_1_0(instruction);
12995
12996 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
12997 std::string u = IMMEDIATE(copy(u_value));
12998 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
12999
13000 return img::format("SB %s, %s(%s)", rtz3, u, rs3);
13001}
13002
13003
13004/*
13005 *
13006 *
13007 * 3 2 1
13008 * 10987654321098765432109876543210
13009 * 001000 01001001101
13010 * rt -----
13011 * rs -----
13012 * rd -----
13013 */
13014std::string NMD::SB_GP_(uint64 instruction)
13015{
13016 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13017 uint64 u_value = extract_u_17_to_0(instruction);
13018
13019 std::string rt = GPR(copy(rt_value));
13020 std::string u = IMMEDIATE(copy(u_value));
13021
13022 return img::format("SB %s, %s($%d)", rt, u, 28);
13023}
13024
13025
13026/*
13027 *
13028 *
13029 * 3 2 1
13030 * 10987654321098765432109876543210
13031 * 001000 01001001101
13032 * rt -----
13033 * rs -----
13034 * rd -----
13035 */
13036std::string NMD::SB_S9_(uint64 instruction)
13037{
13038 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13039 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13040 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13041
13042 std::string rt = GPR(copy(rt_value));
13043 std::string s = IMMEDIATE(copy(s_value));
13044 std::string rs = GPR(copy(rs_value));
13045
13046 return img::format("SB %s, %s(%s)", rt, s, rs);
13047}
13048
13049
13050/*
13051 *
13052 *
13053 * 3 2 1
13054 * 10987654321098765432109876543210
13055 * 001000 01001001101
13056 * rt -----
13057 * rs -----
13058 * rd -----
13059 */
13060std::string NMD::SB_U12_(uint64 instruction)
13061{
13062 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13063 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13064 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13065
13066 std::string rt = GPR(copy(rt_value));
13067 std::string u = IMMEDIATE(copy(u_value));
13068 std::string rs = GPR(copy(rs_value));
13069
13070 return img::format("SB %s, %s(%s)", rt, u, rs);
13071}
13072
13073
13074/*
13075 *
13076 *
13077 * 3 2 1
13078 * 10987654321098765432109876543210
13079 * 001000 01001001101
13080 * rt -----
13081 * rs -----
13082 * rd -----
13083 */
13084std::string NMD::SBE(uint64 instruction)
13085{
13086 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13087 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13088 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13089
13090 std::string rt = GPR(copy(rt_value));
13091 std::string s = IMMEDIATE(copy(s_value));
13092 std::string rs = GPR(copy(rs_value));
13093
13094 return img::format("SBE %s, %s(%s)", rt, s, rs);
13095}
13096
13097
13098/*
13099 *
13100 *
13101 * 3 2 1
13102 * 10987654321098765432109876543210
13103 * 001000 01001001101
13104 * rt -----
13105 * rs -----
13106 * rd -----
13107 */
13108std::string NMD::SBX(uint64 instruction)
13109{
13110 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13111 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13112 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13113
13114 std::string rd = GPR(copy(rd_value));
13115 std::string rs = GPR(copy(rs_value));
13116 std::string rt = GPR(copy(rt_value));
13117
13118 return img::format("SBX %s, %s(%s)", rd, rs, rt);
13119}
13120
13121
13122/*
13123 *
13124 *
13125 * 3 2 1
13126 * 10987654321098765432109876543210
13127 * 001000 01001001101
13128 * rt -----
13129 * rs -----
13130 * rd -----
13131 */
13132std::string NMD::SC(uint64 instruction)
13133{
13134 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13135 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13136 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
13137
13138 std::string rt = GPR(copy(rt_value));
13139 std::string s = IMMEDIATE(copy(s_value));
13140 std::string rs = GPR(copy(rs_value));
13141
13142 return img::format("SC %s, %s(%s)", rt, s, rs);
13143}
13144
13145
13146/*
13147 *
13148 *
13149 * 3 2 1
13150 * 10987654321098765432109876543210
13151 * 001000 01001001101
13152 * rt -----
13153 * rs -----
13154 * rd -----
13155 */
13156std::string NMD::SCD(uint64 instruction)
13157{
13158 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13159 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13160 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
13161
13162 std::string rt = GPR(copy(rt_value));
13163 std::string s = IMMEDIATE(copy(s_value));
13164 std::string rs = GPR(copy(rs_value));
13165
13166 return img::format("SCD %s, %s(%s)", rt, s, rs);
13167}
13168
13169
13170/*
13171 *
13172 *
13173 * 3 2 1
13174 * 10987654321098765432109876543210
13175 * 001000 01001001101
13176 * rt -----
13177 * rs -----
13178 * rd -----
13179 */
13180std::string NMD::SCDP(uint64 instruction)
13181{
13182 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13183 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13184 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
13185
13186 std::string rt = GPR(copy(rt_value));
13187 std::string ru = GPR(copy(ru_value));
13188 std::string rs = GPR(copy(rs_value));
13189
13190 return img::format("SCDP %s, %s, (%s)", rt, ru, rs);
13191}
13192
13193
13194/*
13195 *
13196 *
13197 * 3 2 1
13198 * 10987654321098765432109876543210
13199 * 001000 01001001101
13200 * rt -----
13201 * rs -----
13202 * rd -----
13203 */
13204std::string NMD::SCE(uint64 instruction)
13205{
13206 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13207 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13208 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
13209
13210 std::string rt = GPR(copy(rt_value));
13211 std::string s = IMMEDIATE(copy(s_value));
13212 std::string rs = GPR(copy(rs_value));
13213
13214 return img::format("SCE %s, %s(%s)", rt, s, rs);
13215}
13216
13217
13218/*
13219 *
13220 *
13221 * 3 2 1
13222 * 10987654321098765432109876543210
13223 * 001000 01001001101
13224 * rt -----
13225 * rs -----
13226 * rd -----
13227 */
13228std::string NMD::SCWP(uint64 instruction)
13229{
13230 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13231 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13232 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
13233
13234 std::string rt = GPR(copy(rt_value));
13235 std::string ru = GPR(copy(ru_value));
13236 std::string rs = GPR(copy(rs_value));
13237
13238 return img::format("SCWP %s, %s, (%s)", rt, ru, rs);
13239}
13240
13241
13242/*
13243 *
13244 *
13245 * 3 2 1
13246 * 10987654321098765432109876543210
13247 * 001000 01001001101
13248 * rt -----
13249 * rs -----
13250 * rd -----
13251 */
13252std::string NMD::SCWPE(uint64 instruction)
13253{
13254 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13255 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13256 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
13257
13258 std::string rt = GPR(copy(rt_value));
13259 std::string ru = GPR(copy(ru_value));
13260 std::string rs = GPR(copy(rs_value));
13261
13262 return img::format("SCWPE %s, %s, (%s)", rt, ru, rs);
13263}
13264
13265
13266/*
13267 *
13268 *
13269 * 3 2 1
13270 * 10987654321098765432109876543210
13271 * 001000 01001001101
13272 * rt -----
13273 * rs -----
13274 * rd -----
13275 */
13276std::string NMD::SD_GP_(uint64 instruction)
13277{
13278 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13279 uint64 u_value = extract_u_20_to_3__s3(instruction);
13280
13281 std::string rt = GPR(copy(rt_value));
13282 std::string u = IMMEDIATE(copy(u_value));
13283
13284 return img::format("SD %s, %s($%d)", rt, u, 28);
13285}
13286
13287
13288/*
13289 *
13290 *
13291 * 3 2 1
13292 * 10987654321098765432109876543210
13293 * 001000 01001001101
13294 * rt -----
13295 * rs -----
13296 * rd -----
13297 */
13298std::string NMD::SD_S9_(uint64 instruction)
13299{
13300 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13301 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13302 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13303
13304 std::string rt = GPR(copy(rt_value));
13305 std::string s = IMMEDIATE(copy(s_value));
13306 std::string rs = GPR(copy(rs_value));
13307
13308 return img::format("SD %s, %s(%s)", rt, s, rs);
13309}
13310
13311
13312/*
13313 *
13314 *
13315 * 3 2 1
13316 * 10987654321098765432109876543210
13317 * 001000 01001001101
13318 * rt -----
13319 * rs -----
13320 * rd -----
13321 */
13322std::string NMD::SD_U12_(uint64 instruction)
13323{
13324 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13325 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13326 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13327
13328 std::string rt = GPR(copy(rt_value));
13329 std::string u = IMMEDIATE(copy(u_value));
13330 std::string rs = GPR(copy(rs_value));
13331
13332 return img::format("SD %s, %s(%s)", rt, u, rs);
13333}
13334
13335
13336/*
13337 *
13338 *
13339 * 3 2 1
13340 * 10987654321098765432109876543210
13341 * 001000 01001001101
13342 * rt -----
13343 * rs -----
13344 * rd -----
13345 */
13346std::string NMD::SDBBP_16_(uint64 instruction)
13347{
13348 uint64 code_value = extract_code_2_1_0(instruction);
13349
13350 std::string code = IMMEDIATE(copy(code_value));
13351
13352 return img::format("SDBBP %s", code);
13353}
13354
13355
13356/*
13357 *
13358 *
13359 * 3 2 1
13360 * 10987654321098765432109876543210
13361 * 001000 01001001101
13362 * rt -----
13363 * rs -----
13364 * rd -----
13365 */
13366std::string NMD::SDBBP_32_(uint64 instruction)
13367{
13368 uint64 code_value = extract_code_18_to_0(instruction);
13369
13370 std::string code = IMMEDIATE(copy(code_value));
13371
13372 return img::format("SDBBP %s", code);
13373}
13374
13375
13376/*
13377 *
13378 *
13379 * 3 2 1
13380 * 10987654321098765432109876543210
13381 * 001000 01001001101
13382 * rt -----
13383 * rs -----
13384 * rd -----
13385 */
13386std::string NMD::SDC1_GP_(uint64 instruction)
13387{
13388 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13389 uint64 u_value = extract_u_17_to_2__s2(instruction);
13390
13391 std::string ft = FPR(copy(ft_value));
13392 std::string u = IMMEDIATE(copy(u_value));
13393
13394 return img::format("SDC1 %s, %s($%d)", ft, u, 28);
13395}
13396
13397
13398/*
13399 *
13400 *
13401 * 3 2 1
13402 * 10987654321098765432109876543210
13403 * 001000 01001001101
13404 * rt -----
13405 * rs -----
13406 * rd -----
13407 */
13408std::string NMD::SDC1_S9_(uint64 instruction)
13409{
13410 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13411 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13412 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13413
13414 std::string ft = FPR(copy(ft_value));
13415 std::string s = IMMEDIATE(copy(s_value));
13416 std::string rs = GPR(copy(rs_value));
13417
13418 return img::format("SDC1 %s, %s(%s)", ft, s, rs);
13419}
13420
13421
13422/*
13423 *
13424 *
13425 * 3 2 1
13426 * 10987654321098765432109876543210
13427 * 001000 01001001101
13428 * rt -----
13429 * rs -----
13430 * rd -----
13431 */
13432std::string NMD::SDC1_U12_(uint64 instruction)
13433{
13434 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13435 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13436 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13437
13438 std::string ft = FPR(copy(ft_value));
13439 std::string u = IMMEDIATE(copy(u_value));
13440 std::string rs = GPR(copy(rs_value));
13441
13442 return img::format("SDC1 %s, %s(%s)", ft, u, rs);
13443}
13444
13445
13446/*
13447 *
13448 *
13449 * 3 2 1
13450 * 10987654321098765432109876543210
13451 * 001000 01001001101
13452 * rt -----
13453 * rs -----
13454 * rd -----
13455 */
13456std::string NMD::SDC1X(uint64 instruction)
13457{
13458 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13459 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13460 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
13461
13462 std::string ft = FPR(copy(ft_value));
13463 std::string rs = GPR(copy(rs_value));
13464 std::string rt = GPR(copy(rt_value));
13465
13466 return img::format("SDC1X %s, %s(%s)", ft, rs, rt);
13467}
13468
13469
13470/*
13471 *
13472 *
13473 * 3 2 1
13474 * 10987654321098765432109876543210
13475 * 001000 01001001101
13476 * rt -----
13477 * rs -----
13478 * rd -----
13479 */
13480std::string NMD::SDC1XS(uint64 instruction)
13481{
13482 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13483 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13484 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
13485
13486 std::string ft = FPR(copy(ft_value));
13487 std::string rs = GPR(copy(rs_value));
13488 std::string rt = GPR(copy(rt_value));
13489
13490 return img::format("SDC1XS %s, %s(%s)", ft, rs, rt);
13491}
13492
13493
13494/*
13495 *
13496 *
13497 * 3 2 1
13498 * 10987654321098765432109876543210
13499 * 001000 01001001101
13500 * rt -----
13501 * rs -----
13502 * rd -----
13503 */
13504std::string NMD::SDC2(uint64 instruction)
13505{
13506 uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
13507 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13508 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13509
13510 std::string cs = CPR(copy(cs_value));
13511 std::string s = IMMEDIATE(copy(s_value));
13512 std::string rs = GPR(copy(rs_value));
13513
13514 return img::format("SDC2 %s, %s(%s)", cs, s, rs);
13515}
13516
13517
13518/*
13519 *
13520 *
13521 * 3 2 1
13522 * 10987654321098765432109876543210
13523 * 001000 01001001101
13524 * rt -----
13525 * rs -----
13526 * rd -----
13527 */
13528std::string NMD::SDM(uint64 instruction)
13529{
13530 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13531 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13532 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13533 uint64 count3_value = extract_count3_14_13_12(instruction);
13534
13535 std::string rt = GPR(copy(rt_value));
13536 std::string s = IMMEDIATE(copy(s_value));
13537 std::string rs = GPR(copy(rs_value));
13538 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
13539
13540 return img::format("SDM %s, %s(%s), %s", rt, s, rs, count3);
13541}
13542
13543
13544/*
13545 *
13546 *
13547 * 3 2 1
13548 * 10987654321098765432109876543210
13549 * 001000 01001001101
13550 * rt -----
13551 * rs -----
13552 * rd -----
13553 */
13554std::string NMD::SDPC_48_(uint64 instruction)
13555{
13556 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
13557 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
13558
13559 std::string rt = GPR(copy(rt_value));
13560 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
13561
13562 return img::format("SDPC %s, %s", rt, s);
13563}
13564
13565
13566/*
13567 *
13568 *
13569 * 3 2 1
13570 * 10987654321098765432109876543210
13571 * 001000 01001001101
13572 * rt -----
13573 * rs -----
13574 * rd -----
13575 */
13576std::string NMD::SDXS(uint64 instruction)
13577{
13578 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13579 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13580 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13581
13582 std::string rd = GPR(copy(rd_value));
13583 std::string rs = GPR(copy(rs_value));
13584 std::string rt = GPR(copy(rt_value));
13585
13586 return img::format("SDXS %s, %s(%s)", rd, rs, rt);
13587}
13588
13589
13590/*
13591 *
13592 *
13593 * 3 2 1
13594 * 10987654321098765432109876543210
13595 * 001000 01001001101
13596 * rt -----
13597 * rs -----
13598 * rd -----
13599 */
13600std::string NMD::SDX(uint64 instruction)
13601{
13602 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13603 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13604 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13605
13606 std::string rd = GPR(copy(rd_value));
13607 std::string rs = GPR(copy(rs_value));
13608 std::string rt = GPR(copy(rt_value));
13609
13610 return img::format("SDX %s, %s(%s)", rd, rs, rt);
13611}
13612
13613
13614/*
13615 *
13616 *
13617 * 3 2 1
13618 * 10987654321098765432109876543210
13619 * 001000 01001001101
13620 * rt -----
13621 * rs -----
13622 * rd -----
13623 */
13624std::string NMD::SEB(uint64 instruction)
13625{
13626 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13627 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13628
13629 std::string rt = GPR(copy(rt_value));
13630 std::string rs = GPR(copy(rs_value));
13631
13632 return img::format("SEB %s, %s", rt, rs);
13633}
13634
13635
13636/*
13637 *
13638 *
13639 * 3 2 1
13640 * 10987654321098765432109876543210
13641 * 001000 01001001101
13642 * rt -----
13643 * rs -----
13644 * rd -----
13645 */
13646std::string NMD::SEH(uint64 instruction)
13647{
13648 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13649 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13650
13651 std::string rt = GPR(copy(rt_value));
13652 std::string rs = GPR(copy(rs_value));
13653
13654 return img::format("SEH %s, %s", rt, rs);
13655}
13656
13657
13658/*
13659 *
13660 *
13661 * 3 2 1
13662 * 10987654321098765432109876543210
13663 * 001000 01001001101
13664 * rt -----
13665 * rs -----
13666 * rd -----
13667 */
13668std::string NMD::SEL_D(uint64 instruction)
13669{
13670 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13671 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13672 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13673
13674 std::string fd = FPR(copy(fd_value));
13675 std::string fs = FPR(copy(fs_value));
13676 std::string ft = FPR(copy(ft_value));
13677
13678 return img::format("SEL.D %s, %s, %s", fd, fs, ft);
13679}
13680
13681
13682/*
13683 *
13684 *
13685 * 3 2 1
13686 * 10987654321098765432109876543210
13687 * 001000 01001001101
13688 * rt -----
13689 * rs -----
13690 * rd -----
13691 */
13692std::string NMD::SEL_S(uint64 instruction)
13693{
13694 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13695 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13696 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13697
13698 std::string fd = FPR(copy(fd_value));
13699 std::string fs = FPR(copy(fs_value));
13700 std::string ft = FPR(copy(ft_value));
13701
13702 return img::format("SEL.S %s, %s, %s", fd, fs, ft);
13703}
13704
13705
13706/*
13707 *
13708 *
13709 * 3 2 1
13710 * 10987654321098765432109876543210
13711 * 001000 01001001101
13712 * rt -----
13713 * rs -----
13714 * rd -----
13715 */
13716std::string NMD::SELEQZ_D(uint64 instruction)
13717{
13718 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13719 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13720 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13721
13722 std::string fd = FPR(copy(fd_value));
13723 std::string fs = FPR(copy(fs_value));
13724 std::string ft = FPR(copy(ft_value));
13725
13726 return img::format("SELEQZ.D %s, %s, %s", fd, fs, ft);
13727}
13728
13729
13730/*
13731 *
13732 *
13733 * 3 2 1
13734 * 10987654321098765432109876543210
13735 * 001000 01001001101
13736 * rt -----
13737 * rs -----
13738 * rd -----
13739 */
13740std::string NMD::SELEQZ_S(uint64 instruction)
13741{
13742 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13743 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13744 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13745
13746 std::string fd = FPR(copy(fd_value));
13747 std::string fs = FPR(copy(fs_value));
13748 std::string ft = FPR(copy(ft_value));
13749
13750 return img::format("SELEQZ.S %s, %s, %s", fd, fs, ft);
13751}
13752
13753
13754/*
13755 *
13756 *
13757 * 3 2 1
13758 * 10987654321098765432109876543210
13759 * 001000 01001001101
13760 * rt -----
13761 * rs -----
13762 * rd -----
13763 */
13764std::string NMD::SELNEZ_D(uint64 instruction)
13765{
13766 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13767 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13768 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13769
13770 std::string fd = FPR(copy(fd_value));
13771 std::string fs = FPR(copy(fs_value));
13772 std::string ft = FPR(copy(ft_value));
13773
13774 return img::format("SELNEZ.D %s, %s, %s", fd, fs, ft);
13775}
13776
13777
13778/*
13779 *
13780 *
13781 * 3 2 1
13782 * 10987654321098765432109876543210
13783 * 001000 01001001101
13784 * rt -----
13785 * rs -----
13786 * rd -----
13787 */
13788std::string NMD::SELNEZ_S(uint64 instruction)
13789{
13790 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13791 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13792 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13793
13794 std::string fd = FPR(copy(fd_value));
13795 std::string fs = FPR(copy(fs_value));
13796 std::string ft = FPR(copy(ft_value));
13797
13798 return img::format("SELNEZ.S %s, %s, %s", fd, fs, ft);
13799}
13800
13801
13802/*
13803 *
13804 *
13805 * 3 2 1
13806 * 10987654321098765432109876543210
13807 * 001000 01001001101
13808 * rt -----
13809 * rs -----
13810 * rd -----
13811 */
13812std::string NMD::SEQI(uint64 instruction)
13813{
13814 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13815 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13816 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13817
13818 std::string rt = GPR(copy(rt_value));
13819 std::string rs = GPR(copy(rs_value));
13820 std::string u = IMMEDIATE(copy(u_value));
13821
13822 return img::format("SEQI %s, %s, %s", rt, rs, u);
13823}
13824
13825
13826/*
13827 *
13828 *
13829 * 3 2 1
13830 * 10987654321098765432109876543210
13831 * 001000 01001001101
13832 * rt -----
13833 * rs -----
13834 * rd -----
13835 */
13836std::string NMD::SH_16_(uint64 instruction)
13837{
13838 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
13839 uint64 rs3_value = extract_rs3_6_5_4(instruction);
13840 uint64 u_value = extract_u_2_1__s1(instruction);
13841
13842 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
13843 std::string u = IMMEDIATE(copy(u_value));
13844 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
13845
13846 return img::format("SH %s, %s(%s)", rtz3, u, rs3);
13847}
13848
13849
13850/*
13851 *
13852 *
13853 * 3 2 1
13854 * 10987654321098765432109876543210
13855 * 001000 01001001101
13856 * rt -----
13857 * rs -----
13858 * rd -----
13859 */
13860std::string NMD::SH_GP_(uint64 instruction)
13861{
13862 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13863 uint64 u_value = extract_u_17_to_1__s1(instruction);
13864
13865 std::string rt = GPR(copy(rt_value));
13866 std::string u = IMMEDIATE(copy(u_value));
13867
13868 return img::format("SH %s, %s($%d)", rt, u, 28);
13869}
13870
13871
13872/*
13873 *
13874 *
13875 * 3 2 1
13876 * 10987654321098765432109876543210
13877 * 001000 01001001101
13878 * rt -----
13879 * rs -----
13880 * rd -----
13881 */
13882std::string NMD::SH_S9_(uint64 instruction)
13883{
13884 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13885 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13886 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13887
13888 std::string rt = GPR(copy(rt_value));
13889 std::string s = IMMEDIATE(copy(s_value));
13890 std::string rs = GPR(copy(rs_value));
13891
13892 return img::format("SH %s, %s(%s)", rt, s, rs);
13893}
13894
13895
13896/*
13897 *
13898 *
13899 * 3 2 1
13900 * 10987654321098765432109876543210
13901 * 001000 01001001101
13902 * rt -----
13903 * rs -----
13904 * rd -----
13905 */
13906std::string NMD::SH_U12_(uint64 instruction)
13907{
13908 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13909 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13910 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13911
13912 std::string rt = GPR(copy(rt_value));
13913 std::string u = IMMEDIATE(copy(u_value));
13914 std::string rs = GPR(copy(rs_value));
13915
13916 return img::format("SH %s, %s(%s)", rt, u, rs);
13917}
13918
13919
13920/*
13921 *
13922 *
13923 * 3 2 1
13924 * 10987654321098765432109876543210
13925 * 001000 01001001101
13926 * rt -----
13927 * rs -----
13928 * rd -----
13929 */
13930std::string NMD::SHE(uint64 instruction)
13931{
13932 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13933 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13934 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13935
13936 std::string rt = GPR(copy(rt_value));
13937 std::string s = IMMEDIATE(copy(s_value));
13938 std::string rs = GPR(copy(rs_value));
13939
13940 return img::format("SHE %s, %s(%s)", rt, s, rs);
13941}
13942
13943
13944/*
13945 * [DSP] SHILO ac, shift - Shift an accumulator value leaving the result in
13946 * the same accumulator
13947 *
13948 * 3 2 1
13949 * 10987654321098765432109876543210
13950 * 001000xxxx xxxx0000011101
13951 * shift ------
13952 * ac --
13953 */
13954std::string NMD::SHILO(uint64 instruction)
13955{
13956 int64 shift_value = extract_shift__se5_21_20_19_18_17_16(instruction);
13957 uint64 ac_value = extract_ac_15_14(instruction);
13958
13959 std::string shift = IMMEDIATE(copy(shift_value));
13960 std::string ac = AC(copy(ac_value));
13961
13962 return img::format("SHILO %s, %s", ac, shift);
13963}
13964
13965
13966/*
13967 * [DSP] SHILOV ac, rs - Variable shift of accumulator value leaving the result
13968 * in the same accumulator
13969 *
13970 * 3 2 1
13971 * 10987654321098765432109876543210
13972 * 001000xxxxx 01001001111111
13973 * rs -----
13974 * ac --
13975 */
13976std::string NMD::SHILOV(uint64 instruction)
13977{
13978 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13979 uint64 ac_value = extract_ac_15_14(instruction);
13980
13981 std::string rs = GPR(copy(rs_value));
13982 std::string ac = AC(copy(ac_value));
13983
13984 return img::format("SHILOV %s, %s", ac, rs);
13985}
13986
13987
13988/*
13989 * [DSP] SHLL.PH rt, rs, sa - Shift left logical vector pair halfwords
13990 *
13991 * 3 2 1
13992 * 10987654321098765432109876543210
13993 * 001000 001110110101
13994 * rt -----
13995 * rs -----
13996 * sa ----
13997 */
13998std::string NMD::SHLL_PH(uint64 instruction)
13999{
14000 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14001 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14002 uint64 sa_value = extract_sa_15_14_13_12(instruction);
14003
14004 std::string rt = GPR(copy(rt_value));
14005 std::string rs = GPR(copy(rs_value));
14006 std::string sa = IMMEDIATE(copy(sa_value));
14007
14008 return img::format("SHLL.PH %s, %s, %s", rt, rs, sa);
14009}
14010
14011
14012/*
14013 * [DSP] SHLL.QB rt, rs, sa - Shift left logical vector quad bytes
14014 *
14015 * 3 2 1
14016 * 10987654321098765432109876543210
14017 * 001000 0100001111111
14018 * rt -----
14019 * rs -----
14020 * sa ---
14021 */
14022std::string NMD::SHLL_QB(uint64 instruction)
14023{
14024 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14025 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14026 uint64 sa_value = extract_sa_15_14_13(instruction);
14027
14028 std::string rt = GPR(copy(rt_value));
14029 std::string rs = GPR(copy(rs_value));
14030 std::string sa = IMMEDIATE(copy(sa_value));
14031
14032 return img::format("SHLL.QB %s, %s, %s", rt, rs, sa);
14033}
14034
14035
14036/*
14037 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical vector pair halfwords
14038 * with saturation
14039 *
14040 * 3 2 1
14041 * 10987654321098765432109876543210
14042 * 001000 001110110101
14043 * rt -----
14044 * rs -----
14045 * sa ----
14046 */
14047std::string NMD::SHLL_S_PH(uint64 instruction)
14048{
14049 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14050 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14051 uint64 sa_value = extract_sa_15_14_13_12(instruction);
14052
14053 std::string rt = GPR(copy(rt_value));
14054 std::string rs = GPR(copy(rs_value));
14055 std::string sa = IMMEDIATE(copy(sa_value));
14056
14057 return img::format("SHLL_S.PH %s, %s, %s", rt, rs, sa);
14058}
14059
14060
14061/*
14062 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical word with saturation
14063 *
14064 * 3 2 1
14065 * 10987654321098765432109876543210
14066 * 001000 x1111110101
14067 * rt -----
14068 * rs -----
14069 * sa -----
14070 */
14071std::string NMD::SHLL_S_W(uint64 instruction)
14072{
14073 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14074 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14075 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
14076
14077 std::string rt = GPR(copy(rt_value));
14078 std::string rs = GPR(copy(rs_value));
14079 std::string sa = IMMEDIATE(copy(sa_value));
14080
14081 return img::format("SHLL_S.W %s, %s, %s", rt, rs, sa);
14082}
14083
14084
14085/*
14086 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
14087 * halfwords
14088 *
14089 * 3 2 1
14090 * 10987654321098765432109876543210
14091 * 001000 01110001101
14092 * rt -----
14093 * rs -----
14094 * rd -----
14095 */
14096std::string NMD::SHLLV_PH(uint64 instruction)
14097{
14098 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14099 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14100 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14101
14102 std::string rd = GPR(copy(rd_value));
14103 std::string rt = GPR(copy(rt_value));
14104 std::string rs = GPR(copy(rs_value));
14105
14106 return img::format("SHLLV.PH %s, %s, %s", rd, rt, rs);
14107}
14108
14109
14110/*
14111 * [DSP] SHLLV_S.QB rd, rt, rs - Shift left logical variable vector quad bytes
14112 *
14113 * 3 2 1
14114 * 10987654321098765432109876543210
14115 * 001000 x1110010101
14116 * rt -----
14117 * rs -----
14118 * rd -----
14119 */
14120std::string NMD::SHLLV_QB(uint64 instruction)
14121{
14122 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14123 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14124 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14125
14126 std::string rd = GPR(copy(rd_value));
14127 std::string rt = GPR(copy(rt_value));
14128 std::string rs = GPR(copy(rs_value));
14129
14130 return img::format("SHLLV.QB %s, %s, %s", rd, rt, rs);
14131}
14132
14133
14134/*
14135 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
14136 * halfwords with saturation
14137 *
14138 * 3 2 1
14139 * 10987654321098765432109876543210
14140 * 001000 11110001101
14141 * rt -----
14142 * rs -----
14143 * rd -----
14144 */
14145std::string NMD::SHLLV_S_PH(uint64 instruction)
14146{
14147 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14148 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14149 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14150
14151 std::string rd = GPR(copy(rd_value));
14152 std::string rt = GPR(copy(rt_value));
14153 std::string rs = GPR(copy(rs_value));
14154
14155 return img::format("SHLLV_S.PH %s, %s, %s", rd, rt, rs);
14156}
14157
14158
14159/*
14160 * [DSP] SHLLV_S.W rd, rt, rs - Shift left logical variable vector word
14161 *
14162 * 3 2 1
14163 * 10987654321098765432109876543210
14164 * 001000 x1111010101
14165 * rt -----
14166 * rs -----
14167 * rd -----
14168 */
14169std::string NMD::SHLLV_S_W(uint64 instruction)
14170{
14171 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14172 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14173 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14174
14175 std::string rd = GPR(copy(rd_value));
14176 std::string rt = GPR(copy(rt_value));
14177 std::string rs = GPR(copy(rs_value));
14178
14179 return img::format("SHLLV_S.W %s, %s, %s", rd, rt, rs);
14180}
14181
14182
14183/*
14184 *
14185 *
14186 * 3 2 1
14187 * 10987654321098765432109876543210
14188 * 001000 01001001101
14189 * rt -----
14190 * rs -----
14191 * rd -----
14192 */
14193std::string NMD::SHRA_PH(uint64 instruction)
14194{
14195 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14196 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14197 uint64 sa_value = extract_sa_15_14_13_12(instruction);
14198
14199 std::string rt = GPR(copy(rt_value));
14200 std::string rs = GPR(copy(rs_value));
14201 std::string sa = IMMEDIATE(copy(sa_value));
14202
14203 return img::format("SHRA.PH %s, %s, %s", rt, rs, sa);
14204}
14205
14206
14207/*
14208 *
14209 *
14210 * 3 2 1
14211 * 10987654321098765432109876543210
14212 * 001000 01001001101
14213 * rt -----
14214 * rs -----
14215 * rd -----
14216 */
14217std::string NMD::SHRA_QB(uint64 instruction)
14218{
14219 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14220 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14221 uint64 sa_value = extract_sa_15_14_13(instruction);
14222
14223 std::string rt = GPR(copy(rt_value));
14224 std::string rs = GPR(copy(rs_value));
14225 std::string sa = IMMEDIATE(copy(sa_value));
14226
14227 return img::format("SHRA.QB %s, %s, %s", rt, rs, sa);
14228}
14229
14230
14231/*
14232 *
14233 *
14234 * 3 2 1
14235 * 10987654321098765432109876543210
14236 * 001000 01001001101
14237 * rt -----
14238 * rs -----
14239 * rd -----
14240 */
14241std::string NMD::SHRA_R_PH(uint64 instruction)
14242{
14243 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14244 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14245 uint64 sa_value = extract_sa_15_14_13_12(instruction);
14246
14247 std::string rt = GPR(copy(rt_value));
14248 std::string rs = GPR(copy(rs_value));
14249 std::string sa = IMMEDIATE(copy(sa_value));
14250
14251 return img::format("SHRA_R.PH %s, %s, %s", rt, rs, sa);
14252}
14253
14254
14255/*
14256 *
14257 *
14258 * 3 2 1
14259 * 10987654321098765432109876543210
14260 * 001000 01001001101
14261 * rt -----
14262 * rs -----
14263 * rd -----
14264 */
14265std::string NMD::SHRA_R_QB(uint64 instruction)
14266{
14267 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14268 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14269 uint64 sa_value = extract_sa_15_14_13(instruction);
14270
14271 std::string rt = GPR(copy(rt_value));
14272 std::string rs = GPR(copy(rs_value));
14273 std::string sa = IMMEDIATE(copy(sa_value));
14274
14275 return img::format("SHRA_R.QB %s, %s, %s", rt, rs, sa);
14276}
14277
14278
14279/*
14280 *
14281 *
14282 * 3 2 1
14283 * 10987654321098765432109876543210
14284 * 001000 01001001101
14285 * rt -----
14286 * rs -----
14287 * rd -----
14288 */
14289std::string NMD::SHRA_R_W(uint64 instruction)
14290{
14291 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14292 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14293 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
14294
14295 std::string rt = GPR(copy(rt_value));
14296 std::string rs = GPR(copy(rs_value));
14297 std::string sa = IMMEDIATE(copy(sa_value));
14298
14299 return img::format("SHRA_R.W %s, %s, %s", rt, rs, sa);
14300}
14301
14302
14303/*
14304 *
14305 *
14306 * 3 2 1
14307 * 10987654321098765432109876543210
14308 * 001000 01001001101
14309 * rt -----
14310 * rs -----
14311 * rd -----
14312 */
14313std::string NMD::SHRAV_PH(uint64 instruction)
14314{
14315 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14316 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14317 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14318
14319 std::string rd = GPR(copy(rd_value));
14320 std::string rt = GPR(copy(rt_value));
14321 std::string rs = GPR(copy(rs_value));
14322
14323 return img::format("SHRAV.PH %s, %s, %s", rd, rt, rs);
14324}
14325
14326
14327/*
14328 *
14329 *
14330 * 3 2 1
14331 * 10987654321098765432109876543210
14332 * 001000 01001001101
14333 * rt -----
14334 * rs -----
14335 * rd -----
14336 */
14337std::string NMD::SHRAV_QB(uint64 instruction)
14338{
14339 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14340 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14341 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14342
14343 std::string rd = GPR(copy(rd_value));
14344 std::string rt = GPR(copy(rt_value));
14345 std::string rs = GPR(copy(rs_value));
14346
14347 return img::format("SHRAV.QB %s, %s, %s", rd, rt, rs);
14348}
14349
14350
14351/*
14352 *
14353 *
14354 * 3 2 1
14355 * 10987654321098765432109876543210
14356 * 001000 01001001101
14357 * rt -----
14358 * rs -----
14359 * rd -----
14360 */
14361std::string NMD::SHRAV_R_PH(uint64 instruction)
14362{
14363 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14364 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14365 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14366
14367 std::string rd = GPR(copy(rd_value));
14368 std::string rt = GPR(copy(rt_value));
14369 std::string rs = GPR(copy(rs_value));
14370
14371 return img::format("SHRAV_R.PH %s, %s, %s", rd, rt, rs);
14372}
14373
14374
14375/*
14376 *
14377 *
14378 * 3 2 1
14379 * 10987654321098765432109876543210
14380 * 001000 01001001101
14381 * rt -----
14382 * rs -----
14383 * rd -----
14384 */
14385std::string NMD::SHRAV_R_QB(uint64 instruction)
14386{
14387 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14388 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14389 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14390
14391 std::string rd = GPR(copy(rd_value));
14392 std::string rt = GPR(copy(rt_value));
14393 std::string rs = GPR(copy(rs_value));
14394
14395 return img::format("SHRAV_R.QB %s, %s, %s", rd, rt, rs);
14396}
14397
14398
14399/*
14400 *
14401 *
14402 * 3 2 1
14403 * 10987654321098765432109876543210
14404 * 001000 01001001101
14405 * rt -----
14406 * rs -----
14407 * rd -----
14408 */
14409std::string NMD::SHRAV_R_W(uint64 instruction)
14410{
14411 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14412 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14413 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14414
14415 std::string rd = GPR(copy(rd_value));
14416 std::string rt = GPR(copy(rt_value));
14417 std::string rs = GPR(copy(rs_value));
14418
14419 return img::format("SHRAV_R.W %s, %s, %s", rd, rt, rs);
14420}
14421
14422
14423/*
14424 * [DSP] SHRL.PH rt, rs, sa - Shift right logical two halfwords
14425 *
14426 * 3 2 1
14427 * 10987654321098765432109876543210
14428 * 001000 001111111111
14429 * rt -----
14430 * rs -----
14431 * sa ----
14432 */
14433std::string NMD::SHRL_PH(uint64 instruction)
14434{
14435 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14436 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14437 uint64 sa_value = extract_sa_15_14_13_12(instruction);
14438
14439 std::string rt = GPR(copy(rt_value));
14440 std::string rs = GPR(copy(rs_value));
14441 std::string sa = IMMEDIATE(copy(sa_value));
14442
14443 return img::format("SHRL.PH %s, %s, %s", rt, rs, sa);
14444}
14445
14446
14447/*
14448 * [DSP] SHRL.QB rt, rs, sa - Shift right logical vector quad bytes
14449 *
14450 * 3 2 1
14451 * 10987654321098765432109876543210
14452 * 001000 1100001111111
14453 * rt -----
14454 * rs -----
14455 * sa ---
14456 */
14457std::string NMD::SHRL_QB(uint64 instruction)
14458{
14459 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14460 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14461 uint64 sa_value = extract_sa_15_14_13(instruction);
14462
14463 std::string rt = GPR(copy(rt_value));
14464 std::string rs = GPR(copy(rs_value));
14465 std::string sa = IMMEDIATE(copy(sa_value));
14466
14467 return img::format("SHRL.QB %s, %s, %s", rt, rs, sa);
14468}
14469
14470
14471/*
14472 * [DSP] SHLLV.PH rd, rt, rs - Shift right logical variable vector pair of
14473 * halfwords
14474 *
14475 * 3 2 1
14476 * 10987654321098765432109876543210
14477 * 001000 x1100010101
14478 * rt -----
14479 * rs -----
14480 * rd -----
14481 */
14482std::string NMD::SHRLV_PH(uint64 instruction)
14483{
14484 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14485 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14486 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14487
14488 std::string rd = GPR(copy(rd_value));
14489 std::string rt = GPR(copy(rt_value));
14490 std::string rs = GPR(copy(rs_value));
14491
14492 return img::format("SHRLV.PH %s, %s, %s", rd, rt, rs);
14493}
14494
14495
14496/*
14497 * [DSP] SHLLV.QB rd, rt, rs - Shift right logical variable vector quad bytes
14498 *
14499 * 3 2 1
14500 * 10987654321098765432109876543210
14501 * 001000 x1101010101
14502 * rt -----
14503 * rs -----
14504 * rd -----
14505 */
14506std::string NMD::SHRLV_QB(uint64 instruction)
14507{
14508 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14509 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14510 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14511
14512 std::string rd = GPR(copy(rd_value));
14513 std::string rt = GPR(copy(rt_value));
14514 std::string rs = GPR(copy(rs_value));
14515
14516 return img::format("SHRLV.QB %s, %s, %s", rd, rt, rs);
14517}
14518
14519
14520/*
14521 *
14522 *
14523 * 3 2 1
14524 * 10987654321098765432109876543210
14525 * 001000 01001001101
14526 * rt -----
14527 * rs -----
14528 * rd -----
14529 */
14530std::string NMD::SHX(uint64 instruction)
14531{
14532 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14533 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14534 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14535
14536 std::string rd = GPR(copy(rd_value));
14537 std::string rs = GPR(copy(rs_value));
14538 std::string rt = GPR(copy(rt_value));
14539
14540 return img::format("SHX %s, %s(%s)", rd, rs, rt);
14541}
14542
14543
14544/*
14545 *
14546 *
14547 * 3 2 1
14548 * 10987654321098765432109876543210
14549 * 001000 01001001101
14550 * rt -----
14551 * rs -----
14552 * rd -----
14553 */
14554std::string NMD::SHXS(uint64 instruction)
14555{
14556 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14557 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14558 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14559
14560 std::string rd = GPR(copy(rd_value));
14561 std::string rs = GPR(copy(rs_value));
14562 std::string rt = GPR(copy(rt_value));
14563
14564 return img::format("SHXS %s, %s(%s)", rd, rs, rt);
14565}
14566
14567
14568/*
14569 *
14570 *
14571 * 3 2 1
14572 * 10987654321098765432109876543210
14573 * 001000 01001001101
14574 * rt -----
14575 * rs -----
14576 * rd -----
14577 */
14578std::string NMD::SIGRIE(uint64 instruction)
14579{
14580 uint64 code_value = extract_code_18_to_0(instruction);
14581
14582 std::string code = IMMEDIATE(copy(code_value));
14583
14584 return img::format("SIGRIE %s", code);
14585}
14586
14587
14588/*
14589 *
14590 *
14591 * 3 2 1
14592 * 10987654321098765432109876543210
14593 * 001000 01001001101
14594 * rt -----
14595 * rs -----
14596 * rd -----
14597 */
14598std::string NMD::SLL_16_(uint64 instruction)
14599{
14600 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14601 uint64 rs3_value = extract_rs3_6_5_4(instruction);
14602 uint64 shift3_value = extract_shift3_2_1_0(instruction);
14603
14604 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
14605 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
14606 std::string shift3 = IMMEDIATE(encode_shift3_from_shift(shift3_value));
14607
14608 return img::format("SLL %s, %s, %s", rt3, rs3, shift3);
14609}
14610
14611
14612/*
14613 *
14614 *
14615 * 3 2 1
14616 * 10987654321098765432109876543210
14617 * 001000 01001001101
14618 * rt -----
14619 * rs -----
14620 * rd -----
14621 */
14622std::string NMD::SLL_32_(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 shift_value = extract_shift_4_3_2_1_0(instruction);
14627
14628 std::string rt = GPR(copy(rt_value));
14629 std::string rs = GPR(copy(rs_value));
14630 std::string shift = IMMEDIATE(copy(shift_value));
14631
14632 return img::format("SLL %s, %s, %s", rt, rs, shift);
14633}
14634
14635
14636/*
14637 *
14638 *
14639 * 3 2 1
14640 * 10987654321098765432109876543210
14641 * 001000 01001001101
14642 * rt -----
14643 * rs -----
14644 * rd -----
14645 */
14646std::string NMD::SLLV(uint64 instruction)
14647{
14648 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14649 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14650 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14651
14652 std::string rd = GPR(copy(rd_value));
14653 std::string rs = GPR(copy(rs_value));
14654 std::string rt = GPR(copy(rt_value));
14655
14656 return img::format("SLLV %s, %s, %s", rd, rs, rt);
14657}
14658
14659
14660/*
14661 *
14662 *
14663 * 3 2 1
14664 * 10987654321098765432109876543210
14665 * 001000 01001001101
14666 * rt -----
14667 * rs -----
14668 * rd -----
14669 */
14670std::string NMD::SLT(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 rd_value = extract_rd_15_14_13_12_11(instruction);
14675
14676 std::string rd = GPR(copy(rd_value));
14677 std::string rs = GPR(copy(rs_value));
14678 std::string rt = GPR(copy(rt_value));
14679
14680 return img::format("SLT %s, %s, %s", rd, rs, rt);
14681}
14682
14683
14684/*
14685 *
14686 *
14687 * 3 2 1
14688 * 10987654321098765432109876543210
14689 * 001000 01001001101
14690 * rt -----
14691 * rs -----
14692 * rd -----
14693 */
14694std::string NMD::SLTI(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 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14699
14700 std::string rt = GPR(copy(rt_value));
14701 std::string rs = GPR(copy(rs_value));
14702 std::string u = IMMEDIATE(copy(u_value));
14703
14704 return img::format("SLTI %s, %s, %s", rt, rs, u);
14705}
14706
14707
14708/*
14709 *
14710 *
14711 * 3 2 1
14712 * 10987654321098765432109876543210
14713 * 001000 01001001101
14714 * rt -----
14715 * rs -----
14716 * rd -----
14717 */
14718std::string NMD::SLTIU(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 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14723
14724 std::string rt = GPR(copy(rt_value));
14725 std::string rs = GPR(copy(rs_value));
14726 std::string u = IMMEDIATE(copy(u_value));
14727
14728 return img::format("SLTIU %s, %s, %s", rt, rs, u);
14729}
14730
14731
14732/*
14733 *
14734 *
14735 * 3 2 1
14736 * 10987654321098765432109876543210
14737 * 001000 01001001101
14738 * rt -----
14739 * rs -----
14740 * rd -----
14741 */
14742std::string NMD::SLTU(uint64 instruction)
14743{
14744 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14745 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14746 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14747
14748 std::string rd = GPR(copy(rd_value));
14749 std::string rs = GPR(copy(rs_value));
14750 std::string rt = GPR(copy(rt_value));
14751
14752 return img::format("SLTU %s, %s, %s", rd, rs, rt);
14753}
14754
14755
14756/*
14757 *
14758 *
14759 * 3 2 1
14760 * 10987654321098765432109876543210
14761 * 001000 01001001101
14762 * rt -----
14763 * rs -----
14764 * rd -----
14765 */
14766std::string NMD::SOV(uint64 instruction)
14767{
14768 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14769 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14770 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14771
14772 std::string rd = GPR(copy(rd_value));
14773 std::string rs = GPR(copy(rs_value));
14774 std::string rt = GPR(copy(rt_value));
14775
14776 return img::format("SOV %s, %s, %s", rd, rs, rt);
14777}
14778
14779
14780/*
14781 *
14782 *
14783 * 3 2 1
14784 * 10987654321098765432109876543210
14785 * 001000 01001001101
14786 * rt -----
14787 * rs -----
14788 * rd -----
14789 */
14790std::string NMD::SPECIAL2(uint64 instruction)
14791{
14792 uint64 op_value = extract_op_25_to_3(instruction);
14793
14794 std::string op = IMMEDIATE(copy(op_value));
14795
14796 return img::format("SPECIAL2 %s", op);
14797}
14798
14799
14800/*
14801 *
14802 *
14803 * 3 2 1
14804 * 10987654321098765432109876543210
14805 * 001000 01001001101
14806 * rt -----
14807 * rs -----
14808 * rd -----
14809 */
14810std::string NMD::SQRT_D(uint64 instruction)
14811{
14812 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14813 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14814
14815 std::string ft = FPR(copy(ft_value));
14816 std::string fs = FPR(copy(fs_value));
14817
14818 return img::format("SQRT.D %s, %s", ft, fs);
14819}
14820
14821
14822/*
14823 *
14824 *
14825 * 3 2 1
14826 * 10987654321098765432109876543210
14827 * 001000 01001001101
14828 * rt -----
14829 * rs -----
14830 * rd -----
14831 */
14832std::string NMD::SQRT_S(uint64 instruction)
14833{
14834 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14835 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14836
14837 std::string ft = FPR(copy(ft_value));
14838 std::string fs = FPR(copy(fs_value));
14839
14840 return img::format("SQRT.S %s, %s", ft, fs);
14841}
14842
14843
14844/*
14845 * SRA rd, rt, sa - Shift Word Right Arithmetic
14846 *
14847 * 3 2 1
14848 * 10987654321098765432109876543210
14849 * 00000000000 000011
14850 * rt -----
14851 * rd -----
14852 * sa -----
14853 */
14854std::string NMD::SRA(uint64 instruction)
14855{
14856 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14857 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14858 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14859
14860 std::string rt = GPR(copy(rt_value));
14861 std::string rs = GPR(copy(rs_value));
14862 std::string shift = IMMEDIATE(copy(shift_value));
14863
14864 return img::format("SRA %s, %s, %s", rt, rs, shift);
14865}
14866
14867
14868/*
14869 * SRAV rd, rt, rs - Shift Word Right Arithmetic Variable
14870 *
14871 * 3 2 1
14872 * 10987654321098765432109876543210
14873 * 001000 00000000111
14874 * rs -----
14875 * rt -----
14876 * rd -----
14877 */
14878std::string NMD::SRAV(uint64 instruction)
14879{
14880 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14881 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14882 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14883
14884 std::string rd = GPR(copy(rd_value));
14885 std::string rs = GPR(copy(rs_value));
14886 std::string rt = GPR(copy(rt_value));
14887
14888 return img::format("SRAV %s, %s, %s", rd, rs, rt);
14889}
14890
14891
14892/*
14893 *
14894 *
14895 * 3 2 1
14896 * 10987654321098765432109876543210
14897 * 001000 00000000111
14898 * rs -----
14899 * rt -----
14900 * rd -----
14901 */
14902std::string NMD::SRL_16_(uint64 instruction)
14903{
14904 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14905 uint64 rs3_value = extract_rs3_6_5_4(instruction);
14906 uint64 shift3_value = extract_shift3_2_1_0(instruction);
14907
14908 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
14909 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
14910 std::string shift3 = IMMEDIATE(encode_shift3_from_shift(shift3_value));
14911
14912 return img::format("SRL %s, %s, %s", rt3, rs3, shift3);
14913}
14914
14915
14916/*
14917 *
14918 *
14919 * 3 2 1
14920 * 10987654321098765432109876543210
14921 * 001000 01001001101
14922 * rt -----
14923 * rs -----
14924 * rd -----
14925 */
14926std::string NMD::SRL_32_(uint64 instruction)
14927{
14928 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14929 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14930 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14931
14932 std::string rt = GPR(copy(rt_value));
14933 std::string rs = GPR(copy(rs_value));
14934 std::string shift = IMMEDIATE(copy(shift_value));
14935
14936 return img::format("SRL %s, %s, %s", rt, rs, shift);
14937}
14938
14939
14940/*
14941 *
14942 *
14943 * 3 2 1
14944 * 10987654321098765432109876543210
14945 * 001000 01001001101
14946 * rt -----
14947 * rs -----
14948 * rd -----
14949 */
14950std::string NMD::SRLV(uint64 instruction)
14951{
14952 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14953 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14954 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14955
14956 std::string rd = GPR(copy(rd_value));
14957 std::string rs = GPR(copy(rs_value));
14958 std::string rt = GPR(copy(rt_value));
14959
14960 return img::format("SRLV %s, %s, %s", rd, rs, rt);
14961}
14962
14963
14964/*
14965 *
14966 *
14967 * 3 2 1
14968 * 10987654321098765432109876543210
14969 * 001000 01001001101
14970 * rt -----
14971 * rs -----
14972 * rd -----
14973 */
14974std::string NMD::SUB(uint64 instruction)
14975{
14976 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14977 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14978 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14979
14980 std::string rd = GPR(copy(rd_value));
14981 std::string rs = GPR(copy(rs_value));
14982 std::string rt = GPR(copy(rt_value));
14983
14984 return img::format("SUB %s, %s, %s", rd, rs, rt);
14985}
14986
14987
14988/*
14989 *
14990 *
14991 * 3 2 1
14992 * 10987654321098765432109876543210
14993 * 001000 01001001101
14994 * rt -----
14995 * rs -----
14996 * rd -----
14997 */
14998std::string NMD::SUB_D(uint64 instruction)
14999{
15000 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15001 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15002 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
15003
15004 std::string fd = FPR(copy(fd_value));
15005 std::string fs = FPR(copy(fs_value));
15006 std::string ft = FPR(copy(ft_value));
15007
15008 return img::format("SUB.D %s, %s, %s", fd, fs, ft);
15009}
15010
15011
15012/*
15013 *
15014 *
15015 * 3 2 1
15016 * 10987654321098765432109876543210
15017 * 001000 01001001101
15018 * rt -----
15019 * rs -----
15020 * rd -----
15021 */
15022std::string NMD::SUB_S(uint64 instruction)
15023{
15024 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15025 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15026 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
15027
15028 std::string fd = FPR(copy(fd_value));
15029 std::string fs = FPR(copy(fs_value));
15030 std::string ft = FPR(copy(ft_value));
15031
15032 return img::format("SUB.S %s, %s, %s", fd, fs, ft);
15033}
15034
15035
15036/*
15037 *
15038 *
15039 * 3 2 1
15040 * 10987654321098765432109876543210
15041 * 001000 01001001101
15042 * rt -----
15043 * rs -----
15044 * rd -----
15045 */
15046std::string NMD::SUBQ_PH(uint64 instruction)
15047{
15048 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15049 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15050 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15051
15052 std::string rd = GPR(copy(rd_value));
15053 std::string rs = GPR(copy(rs_value));
15054 std::string rt = GPR(copy(rt_value));
15055
15056 return img::format("SUBQ.PH %s, %s, %s", rd, rs, rt);
15057}
15058
15059
15060/*
15061 * [DSP] SUBQ.S.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15062 * right to halve results
15063 *
15064 * 3 2 1
15065 * 10987654321098765432109876543210
15066 * 001000 01001001101
15067 * rt -----
15068 * rs -----
15069 * rd -----
15070 */
15071std::string NMD::SUBQ_S_PH(uint64 instruction)
15072{
15073 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15074 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15075 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15076
15077 std::string rd = GPR(copy(rd_value));
15078 std::string rs = GPR(copy(rs_value));
15079 std::string rt = GPR(copy(rt_value));
15080
15081 return img::format("SUBQ_S.PH %s, %s, %s", rd, rs, rt);
15082}
15083
15084
15085/*
15086 * [DSP] SUBQ.S.W rd, rt, rs - Subtract fractional halfword vectors and shift
15087 * right to halve results
15088 *
15089 * 3 2 1
15090 * 10987654321098765432109876543210
15091 * 001000 01001001101
15092 * rt -----
15093 * rs -----
15094 * rd -----
15095 */
15096std::string NMD::SUBQ_S_W(uint64 instruction)
15097{
15098 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15099 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15100 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15101
15102 std::string rd = GPR(copy(rd_value));
15103 std::string rs = GPR(copy(rs_value));
15104 std::string rt = GPR(copy(rt_value));
15105
15106 return img::format("SUBQ_S.W %s, %s, %s", rd, rs, rt);
15107}
15108
15109
15110/*
15111 * [DSP] SUBQH.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15112 * right to halve results
15113 *
15114 * 3 2 1
15115 * 10987654321098765432109876543210
15116 * 001000 01001001101
15117 * rt -----
15118 * rs -----
15119 * rd -----
15120 */
15121std::string NMD::SUBQH_PH(uint64 instruction)
15122{
15123 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15124 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15125 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15126
15127 std::string rd = GPR(copy(rd_value));
15128 std::string rs = GPR(copy(rs_value));
15129 std::string rt = GPR(copy(rt_value));
15130
15131 return img::format("SUBQH.PH %s, %s, %s", rd, rs, rt);
15132}
15133
15134
15135/*
15136 * [DSP] SUBQH_R.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15137 * right to halve results
15138 *
15139 * 3 2 1
15140 * 10987654321098765432109876543210
15141 * 001000 01001001101
15142 * rt -----
15143 * rs -----
15144 * rd -----
15145 */
15146std::string NMD::SUBQH_R_PH(uint64 instruction)
15147{
15148 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15149 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15150 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15151
15152 std::string rd = GPR(copy(rd_value));
15153 std::string rs = GPR(copy(rs_value));
15154 std::string rt = GPR(copy(rt_value));
15155
15156 return img::format("SUBQH_R.PH %s, %s, %s", rd, rs, rt);
15157}
15158
15159
15160/*
15161 * [DSP] SUBQH_R.W rd, rt, rs - Subtract fractional halfword vectors and shift
15162 * right to halve results with rounding
15163 *
15164 * 3 2 1
15165 * 10987654321098765432109876543210
15166 * 001000 11001001101
15167 * rt -----
15168 * rs -----
15169 * rd -----
15170 */
15171std::string NMD::SUBQH_R_W(uint64 instruction)
15172{
15173 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15174 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15175 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15176
15177 std::string rd = GPR(copy(rd_value));
15178 std::string rs = GPR(copy(rs_value));
15179 std::string rt = GPR(copy(rt_value));
15180
15181 return img::format("SUBQH_R.W %s, %s, %s", rd, rs, rt);
15182}
15183
15184
15185/*
15186 * [DSP] SUBQH.W rd, rs, rt - Subtract fractional words and shift right to
15187 * halve results
15188 *
15189 * 3 2 1
15190 * 10987654321098765432109876543210
15191 * 001000 01010001101
15192 * rt -----
15193 * rs -----
15194 * rd -----
15195 */
15196std::string NMD::SUBQH_W(uint64 instruction)
15197{
15198 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15199 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15200 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15201
15202 std::string rd = GPR(copy(rd_value));
15203 std::string rs = GPR(copy(rs_value));
15204 std::string rt = GPR(copy(rt_value));
15205
15206 return img::format("SUBQH.W %s, %s, %s", rd, rs, rt);
15207}
15208
15209
15210/*
15211 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15212 *
15213 * 3 2 1
15214 * 10987654321098765432109876543210
15215 * 001000 00010001101
15216 * rt -----
15217 * rs -----
15218 * rd -----
15219 */
15220std::string NMD::SUBU_16_(uint64 instruction)
15221{
15222 uint64 rt3_value = extract_rt3_9_8_7(instruction);
15223 uint64 rs3_value = extract_rs3_6_5_4(instruction);
15224 uint64 rd3_value = extract_rd3_3_2_1(instruction);
15225
15226 std::string rd3 = GPR(decode_gpr_gpr3(rd3_value));
15227 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
15228 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
15229
15230 return img::format("SUBU %s, %s, %s", rd3, rs3, rt3);
15231}
15232
15233
15234/*
15235 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15236 *
15237 * 3 2 1
15238 * 10987654321098765432109876543210
15239 * 001000 00010001101
15240 * rt -----
15241 * rs -----
15242 * rd -----
15243 */
15244std::string NMD::SUBU_32_(uint64 instruction)
15245{
15246 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15247 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15248 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15249
15250 std::string rd = GPR(copy(rd_value));
15251 std::string rs = GPR(copy(rs_value));
15252 std::string rt = GPR(copy(rt_value));
15253
15254 return img::format("SUBU %s, %s, %s", rd, rs, rt);
15255}
15256
15257
15258/*
15259 * [DSP] SUBU.PH rd, rs, rt - Subtract unsigned unsigned halfwords
15260 *
15261 * 3 2 1
15262 * 10987654321098765432109876543210
15263 * 001000 01100001101
15264 * rt -----
15265 * rs -----
15266 * rd -----
15267 */
15268std::string NMD::SUBU_PH(uint64 instruction)
15269{
15270 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15271 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15272 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15273
15274 std::string rd = GPR(copy(rd_value));
15275 std::string rs = GPR(copy(rs_value));
15276 std::string rt = GPR(copy(rt_value));
15277
15278 return img::format("SUBU.PH %s, %s, %s", rd, rs, rt);
15279}
15280
15281
15282/*
15283 * [DSP] SUBU.QB rd, rs, rt - Subtract unsigned quad byte vectors
15284 *
15285 * 3 2 1
15286 * 10987654321098765432109876543210
15287 * 001000 01011001101
15288 * rt -----
15289 * rs -----
15290 * rd -----
15291 */
15292std::string NMD::SUBU_QB(uint64 instruction)
15293{
15294 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15295 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15296 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15297
15298 std::string rd = GPR(copy(rd_value));
15299 std::string rs = GPR(copy(rs_value));
15300 std::string rt = GPR(copy(rt_value));
15301
15302 return img::format("SUBU.QB %s, %s, %s", rd, rs, rt);
15303}
15304
15305
15306/*
15307 * [DSP] SUBU_S.PH rd, rs, rt - Subtract unsigned unsigned halfwords with
15308 * 8-bit saturation
15309 *
15310 * 3 2 1
15311 * 10987654321098765432109876543210
15312 * 001000 11100001101
15313 * rt -----
15314 * rs -----
15315 * rd -----
15316 */
15317std::string NMD::SUBU_S_PH(uint64 instruction)
15318{
15319 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15320 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15321 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15322
15323 std::string rd = GPR(copy(rd_value));
15324 std::string rs = GPR(copy(rs_value));
15325 std::string rt = GPR(copy(rt_value));
15326
15327 return img::format("SUBU_S.PH %s, %s, %s", rd, rs, rt);
15328}
15329
15330
15331/*
15332 * [DSP] SUBU_S.QB rd, rs, rt - Subtract unsigned quad byte vectors with
15333 * 8-bit saturation
15334 *
15335 * 3 2 1
15336 * 10987654321098765432109876543210
15337 * 001000 11011001101
15338 * rt -----
15339 * rs -----
15340 * rd -----
15341 */
15342std::string NMD::SUBU_S_QB(uint64 instruction)
15343{
15344 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15345 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15346 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15347
15348 std::string rd = GPR(copy(rd_value));
15349 std::string rs = GPR(copy(rs_value));
15350 std::string rt = GPR(copy(rt_value));
15351
15352 return img::format("SUBU_S.QB %s, %s, %s", rd, rs, rt);
15353}
15354
15355
15356/*
15357 * [DSP] SUBUH.QB rd, rs, rt - Subtract unsigned bytes and right shift
15358 * to halve results
15359 *
15360 * 3 2 1
15361 * 10987654321098765432109876543210
15362 * 001000 01101001101
15363 * rt -----
15364 * rs -----
15365 * rd -----
15366 */
15367std::string NMD::SUBUH_QB(uint64 instruction)
15368{
15369 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15370 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15371 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15372
15373 std::string rd = GPR(copy(rd_value));
15374 std::string rs = GPR(copy(rs_value));
15375 std::string rt = GPR(copy(rt_value));
15376
15377 return img::format("SUBUH.QB %s, %s, %s", rd, rs, rt);
15378}
15379
15380
15381/*
15382 * [DSP] SUBUH_R.QB rd, rs, rt - Subtract unsigned bytes and right shift
15383 * to halve results with rounding
15384 *
15385 * 3 2 1
15386 * 10987654321098765432109876543210
15387 * 001000 11101001101
15388 * rt -----
15389 * rs -----
15390 * rd -----
15391 */
15392std::string NMD::SUBUH_R_QB(uint64 instruction)
15393{
15394 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15395 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15396 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15397
15398 std::string rd = GPR(copy(rd_value));
15399 std::string rs = GPR(copy(rs_value));
15400 std::string rt = GPR(copy(rt_value));
15401
15402 return img::format("SUBUH_R.QB %s, %s, %s", rd, rs, rt);
15403}
15404
15405
15406/*
15407 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15408 *
15409 * 3 2 1
15410 * 10987654321098765432109876543210
15411 * 001000 00010001101
15412 * rt -----
15413 * rs -----
15414 * rd -----
15415 */
15416std::string NMD::SW_16_(uint64 instruction)
15417{
15418 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
15419 uint64 rs3_value = extract_rs3_6_5_4(instruction);
15420 uint64 u_value = extract_u_3_2_1_0__s2(instruction);
15421
15422 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
15423 std::string u = IMMEDIATE(copy(u_value));
15424 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
15425
15426 return img::format("SW %s, %s(%s)", rtz3, u, rs3);
15427}
15428
15429
15430/*
15431 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15432 *
15433 * 3 2 1
15434 * 10987654321098765432109876543210
15435 * 001000 00010001101
15436 * rt -----
15437 * rs -----
15438 * rd -----
15439 */
15440std::string NMD::SW_4X4_(uint64 instruction)
15441{
15442 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
15443 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
15444 uint64 u_value = extract_u_3_8__s2(instruction);
15445
15446 std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
15447 std::string u = IMMEDIATE(copy(u_value));
15448 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
15449
15450 return img::format("SW %s, %s(%s)", rtz4, u, rs4);
15451}
15452
15453
15454/*
15455 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15456 *
15457 * 3 2 1
15458 * 10987654321098765432109876543210
15459 * 001000 00010001101
15460 * rt -----
15461 * rs -----
15462 * rd -----
15463 */
15464std::string NMD::SW_GP16_(uint64 instruction)
15465{
15466 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
15467 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
15468
15469 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
15470 std::string u = IMMEDIATE(copy(u_value));
15471
15472 return img::format("SW %s, %s($%d)", rtz3, u, 28);
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 */
15486std::string NMD::SW_GP_(uint64 instruction)
15487{
15488 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15489 uint64 u_value = extract_u_20_to_2__s2(instruction);
15490
15491 std::string rt = GPR(copy(rt_value));
15492 std::string u = IMMEDIATE(copy(u_value));
15493
15494 return img::format("SW %s, %s($%d)", rt, u, 28);
15495}
15496
15497
15498/*
15499 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15500 *
15501 * 3 2 1
15502 * 10987654321098765432109876543210
15503 * 001000 00010001101
15504 * rt -----
15505 * rs -----
15506 * rd -----
15507 */
15508std::string NMD::SW_S9_(uint64 instruction)
15509{
15510 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15511 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15512 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15513
15514 std::string rt = GPR(copy(rt_value));
15515 std::string s = IMMEDIATE(copy(s_value));
15516 std::string rs = GPR(copy(rs_value));
15517
15518 return img::format("SW %s, %s(%s)", rt, s, rs);
15519}
15520
15521
15522/*
15523 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15524 *
15525 * 3 2 1
15526 * 10987654321098765432109876543210
15527 * 001000 00010001101
15528 * rt -----
15529 * rs -----
15530 * rd -----
15531 */
15532std::string NMD::SW_SP_(uint64 instruction)
15533{
15534 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
15535 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
15536
15537 std::string rt = GPR(copy(rt_value));
15538 std::string u = IMMEDIATE(copy(u_value));
15539
15540 return img::format("SW %s, %s($%d)", rt, u, 29);
15541}
15542
15543
15544/*
15545 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15546 *
15547 * 3 2 1
15548 * 10987654321098765432109876543210
15549 * 001000 00010001101
15550 * rt -----
15551 * rs -----
15552 * rd -----
15553 */
15554std::string NMD::SW_U12_(uint64 instruction)
15555{
15556 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15557 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15558 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15559
15560 std::string rt = GPR(copy(rt_value));
15561 std::string u = IMMEDIATE(copy(u_value));
15562 std::string rs = GPR(copy(rs_value));
15563
15564 return img::format("SW %s, %s(%s)", rt, u, rs);
15565}
15566
15567
15568/*
15569 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15570 *
15571 * 3 2 1
15572 * 10987654321098765432109876543210
15573 * 001000 00010001101
15574 * rt -----
15575 * rs -----
15576 * rd -----
15577 */
15578std::string NMD::SWC1_GP_(uint64 instruction)
15579{
15580 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15581 uint64 u_value = extract_u_17_to_2__s2(instruction);
15582
15583 std::string ft = FPR(copy(ft_value));
15584 std::string u = IMMEDIATE(copy(u_value));
15585
15586 return img::format("SWC1 %s, %s($%d)", ft, u, 28);
15587}
15588
15589
15590/*
15591 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15592 *
15593 * 3 2 1
15594 * 10987654321098765432109876543210
15595 * 001000 00010001101
15596 * rt -----
15597 * rs -----
15598 * rd -----
15599 */
15600std::string NMD::SWC1_S9_(uint64 instruction)
15601{
15602 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15603 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15604 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15605
15606 std::string ft = FPR(copy(ft_value));
15607 std::string s = IMMEDIATE(copy(s_value));
15608 std::string rs = GPR(copy(rs_value));
15609
15610 return img::format("SWC1 %s, %s(%s)", ft, 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 */
15624std::string NMD::SWC1_U12_(uint64 instruction)
15625{
15626 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15627 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15628 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15629
15630 std::string ft = FPR(copy(ft_value));
15631 std::string u = IMMEDIATE(copy(u_value));
15632 std::string rs = GPR(copy(rs_value));
15633
15634 return img::format("SWC1 %s, %s(%s)", ft, u, rs);
15635}
15636
15637
15638/*
15639 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15640 *
15641 * 3 2 1
15642 * 10987654321098765432109876543210
15643 * 001000 00010001101
15644 * rt -----
15645 * rs -----
15646 * rd -----
15647 */
15648std::string NMD::SWC1X(uint64 instruction)
15649{
15650 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15651 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15652 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15653
15654 std::string ft = FPR(copy(ft_value));
15655 std::string rs = GPR(copy(rs_value));
15656 std::string rt = GPR(copy(rt_value));
15657
15658 return img::format("SWC1X %s, %s(%s)", ft, rs, rt);
15659}
15660
15661
15662/*
15663 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15664 *
15665 * 3 2 1
15666 * 10987654321098765432109876543210
15667 * 001000 00010001101
15668 * rt -----
15669 * rs -----
15670 * rd -----
15671 */
15672std::string NMD::SWC1XS(uint64 instruction)
15673{
15674 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15675 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15676 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15677
15678 std::string ft = FPR(copy(ft_value));
15679 std::string rs = GPR(copy(rs_value));
15680 std::string rt = GPR(copy(rt_value));
15681
15682 return img::format("SWC1XS %s, %s(%s)", ft, rs, rt);
15683}
15684
15685
15686/*
15687 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15688 *
15689 * 3 2 1
15690 * 10987654321098765432109876543210
15691 * 001000 00010001101
15692 * rt -----
15693 * rs -----
15694 * rd -----
15695 */
15696std::string NMD::SWC2(uint64 instruction)
15697{
15698 uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
15699 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15700 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15701
15702 std::string cs = CPR(copy(cs_value));
15703 std::string s = IMMEDIATE(copy(s_value));
15704 std::string rs = GPR(copy(rs_value));
15705
15706 return img::format("SWC2 %s, %s(%s)", cs, s, rs);
15707}
15708
15709
15710/*
15711 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15712 *
15713 * 3 2 1
15714 * 10987654321098765432109876543210
15715 * 001000 00010001101
15716 * rt -----
15717 * rs -----
15718 * rd -----
15719 */
15720std::string NMD::SWE(uint64 instruction)
15721{
15722 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15723 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15724 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15725
15726 std::string rt = GPR(copy(rt_value));
15727 std::string s = IMMEDIATE(copy(s_value));
15728 std::string rs = GPR(copy(rs_value));
15729
15730 return img::format("SWE %s, %s(%s)", rt, s, rs);
15731}
15732
15733
15734/*
15735 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15736 *
15737 * 3 2 1
15738 * 10987654321098765432109876543210
15739 * 001000 00010001101
15740 * rt -----
15741 * rs -----
15742 * rd -----
15743 */
15744std::string NMD::SWM(uint64 instruction)
15745{
15746 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15747 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15748 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15749 uint64 count3_value = extract_count3_14_13_12(instruction);
15750
15751 std::string rt = GPR(copy(rt_value));
15752 std::string s = IMMEDIATE(copy(s_value));
15753 std::string rs = GPR(copy(rs_value));
15754 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
15755
15756 return img::format("SWM %s, %s(%s), %s", rt, s, rs, count3);
15757}
15758
15759
15760/*
15761 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15762 *
15763 * 3 2 1
15764 * 10987654321098765432109876543210
15765 * 001000 00010001101
15766 * rt -----
15767 * rs -----
15768 * rd -----
15769 */
15770std::string NMD::SWPC_48_(uint64 instruction)
15771{
15772 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
15773 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
15774
15775 std::string rt = GPR(copy(rt_value));
15776 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
15777
15778 return img::format("SWPC %s, %s", rt, s);
15779}
15780
15781
15782/*
15783 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15784 *
15785 * 3 2 1
15786 * 10987654321098765432109876543210
15787 * 001000 00010001101
15788 * rt -----
15789 * rs -----
15790 * rd -----
15791 */
15792std::string NMD::SWX(uint64 instruction)
15793{
15794 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15795 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15796 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15797
15798 std::string rd = GPR(copy(rd_value));
15799 std::string rs = GPR(copy(rs_value));
15800 std::string rt = GPR(copy(rt_value));
15801
15802 return img::format("SWX %s, %s(%s)", rd, rs, rt);
15803}
15804
15805
15806/*
15807 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15808 *
15809 * 3 2 1
15810 * 10987654321098765432109876543210
15811 * 001000 00010001101
15812 * rt -----
15813 * rs -----
15814 * rd -----
15815 */
15816std::string NMD::SWXS(uint64 instruction)
15817{
15818 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15819 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15820 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15821
15822 std::string rd = GPR(copy(rd_value));
15823 std::string rs = GPR(copy(rs_value));
15824 std::string rt = GPR(copy(rt_value));
15825
15826 return img::format("SWXS %s, %s(%s)", rd, rs, rt);
15827}
15828
15829
15830/*
15831 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15832 *
15833 * 3 2 1
15834 * 10987654321098765432109876543210
15835 * 001000 00010001101
15836 * rt -----
15837 * rs -----
15838 * rd -----
15839 */
15840std::string NMD::SYNC(uint64 instruction)
15841{
15842 uint64 stype_value = extract_stype_20_19_18_17_16(instruction);
15843
15844 std::string stype = IMMEDIATE(copy(stype_value));
15845
15846 return img::format("SYNC %s", stype);
15847}
15848
15849
15850/*
15851 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15852 *
15853 * 3 2 1
15854 * 10987654321098765432109876543210
15855 * 001000 00010001101
15856 * rt -----
15857 * rs -----
15858 * rd -----
15859 */
15860std::string NMD::SYNCI(uint64 instruction)
15861{
15862 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15863 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15864
15865 std::string s = IMMEDIATE(copy(s_value));
15866 std::string rs = GPR(copy(rs_value));
15867
15868 return img::format("SYNCI %s(%s)", s, rs);
15869}
15870
15871
15872/*
15873 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15874 *
15875 * 3 2 1
15876 * 10987654321098765432109876543210
15877 * 001000 00010001101
15878 * rt -----
15879 * rs -----
15880 * rd -----
15881 */
15882std::string NMD::SYNCIE(uint64 instruction)
15883{
15884 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15885 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15886
15887 std::string s = IMMEDIATE(copy(s_value));
15888 std::string rs = GPR(copy(rs_value));
15889
15890 return img::format("SYNCIE %s(%s)", s, rs);
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 */
15904std::string NMD::SYSCALL_16_(uint64 instruction)
15905{
15906 uint64 code_value = extract_code_1_0(instruction);
15907
15908 std::string code = IMMEDIATE(copy(code_value));
15909
15910 return img::format("SYSCALL %s", code);
15911}
15912
15913
15914/*
15915 * SYSCALL code - System Call. Cause a System Call Exception
15916 *
15917 * 3 2 1
15918 * 10987654321098765432109876543210
15919 * 00000000000010
15920 * code ------------------
15921 */
15922std::string NMD::SYSCALL_32_(uint64 instruction)
15923{
15924 uint64 code_value = extract_code_17_to_0(instruction);
15925
15926 std::string code = IMMEDIATE(copy(code_value));
15927
15928 return img::format("SYSCALL %s", code);
15929}
15930
15931
15932/*
15933 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15934 *
15935 * 3 2 1
15936 * 10987654321098765432109876543210
15937 * 001000 00010001101
15938 * rt -----
15939 * rs -----
15940 * rd -----
15941 */
15942std::string NMD::TEQ(uint64 instruction)
15943{
15944 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15945 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15946
15947 std::string rs = GPR(copy(rs_value));
15948 std::string rt = GPR(copy(rt_value));
15949
15950 return img::format("TEQ %s, %s", rs, rt);
15951}
15952
15953
15954/*
15955 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15956 *
15957 * 3 2 1
15958 * 10987654321098765432109876543210
15959 * 001000 00010001101
15960 * rt -----
15961 * rs -----
15962 * rd -----
15963 */
15964std::string NMD::TLBGINV(uint64 instruction)
15965{
15966 (void)instruction;
15967
15968 return "TLBGINV ";
15969}
15970
15971
15972/*
15973 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15974 *
15975 * 3 2 1
15976 * 10987654321098765432109876543210
15977 * 001000 00010001101
15978 * rt -----
15979 * rs -----
15980 * rd -----
15981 */
15982std::string NMD::TLBGINVF(uint64 instruction)
15983{
15984 (void)instruction;
15985
15986 return "TLBGINVF ";
15987}
15988
15989
15990/*
15991 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15992 *
15993 * 3 2 1
15994 * 10987654321098765432109876543210
15995 * 001000 00010001101
15996 * rt -----
15997 * rs -----
15998 * rd -----
15999 */
16000std::string NMD::TLBGP(uint64 instruction)
16001{
16002 (void)instruction;
16003
16004 return "TLBGP ";
16005}
16006
16007
16008/*
16009 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16010 *
16011 * 3 2 1
16012 * 10987654321098765432109876543210
16013 * 001000 00010001101
16014 * rt -----
16015 * rs -----
16016 * rd -----
16017 */
16018std::string NMD::TLBGR(uint64 instruction)
16019{
16020 (void)instruction;
16021
16022 return "TLBGR ";
16023}
16024
16025
16026/*
16027 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16028 *
16029 * 3 2 1
16030 * 10987654321098765432109876543210
16031 * 001000 00010001101
16032 * rt -----
16033 * rs -----
16034 * rd -----
16035 */
16036std::string NMD::TLBGWI(uint64 instruction)
16037{
16038 (void)instruction;
16039
16040 return "TLBGWI ";
16041}
16042
16043
16044/*
16045 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16046 *
16047 * 3 2 1
16048 * 10987654321098765432109876543210
16049 * 001000 00010001101
16050 * rt -----
16051 * rs -----
16052 * rd -----
16053 */
16054std::string NMD::TLBGWR(uint64 instruction)
16055{
16056 (void)instruction;
16057
16058 return "TLBGWR ";
16059}
16060
16061
16062/*
16063 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16064 *
16065 * 3 2 1
16066 * 10987654321098765432109876543210
16067 * 001000 00010001101
16068 * rt -----
16069 * rs -----
16070 * rd -----
16071 */
16072std::string NMD::TLBINV(uint64 instruction)
16073{
16074 (void)instruction;
16075
16076 return "TLBINV ";
16077}
16078
16079
16080/*
16081 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16082 *
16083 * 3 2 1
16084 * 10987654321098765432109876543210
16085 * 001000 00010001101
16086 * rt -----
16087 * rs -----
16088 * rd -----
16089 */
16090std::string NMD::TLBINVF(uint64 instruction)
16091{
16092 (void)instruction;
16093
16094 return "TLBINVF ";
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 */
16108std::string NMD::TLBP(uint64 instruction)
16109{
16110 (void)instruction;
16111
16112 return "TLBP ";
16113}
16114
16115
16116/*
16117 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16118 *
16119 * 3 2 1
16120 * 10987654321098765432109876543210
16121 * 001000 00010001101
16122 * rt -----
16123 * rs -----
16124 * rd -----
16125 */
16126std::string NMD::TLBR(uint64 instruction)
16127{
16128 (void)instruction;
16129
16130 return "TLBR ";
16131}
16132
16133
16134/*
16135 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16136 *
16137 * 3 2 1
16138 * 10987654321098765432109876543210
16139 * 001000 00010001101
16140 * rt -----
16141 * rs -----
16142 * rd -----
16143 */
16144std::string NMD::TLBWI(uint64 instruction)
16145{
16146 (void)instruction;
16147
16148 return "TLBWI ";
16149}
16150
16151
16152/*
16153 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16154 *
16155 * 3 2 1
16156 * 10987654321098765432109876543210
16157 * 001000 00010001101
16158 * rt -----
16159 * rs -----
16160 * rd -----
16161 */
16162std::string NMD::TLBWR(uint64 instruction)
16163{
16164 (void)instruction;
16165
16166 return "TLBWR ";
16167}
16168
16169
16170/*
16171 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16172 *
16173 * 3 2 1
16174 * 10987654321098765432109876543210
16175 * 001000 00010001101
16176 * rt -----
16177 * rs -----
16178 * rd -----
16179 */
16180std::string NMD::TNE(uint64 instruction)
16181{
16182 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16183 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16184
16185 std::string rs = GPR(copy(rs_value));
16186 std::string rt = GPR(copy(rt_value));
16187
16188 return img::format("TNE %s, %s", rs, rt);
16189}
16190
16191
16192/*
16193 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16194 *
16195 * 3 2 1
16196 * 10987654321098765432109876543210
16197 * 001000 00010001101
16198 * rt -----
16199 * rs -----
16200 * rd -----
16201 */
16202std::string NMD::TRUNC_L_D(uint64 instruction)
16203{
16204 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
16205 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
16206
16207 std::string ft = FPR(copy(ft_value));
16208 std::string fs = FPR(copy(fs_value));
16209
16210 return img::format("TRUNC.L.D %s, %s", ft, fs);
16211}
16212
16213
16214/*
16215 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16216 *
16217 * 3 2 1
16218 * 10987654321098765432109876543210
16219 * 001000 00010001101
16220 * rt -----
16221 * rs -----
16222 * rd -----
16223 */
16224std::string NMD::TRUNC_L_S(uint64 instruction)
16225{
16226 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
16227 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
16228
16229 std::string ft = FPR(copy(ft_value));
16230 std::string fs = FPR(copy(fs_value));
16231
16232 return img::format("TRUNC.L.S %s, %s", ft, fs);
16233}
16234
16235
16236/*
16237 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16238 *
16239 * 3 2 1
16240 * 10987654321098765432109876543210
16241 * 001000 00010001101
16242 * rt -----
16243 * rs -----
16244 * rd -----
16245 */
16246std::string NMD::TRUNC_W_D(uint64 instruction)
16247{
16248 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
16249 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
16250
16251 std::string ft = FPR(copy(ft_value));
16252 std::string fs = FPR(copy(fs_value));
16253
16254 return img::format("TRUNC.W.D %s, %s", ft, fs);
16255}
16256
16257
16258/*
16259 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16260 *
16261 * 3 2 1
16262 * 10987654321098765432109876543210
16263 * 001000 00010001101
16264 * rt -----
16265 * rs -----
16266 * rd -----
16267 */
16268std::string NMD::TRUNC_W_S(uint64 instruction)
16269{
16270 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
16271 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
16272
16273 std::string ft = FPR(copy(ft_value));
16274 std::string fs = FPR(copy(fs_value));
16275
16276 return img::format("TRUNC.W.S %s, %s", ft, fs);
16277}
16278
16279
16280/*
16281 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16282 *
16283 * 3 2 1
16284 * 10987654321098765432109876543210
16285 * 001000 00010001101
16286 * rt -----
16287 * rs -----
16288 * rd -----
16289 */
16290std::string NMD::UALDM(uint64 instruction)
16291{
16292 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16293 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16294 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16295 uint64 count3_value = extract_count3_14_13_12(instruction);
16296
16297 std::string rt = GPR(copy(rt_value));
16298 std::string s = IMMEDIATE(copy(s_value));
16299 std::string rs = GPR(copy(rs_value));
16300 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16301
16302 return img::format("UALDM %s, %s(%s), %s", rt, s, rs, count3);
16303}
16304
16305
16306/*
16307 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16308 *
16309 * 3 2 1
16310 * 10987654321098765432109876543210
16311 * 001000 00010001101
16312 * rt -----
16313 * rs -----
16314 * rd -----
16315 */
16316std::string NMD::UALH(uint64 instruction)
16317{
16318 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16319 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16320 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16321
16322 std::string rt = GPR(copy(rt_value));
16323 std::string s = IMMEDIATE(copy(s_value));
16324 std::string rs = GPR(copy(rs_value));
16325
16326 return img::format("UALH %s, %s(%s)", rt, s, rs);
16327}
16328
16329
16330/*
16331 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16332 *
16333 * 3 2 1
16334 * 10987654321098765432109876543210
16335 * 001000 00010001101
16336 * rt -----
16337 * rs -----
16338 * rd -----
16339 */
16340std::string NMD::UALWM(uint64 instruction)
16341{
16342 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16343 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16344 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16345 uint64 count3_value = extract_count3_14_13_12(instruction);
16346
16347 std::string rt = GPR(copy(rt_value));
16348 std::string s = IMMEDIATE(copy(s_value));
16349 std::string rs = GPR(copy(rs_value));
16350 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16351
16352 return img::format("UALWM %s, %s(%s), %s", rt, s, rs, count3);
16353}
16354
16355
16356/*
16357 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16358 *
16359 * 3 2 1
16360 * 10987654321098765432109876543210
16361 * 001000 00010001101
16362 * rt -----
16363 * rs -----
16364 * rd -----
16365 */
16366std::string NMD::UASDM(uint64 instruction)
16367{
16368 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16369 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16370 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16371 uint64 count3_value = extract_count3_14_13_12(instruction);
16372
16373 std::string rt = GPR(copy(rt_value));
16374 std::string s = IMMEDIATE(copy(s_value));
16375 std::string rs = GPR(copy(rs_value));
16376 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16377
16378 return img::format("UASDM %s, %s(%s), %s", rt, s, rs, count3);
16379}
16380
16381
16382/*
16383 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16384 *
16385 * 3 2 1
16386 * 10987654321098765432109876543210
16387 * 001000 00010001101
16388 * rt -----
16389 * rs -----
16390 * rd -----
16391 */
16392std::string NMD::UASH(uint64 instruction)
16393{
16394 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16395 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16396 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16397
16398 std::string rt = GPR(copy(rt_value));
16399 std::string s = IMMEDIATE(copy(s_value));
16400 std::string rs = GPR(copy(rs_value));
16401
16402 return img::format("UASH %s, %s(%s)", rt, s, rs);
16403}
16404
16405
16406/*
16407 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16408 *
16409 * 3 2 1
16410 * 10987654321098765432109876543210
16411 * 001000 00010001101
16412 * rt -----
16413 * rs -----
16414 * rd -----
16415 */
16416std::string NMD::UASWM(uint64 instruction)
16417{
16418 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16419 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16420 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16421 uint64 count3_value = extract_count3_14_13_12(instruction);
16422
16423 std::string rt = GPR(copy(rt_value));
16424 std::string s = IMMEDIATE(copy(s_value));
16425 std::string rs = GPR(copy(rs_value));
16426 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16427
16428 return img::format("UASWM %s, %s(%s), %s", rt, s, rs, count3);
16429}
16430
16431
16432/*
16433 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16434 *
16435 * 3 2 1
16436 * 10987654321098765432109876543210
16437 * 001000 00010001101
16438 * rt -----
16439 * rs -----
16440 * rd -----
16441 */
16442std::string NMD::UDI(uint64 instruction)
16443{
16444 uint64 op_value = extract_op_25_to_3(instruction);
16445
16446 std::string op = IMMEDIATE(copy(op_value));
16447
16448 return img::format("UDI %s", op);
16449}
16450
16451
16452/*
16453 * WAIT code - Enter Wait State
16454 *
16455 * 3 2 1
16456 * 10987654321098765432109876543210
16457 * 001000 1100001101111111
16458 * code ----------
16459 */
16460std::string NMD::WAIT(uint64 instruction)
16461{
16462 uint64 code_value = extract_code_25_24_23_22_21_20_19_18_17_16(instruction);
16463
16464 std::string code = IMMEDIATE(copy(code_value));
16465
16466 return img::format("WAIT %s", code);
16467}
16468
16469
16470/*
16471 * [DSP] WRDSP rt, mask - Write selected fields from a GPR to the DSPControl
16472 * register
16473 *
16474 * 3 2 1
16475 * 10987654321098765432109876543210
16476 * 001000 01011001111111
16477 * rt -----
16478 * mask -------
16479 */
16480std::string NMD::WRDSP(uint64 instruction)
16481{
16482 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16483 uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
16484
16485 std::string rt = GPR(copy(rt_value));
16486 std::string mask = IMMEDIATE(copy(mask_value));
16487
16488 return img::format("WRDSP %s, %s", rt, mask);
16489}
16490
16491
16492/*
16493 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16494 *
16495 * 3 2 1
16496 * 10987654321098765432109876543210
16497 * 001000 00010001101
16498 * rt -----
16499 * rs -----
16500 * rd -----
16501 */
16502std::string NMD::WRPGPR(uint64 instruction)
16503{
16504 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16505 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16506
16507 std::string rt = GPR(copy(rt_value));
16508 std::string rs = GPR(copy(rs_value));
16509
16510 return img::format("WRPGPR %s, %s", rt, rs);
16511}
16512
16513
16514/*
16515 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16516 *
16517 * 3 2 1
16518 * 10987654321098765432109876543210
16519 * 001000 00010001101
16520 * rt -----
16521 * rs -----
16522 * rd -----
16523 */
16524std::string NMD::XOR_16_(uint64 instruction)
16525{
16526 uint64 rt3_value = extract_rt3_9_8_7(instruction);
16527 uint64 rs3_value = extract_rs3_6_5_4(instruction);
16528
16529 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
16530 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
16531
16532 return img::format("XOR %s, %s", rs3, rt3);
16533}
16534
16535
16536/*
16537 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16538 *
16539 * 3 2 1
16540 * 10987654321098765432109876543210
16541 * 001000 00010001101
16542 * rt -----
16543 * rs -----
16544 * rd -----
16545 */
16546std::string NMD::XOR_32_(uint64 instruction)
16547{
16548 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16549 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16550 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
16551
16552 std::string rd = GPR(copy(rd_value));
16553 std::string rs = GPR(copy(rs_value));
16554 std::string rt = GPR(copy(rt_value));
16555
16556 return img::format("XOR %s, %s, %s", rd, rs, rt);
16557}
16558
16559
16560/*
16561 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16562 *
16563 * 3 2 1
16564 * 10987654321098765432109876543210
16565 * 001000 00010001101
16566 * rt -----
16567 * rs -----
16568 * rd -----
16569 */
16570std::string NMD::XORI(uint64 instruction)
16571{
16572 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16573 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16574 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
16575
16576 std::string rt = GPR(copy(rt_value));
16577 std::string rs = GPR(copy(rs_value));
16578 std::string u = IMMEDIATE(copy(u_value));
16579
16580 return img::format("XORI %s, %s, %s", rt, rs, u);
16581}
16582
16583
16584/*
16585 * YIELD rt, rs -
16586 *
16587 * 3 2 1
16588 * 10987654321098765432109876543210
16589 * 001000 00010001101
16590 * rt -----
16591 * rs -----
16592 */
16593std::string NMD::YIELD(uint64 instruction)
16594{
16595 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16596 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16597
16598 std::string rt = GPR(copy(rt_value));
16599 std::string rs = GPR(copy(rs_value));
16600
16601 return img::format("YIELD %s, %s", rt, rs);
16602}
16603
16604
16605
16606/*
16607 * nanoMIPS instruction pool organization
16608 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16609 *
16610 *
16611 * ā”Œā”€ P.ADDIU ā”€ā”€ā”€ P.RI ā”€ā”€ā”€ P.SYSCALL
16612 * ā”‚
16613 * ā”‚ ā”Œā”€ P.TRAP
16614 * ā”‚ ā”‚
16615 * ā”‚ ā”Œā”€ _POOL32A0_0 ā”€ā”¼ā”€ P.CMOVE
16616 * ā”‚ ā”‚ ā”‚
16617 * ā”‚ ā”‚ ā””ā”€ P.SLTU
16618 * ā”‚ ā”Œā”€ _POOL32A0 ā”€ā”¤
16619 * ā”‚ ā”‚ ā”‚
16620 * ā”‚ ā”‚ ā”‚
16621 * ā”‚ ā”‚ ā””ā”€ _POOL32A0_1 ā”€ā”€ā”€ CRC32
16622 * ā”‚ ā”‚
16623 * ā”œā”€ P32A ā”€ā”¤
16624 * ā”‚ ā”‚ ā”Œā”€ PP.LSX
16625 * ā”‚ ā”‚ ā”Œā”€ P.LSX ā”€ā”€ā”€ā”€ā”€ā”¤
16626 * ā”‚ ā”‚ ā”‚ ā””ā”€ PP.LSXS
16627 * ā”‚ ā””ā”€ _POOL32A7 ā”€ā”¤
16628 * ā”‚ ā”‚ ā”Œā”€ POOL32Axf_4
16629 * ā”‚ ā””ā”€ POOL32Axf ā”€ā”¤
16630 * ā”‚ ā””ā”€ POOL32Axf_5
16631 * ā”‚
16632 * ā”œā”€ PBAL
16633 * ā”‚
16634 * ā”œā”€ P.GP.W ā”Œā”€ PP.LSX
16635 * ā”Œā”€ P32 ā”€ā”¤ ā”‚
16636 * ā”‚ ā”œā”€ P.GP.BH ā”€ā”“ā”€ PP.LSXS
16637 * ā”‚ ā”‚
16638 * ā”‚ ā”œā”€ P.J ā”€ā”€ā”€ā”€ā”€ā”€ā”€ PP.BALRSC
16639 * ā”‚ ā”‚
16640 * ā”‚ ā”œā”€ P48I
16641 * ā”‚ ā”‚ ā”Œā”€ P.SR
16642 * ā”‚ ā”‚ ā”‚
16643 * ā”‚ ā”‚ ā”œā”€ P.SHIFT
16644 * ā”‚ ā”‚ ā”‚
16645 * ā”‚ ā”œā”€ P.U12 ā”€ā”€ā”€ā”¼ā”€ P.ROTX
16646 * ā”‚ ā”‚ ā”‚
16647 * ā”‚ ā”‚ ā”œā”€ P.INS
16648 * ā”‚ ā”‚ ā”‚
16649 * ā”‚ ā”‚ ā””ā”€ P.EXT
16650 * ā”‚ ā”‚
16651 * ā”‚ ā”œā”€ P.LS.U12 ā”€ā”€ P.PREF.U12
16652 * ā”‚ ā”‚
16653 * ā”‚ ā”œā”€ P.BR1 ā”€ā”€ā”€ā”€ā”€ P.BR3A
16654 * ā”‚ ā”‚
16655 * ā”‚ ā”‚ ā”Œā”€ P.LS.S0 ā”€ā”€ā”€ P16.SYSCALL
16656 * ā”‚ ā”‚ ā”‚
16657 * ā”‚ ā”‚ ā”‚ ā”Œā”€ P.LL
16658 * ā”‚ ā”‚ ā”œā”€ P.LS.S1 ā”€ā”¤
16659 * ā”‚ ā”‚ ā”‚ ā””ā”€ P.SC
16660 * ā”‚ ā”‚ ā”‚
16661 * ā”‚ ā”‚ ā”‚ ā”Œā”€ P.PREFE
16662 * MAJOR ā”€ā”¤ ā”œā”€ P.LS.S9 ā”€ā”¤ ā”‚
16663 * ā”‚ ā”‚ ā”œā”€ P.LS.E0 ā”€ā”¼ā”€ P.LLE
16664 * ā”‚ ā”‚ ā”‚ ā”‚
16665 * ā”‚ ā”‚ ā”‚ ā””ā”€ P.SCE
16666 * ā”‚ ā”‚ ā”‚
16667 * ā”‚ ā”‚ ā”œā”€ P.LS.WM
16668 * ā”‚ ā”‚ ā”‚
16669 * ā”‚ ā”‚ ā””ā”€ P.LS.UAWM
16670 * ā”‚ ā”‚
16671 * ā”‚ ā”‚
16672 * ā”‚ ā”œā”€ P.BR2
16673 * ā”‚ ā”‚
16674 * ā”‚ ā”œā”€ P.BRI
16675 * ā”‚ ā”‚
16676 * ā”‚ ā””ā”€ P.LUI
16677 * ā”‚
16678 * ā”‚
16679 * ā”‚ ā”Œā”€ P16.MV ā”€ā”€ā”€ā”€ P16.RI ā”€ā”€ā”€ P16.SYSCALL
16680 * ā”‚ ā”‚
16681 * ā”‚ ā”œā”€ P16.SR
16682 * ā”‚ ā”‚
16683 * ā”‚ ā”œā”€ P16.SHIFT
16684 * ā”‚ ā”‚
16685 * ā”‚ ā”œā”€ P16.4x4
16686 * ā”‚ ā”‚
16687 * ā”‚ ā”œā”€ P16C ā”€ā”€ā”€ā”€ā”€ā”€ POOL16C_0 ā”€ā”€ POOL16C_00
16688 * ā”‚ ā”‚
16689 * ā””ā”€ P16 ā”€ā”¼ā”€ P16.LB
16690 * ā”‚
16691 * ā”œā”€ P16.A1
16692 * ā”‚
16693 * ā”œā”€ P16.LH
16694 * ā”‚
16695 * ā”œā”€ P16.A2 ā”€ā”€ā”€ā”€ P.ADDIU[RS5]
16696 * ā”‚
16697 * ā”œā”€ P16.ADDU
16698 * ā”‚
16699 * ā””ā”€ P16.BR ā”€ā”€ā”¬ā”€ P16.JRC
16700 * ā”‚
16701 * ā””ā”€ P16.BR1
16702 *
16703 *
16704 * (FP, DPS, and some minor instruction pools are omitted from the diagram)
16705 *
16706 */
16707
16708NMD::Pool NMD::P_SYSCALL[2] = {
16709 { instruction , 0 , 0 , 32,
16710 0xfffc0000, 0x00080000, &NMD::SYSCALL_32_ , 0,
16711 0x0 }, /* SYSCALL[32] */
16712 { instruction , 0 , 0 , 32,
16713 0xfffc0000, 0x000c0000, &NMD::HYPCALL , 0,
16714 CP0_ | VZ_ }, /* HYPCALL */
16715};
16716
16717
16718NMD::Pool NMD::P_RI[4] = {
16719 { instruction , 0 , 0 , 32,
16720 0xfff80000, 0x00000000, &NMD::SIGRIE , 0,
16721 0x0 }, /* SIGRIE */
16722 { pool , P_SYSCALL , 2 , 32,
16723 0xfff80000, 0x00080000, 0 , 0,
16724 0x0 }, /* P.SYSCALL */
16725 { instruction , 0 , 0 , 32,
16726 0xfff80000, 0x00100000, &NMD::BREAK_32_ , 0,
16727 0x0 }, /* BREAK[32] */
16728 { instruction , 0 , 0 , 32,
16729 0xfff80000, 0x00180000, &NMD::SDBBP_32_ , 0,
16730 EJTAG_ }, /* SDBBP[32] */
16731};
16732
16733
16734NMD::Pool NMD::P_ADDIU[2] = {
16735 { pool , P_RI , 4 , 32,
16736 0xffe00000, 0x00000000, 0 , 0,
16737 0x0 }, /* P.RI */
16738 { instruction , 0 , 0 , 32,
16739 0xfc000000, 0x00000000, &NMD::ADDIU_32_ , &NMD::ADDIU_32__cond ,
16740 0x0 }, /* ADDIU[32] */
16741};
16742
16743
16744NMD::Pool NMD::P_TRAP[2] = {
16745 { instruction , 0 , 0 , 32,
16746 0xfc0007ff, 0x20000000, &NMD::TEQ , 0,
16747 XMMS_ }, /* TEQ */
16748 { instruction , 0 , 0 , 32,
16749 0xfc0007ff, 0x20000400, &NMD::TNE , 0,
16750 XMMS_ }, /* TNE */
16751};
16752
16753
16754NMD::Pool NMD::P_CMOVE[2] = {
16755 { instruction , 0 , 0 , 32,
16756 0xfc0007ff, 0x20000210, &NMD::MOVZ , 0,
16757 0x0 }, /* MOVZ */
16758 { instruction , 0 , 0 , 32,
16759 0xfc0007ff, 0x20000610, &NMD::MOVN , 0,
16760 0x0 }, /* MOVN */
16761};
16762
16763
16764NMD::Pool NMD::P_D_MT_VPE[2] = {
16765 { instruction , 0 , 0 , 32,
16766 0xfc1f3fff, 0x20010ab0, &NMD::DMT , 0,
16767 MT_ }, /* DMT */
16768 { instruction , 0 , 0 , 32,
16769 0xfc1f3fff, 0x20000ab0, &NMD::DVPE , 0,
16770 MT_ }, /* DVPE */
16771};
16772
16773
16774NMD::Pool NMD::P_E_MT_VPE[2] = {
16775 { instruction , 0 , 0 , 32,
16776 0xfc1f3fff, 0x20010eb0, &NMD::EMT , 0,
16777 MT_ }, /* EMT */
16778 { instruction , 0 , 0 , 32,
16779 0xfc1f3fff, 0x20000eb0, &NMD::EVPE , 0,
16780 MT_ }, /* EVPE */
16781};
16782
16783
16784NMD::Pool NMD::_P_MT_VPE[2] = {
16785 { pool , P_D_MT_VPE , 2 , 32,
16786 0xfc003fff, 0x20000ab0, 0 , 0,
16787 0x0 }, /* P.D_MT_VPE */
16788 { pool , P_E_MT_VPE , 2 , 32,
16789 0xfc003fff, 0x20000eb0, 0 , 0,
16790 0x0 }, /* P.E_MT_VPE */
16791};
16792
16793
16794NMD::Pool NMD::P_MT_VPE[8] = {
16795 { reserved_block , 0 , 0 , 32,
16796 0xfc003bff, 0x200002b0, 0 , 0,
16797 0x0 }, /* P.MT_VPE~*(0) */
16798 { pool , _P_MT_VPE , 2 , 32,
16799 0xfc003bff, 0x20000ab0, 0 , 0,
16800 0x0 }, /* _P.MT_VPE */
16801 { reserved_block , 0 , 0 , 32,
16802 0xfc003bff, 0x200012b0, 0 , 0,
16803 0x0 }, /* P.MT_VPE~*(2) */
16804 { reserved_block , 0 , 0 , 32,
16805 0xfc003bff, 0x20001ab0, 0 , 0,
16806 0x0 }, /* P.MT_VPE~*(3) */
16807 { reserved_block , 0 , 0 , 32,
16808 0xfc003bff, 0x200022b0, 0 , 0,
16809 0x0 }, /* P.MT_VPE~*(4) */
16810 { reserved_block , 0 , 0 , 32,
16811 0xfc003bff, 0x20002ab0, 0 , 0,
16812 0x0 }, /* P.MT_VPE~*(5) */
16813 { reserved_block , 0 , 0 , 32,
16814 0xfc003bff, 0x200032b0, 0 , 0,
16815 0x0 }, /* P.MT_VPE~*(6) */
16816 { reserved_block , 0 , 0 , 32,
16817 0xfc003bff, 0x20003ab0, 0 , 0,
16818 0x0 }, /* P.MT_VPE~*(7) */
16819};
16820
16821
16822NMD::Pool NMD::P_DVP[2] = {
16823 { instruction , 0 , 0 , 32,
16824 0xfc00ffff, 0x20000390, &NMD::DVP , 0,
16825 0x0 }, /* DVP */
16826 { instruction , 0 , 0 , 32,
16827 0xfc00ffff, 0x20000790, &NMD::EVP , 0,
16828 0x0 }, /* EVP */
16829};
16830
16831
16832NMD::Pool NMD::P_SLTU[2] = {
16833 { pool , P_DVP , 2 , 32,
16834 0xfc00fbff, 0x20000390, 0 , 0,
16835 0x0 }, /* P.DVP */
16836 { instruction , 0 , 0 , 32,
16837 0xfc0003ff, 0x20000390, &NMD::SLTU , &NMD::SLTU_cond ,
16838 0x0 }, /* SLTU */
16839};
16840
16841
16842NMD::Pool NMD::_POOL32A0[128] = {
16843 { pool , P_TRAP , 2 , 32,
16844 0xfc0003ff, 0x20000000, 0 , 0,
16845 0x0 }, /* P.TRAP */
16846 { instruction , 0 , 0 , 32,
16847 0xfc0003ff, 0x20000008, &NMD::SEB , 0,
16848 XMMS_ }, /* SEB */
16849 { instruction , 0 , 0 , 32,
16850 0xfc0003ff, 0x20000010, &NMD::SLLV , 0,
16851 0x0 }, /* SLLV */
16852 { instruction , 0 , 0 , 32,
16853 0xfc0003ff, 0x20000018, &NMD::MUL_32_ , 0,
16854 0x0 }, /* MUL[32] */
16855 { reserved_block , 0 , 0 , 32,
16856 0xfc0003ff, 0x20000020, 0 , 0,
16857 0x0 }, /* _POOL32A0~*(4) */
16858 { reserved_block , 0 , 0 , 32,
16859 0xfc0003ff, 0x20000028, 0 , 0,
16860 0x0 }, /* _POOL32A0~*(5) */
16861 { instruction , 0 , 0 , 32,
16862 0xfc0003ff, 0x20000030, &NMD::MFC0 , 0,
16863 0x0 }, /* MFC0 */
16864 { instruction , 0 , 0 , 32,
16865 0xfc0003ff, 0x20000038, &NMD::MFHC0 , 0,
16866 CP0_ | MVH_ }, /* MFHC0 */
16867 { reserved_block , 0 , 0 , 32,
16868 0xfc0003ff, 0x20000040, 0 , 0,
16869 0x0 }, /* _POOL32A0~*(8) */
16870 { instruction , 0 , 0 , 32,
16871 0xfc0003ff, 0x20000048, &NMD::SEH , 0,
16872 0x0 }, /* SEH */
16873 { instruction , 0 , 0 , 32,
16874 0xfc0003ff, 0x20000050, &NMD::SRLV , 0,
16875 0x0 }, /* SRLV */
16876 { instruction , 0 , 0 , 32,
16877 0xfc0003ff, 0x20000058, &NMD::MUH , 0,
16878 0x0 }, /* MUH */
16879 { reserved_block , 0 , 0 , 32,
16880 0xfc0003ff, 0x20000060, 0 , 0,
16881 0x0 }, /* _POOL32A0~*(12) */
16882 { reserved_block , 0 , 0 , 32,
16883 0xfc0003ff, 0x20000068, 0 , 0,
16884 0x0 }, /* _POOL32A0~*(13) */
16885 { instruction , 0 , 0 , 32,
16886 0xfc0003ff, 0x20000070, &NMD::MTC0 , 0,
16887 CP0_ }, /* MTC0 */
16888 { instruction , 0 , 0 , 32,
16889 0xfc0003ff, 0x20000078, &NMD::MTHC0 , 0,
16890 CP0_ | MVH_ }, /* MTHC0 */
16891 { reserved_block , 0 , 0 , 32,
16892 0xfc0003ff, 0x20000080, 0 , 0,
16893 0x0 }, /* _POOL32A0~*(16) */
16894 { reserved_block , 0 , 0 , 32,
16895 0xfc0003ff, 0x20000088, 0 , 0,
16896 0x0 }, /* _POOL32A0~*(17) */
16897 { instruction , 0 , 0 , 32,
16898 0xfc0003ff, 0x20000090, &NMD::SRAV , 0,
16899 0x0 }, /* SRAV */
16900 { instruction , 0 , 0 , 32,
16901 0xfc0003ff, 0x20000098, &NMD::MULU , 0,
16902 0x0 }, /* MULU */
16903 { reserved_block , 0 , 0 , 32,
16904 0xfc0003ff, 0x200000a0, 0 , 0,
16905 0x0 }, /* _POOL32A0~*(20) */
16906 { reserved_block , 0 , 0 , 32,
16907 0xfc0003ff, 0x200000a8, 0 , 0,
16908 0x0 }, /* _POOL32A0~*(21) */
16909 { instruction , 0 , 0 , 32,
16910 0xfc0003ff, 0x200000b0, &NMD::MFGC0 , 0,
16911 CP0_ | VZ_ }, /* MFGC0 */
16912 { instruction , 0 , 0 , 32,
16913 0xfc0003ff, 0x200000b8, &NMD::MFHGC0 , 0,
16914 CP0_ | VZ_ | MVH_ }, /* MFHGC0 */
16915 { reserved_block , 0 , 0 , 32,
16916 0xfc0003ff, 0x200000c0, 0 , 0,
16917 0x0 }, /* _POOL32A0~*(24) */
16918 { reserved_block , 0 , 0 , 32,
16919 0xfc0003ff, 0x200000c8, 0 , 0,
16920 0x0 }, /* _POOL32A0~*(25) */
16921 { instruction , 0 , 0 , 32,
16922 0xfc0003ff, 0x200000d0, &NMD::ROTRV , 0,
16923 0x0 }, /* ROTRV */
16924 { instruction , 0 , 0 , 32,
16925 0xfc0003ff, 0x200000d8, &NMD::MUHU , 0,
16926 0x0 }, /* MUHU */
16927 { reserved_block , 0 , 0 , 32,
16928 0xfc0003ff, 0x200000e0, 0 , 0,
16929 0x0 }, /* _POOL32A0~*(28) */
16930 { reserved_block , 0 , 0 , 32,
16931 0xfc0003ff, 0x200000e8, 0 , 0,
16932 0x0 }, /* _POOL32A0~*(29) */
16933 { instruction , 0 , 0 , 32,
16934 0xfc0003ff, 0x200000f0, &NMD::MTGC0 , 0,
16935 CP0_ | VZ_ }, /* MTGC0 */
16936 { instruction , 0 , 0 , 32,
16937 0xfc0003ff, 0x200000f8, &NMD::MTHGC0 , 0,
16938 CP0_ | VZ_ | MVH_ }, /* MTHGC0 */
16939 { reserved_block , 0 , 0 , 32,
16940 0xfc0003ff, 0x20000100, 0 , 0,
16941 0x0 }, /* _POOL32A0~*(32) */
16942 { reserved_block , 0 , 0 , 32,
16943 0xfc0003ff, 0x20000108, 0 , 0,
16944 0x0 }, /* _POOL32A0~*(33) */
16945 { instruction , 0 , 0 , 32,
16946 0xfc0003ff, 0x20000110, &NMD::ADD , 0,
16947 XMMS_ }, /* ADD */
16948 { instruction , 0 , 0 , 32,
16949 0xfc0003ff, 0x20000118, &NMD::DIV , 0,
16950 0x0 }, /* DIV */
16951 { reserved_block , 0 , 0 , 32,
16952 0xfc0003ff, 0x20000120, 0 , 0,
16953 0x0 }, /* _POOL32A0~*(36) */
16954 { reserved_block , 0 , 0 , 32,
16955 0xfc0003ff, 0x20000128, 0 , 0,
16956 0x0 }, /* _POOL32A0~*(37) */
16957 { instruction , 0 , 0 , 32,
16958 0xfc0003ff, 0x20000130, &NMD::DMFC0 , 0,
16959 CP0_ | MIPS64_ }, /* DMFC0 */
16960 { reserved_block , 0 , 0 , 32,
16961 0xfc0003ff, 0x20000138, 0 , 0,
16962 0x0 }, /* _POOL32A0~*(39) */
16963 { reserved_block , 0 , 0 , 32,
16964 0xfc0003ff, 0x20000140, 0 , 0,
16965 0x0 }, /* _POOL32A0~*(40) */
16966 { reserved_block , 0 , 0 , 32,
16967 0xfc0003ff, 0x20000148, 0 , 0,
16968 0x0 }, /* _POOL32A0~*(41) */
16969 { instruction , 0 , 0 , 32,
16970 0xfc0003ff, 0x20000150, &NMD::ADDU_32_ , 0,
16971 0x0 }, /* ADDU[32] */
16972 { instruction , 0 , 0 , 32,
16973 0xfc0003ff, 0x20000158, &NMD::MOD , 0,
16974 0x0 }, /* MOD */
16975 { reserved_block , 0 , 0 , 32,
16976 0xfc0003ff, 0x20000160, 0 , 0,
16977 0x0 }, /* _POOL32A0~*(44) */
16978 { reserved_block , 0 , 0 , 32,
16979 0xfc0003ff, 0x20000168, 0 , 0,
16980 0x0 }, /* _POOL32A0~*(45) */
16981 { instruction , 0 , 0 , 32,
16982 0xfc0003ff, 0x20000170, &NMD::DMTC0 , 0,
16983 CP0_ | MIPS64_ }, /* DMTC0 */
16984 { reserved_block , 0 , 0 , 32,
16985 0xfc0003ff, 0x20000178, 0 , 0,
16986 0x0 }, /* _POOL32A0~*(47) */
16987 { reserved_block , 0 , 0 , 32,
16988 0xfc0003ff, 0x20000180, 0 , 0,
16989 0x0 }, /* _POOL32A0~*(48) */
16990 { reserved_block , 0 , 0 , 32,
16991 0xfc0003ff, 0x20000188, 0 , 0,
16992 0x0 }, /* _POOL32A0~*(49) */
16993 { instruction , 0 , 0 , 32,
16994 0xfc0003ff, 0x20000190, &NMD::SUB , 0,
16995 XMMS_ }, /* SUB */
16996 { instruction , 0 , 0 , 32,
16997 0xfc0003ff, 0x20000198, &NMD::DIVU , 0,
16998 0x0 }, /* DIVU */
16999 { reserved_block , 0 , 0 , 32,
17000 0xfc0003ff, 0x200001a0, 0 , 0,
17001 0x0 }, /* _POOL32A0~*(52) */
17002 { reserved_block , 0 , 0 , 32,
17003 0xfc0003ff, 0x200001a8, 0 , 0,
17004 0x0 }, /* _POOL32A0~*(53) */
17005 { instruction , 0 , 0 , 32,
17006 0xfc0003ff, 0x200001b0, &NMD::DMFGC0 , 0,
17007 CP0_ | MIPS64_ | VZ_}, /* DMFGC0 */
17008 { reserved_block , 0 , 0 , 32,
17009 0xfc0003ff, 0x200001b8, 0 , 0,
17010 0x0 }, /* _POOL32A0~*(55) */
17011 { instruction , 0 , 0 , 32,
17012 0xfc0003ff, 0x200001c0, &NMD::RDHWR , 0,
17013 XMMS_ }, /* RDHWR */
17014 { reserved_block , 0 , 0 , 32,
17015 0xfc0003ff, 0x200001c8, 0 , 0,
17016 0x0 }, /* _POOL32A0~*(57) */
17017 { instruction , 0 , 0 , 32,
17018 0xfc0003ff, 0x200001d0, &NMD::SUBU_32_ , 0,
17019 0x0 }, /* SUBU[32] */
17020 { instruction , 0 , 0 , 32,
17021 0xfc0003ff, 0x200001d8, &NMD::MODU , 0,
17022 0x0 }, /* MODU */
17023 { reserved_block , 0 , 0 , 32,
17024 0xfc0003ff, 0x200001e0, 0 , 0,
17025 0x0 }, /* _POOL32A0~*(60) */
17026 { reserved_block , 0 , 0 , 32,
17027 0xfc0003ff, 0x200001e8, 0 , 0,
17028 0x0 }, /* _POOL32A0~*(61) */
17029 { instruction , 0 , 0 , 32,
17030 0xfc0003ff, 0x200001f0, &NMD::DMTGC0 , 0,
17031 CP0_ | MIPS64_ | VZ_}, /* DMTGC0 */
17032 { reserved_block , 0 , 0 , 32,
17033 0xfc0003ff, 0x200001f8, 0 , 0,
17034 0x0 }, /* _POOL32A0~*(63) */
17035 { reserved_block , 0 , 0 , 32,
17036 0xfc0003ff, 0x20000200, 0 , 0,
17037 0x0 }, /* _POOL32A0~*(64) */
17038 { reserved_block , 0 , 0 , 32,
17039 0xfc0003ff, 0x20000208, 0 , 0,
17040 0x0 }, /* _POOL32A0~*(65) */
17041 { pool , P_CMOVE , 2 , 32,
17042 0xfc0003ff, 0x20000210, 0 , 0,
17043 0x0 }, /* P.CMOVE */
17044 { reserved_block , 0 , 0 , 32,
17045 0xfc0003ff, 0x20000218, 0 , 0,
17046 0x0 }, /* _POOL32A0~*(67) */
17047 { reserved_block , 0 , 0 , 32,
17048 0xfc0003ff, 0x20000220, 0 , 0,
17049 0x0 }, /* _POOL32A0~*(68) */
17050 { instruction , 0 , 0 , 32,
17051 0xfc0003ff, 0x20000228, &NMD::FORK , 0,
17052 MT_ }, /* FORK */
17053 { instruction , 0 , 0 , 32,
17054 0xfc0003ff, 0x20000230, &NMD::MFTR , 0,
17055 MT_ }, /* MFTR */
17056 { instruction , 0 , 0 , 32,
17057 0xfc0003ff, 0x20000238, &NMD::MFHTR , 0,
17058 MT_ }, /* MFHTR */
17059 { reserved_block , 0 , 0 , 32,
17060 0xfc0003ff, 0x20000240, 0 , 0,
17061 0x0 }, /* _POOL32A0~*(72) */
17062 { reserved_block , 0 , 0 , 32,
17063 0xfc0003ff, 0x20000248, 0 , 0,
17064 0x0 }, /* _POOL32A0~*(73) */
17065 { instruction , 0 , 0 , 32,
17066 0xfc0003ff, 0x20000250, &NMD::AND_32_ , 0,
17067 0x0 }, /* AND[32] */
17068 { reserved_block , 0 , 0 , 32,
17069 0xfc0003ff, 0x20000258, 0 , 0,
17070 0x0 }, /* _POOL32A0~*(75) */
17071 { reserved_block , 0 , 0 , 32,
17072 0xfc0003ff, 0x20000260, 0 , 0,
17073 0x0 }, /* _POOL32A0~*(76) */
17074 { instruction , 0 , 0 , 32,
17075 0xfc0003ff, 0x20000268, &NMD::YIELD , 0,
17076 MT_ }, /* YIELD */
17077 { instruction , 0 , 0 , 32,
17078 0xfc0003ff, 0x20000270, &NMD::MTTR , 0,
17079 MT_ }, /* MTTR */
17080 { instruction , 0 , 0 , 32,
17081 0xfc0003ff, 0x20000278, &NMD::MTHTR , 0,
17082 MT_ }, /* MTHTR */
17083 { reserved_block , 0 , 0 , 32,
17084 0xfc0003ff, 0x20000280, 0 , 0,
17085 0x0 }, /* _POOL32A0~*(80) */
17086 { reserved_block , 0 , 0 , 32,
17087 0xfc0003ff, 0x20000288, 0 , 0,
17088 0x0 }, /* _POOL32A0~*(81) */
17089 { instruction , 0 , 0 , 32,
17090 0xfc0003ff, 0x20000290, &NMD::OR_32_ , 0,
17091 0x0 }, /* OR[32] */
17092 { reserved_block , 0 , 0 , 32,
17093 0xfc0003ff, 0x20000298, 0 , 0,
17094 0x0 }, /* _POOL32A0~*(83) */
17095 { reserved_block , 0 , 0 , 32,
17096 0xfc0003ff, 0x200002a0, 0 , 0,
17097 0x0 }, /* _POOL32A0~*(84) */
17098 { reserved_block , 0 , 0 , 32,
17099 0xfc0003ff, 0x200002a8, 0 , 0,
17100 0x0 }, /* _POOL32A0~*(85) */
17101 { pool , P_MT_VPE , 8 , 32,
17102 0xfc0003ff, 0x200002b0, 0 , 0,
17103 0x0 }, /* P.MT_VPE */
17104 { reserved_block , 0 , 0 , 32,
17105 0xfc0003ff, 0x200002b8, 0 , 0,
17106 0x0 }, /* _POOL32A0~*(87) */
17107 { reserved_block , 0 , 0 , 32,
17108 0xfc0003ff, 0x200002c0, 0 , 0,
17109 0x0 }, /* _POOL32A0~*(88) */
17110 { reserved_block , 0 , 0 , 32,
17111 0xfc0003ff, 0x200002c8, 0 , 0,
17112 0x0 }, /* _POOL32A0~*(89) */
17113 { instruction , 0 , 0 , 32,
17114 0xfc0003ff, 0x200002d0, &NMD::NOR , 0,
17115 0x0 }, /* NOR */
17116 { reserved_block , 0 , 0 , 32,
17117 0xfc0003ff, 0x200002d8, 0 , 0,
17118 0x0 }, /* _POOL32A0~*(91) */
17119 { reserved_block , 0 , 0 , 32,
17120 0xfc0003ff, 0x200002e0, 0 , 0,
17121 0x0 }, /* _POOL32A0~*(92) */
17122 { reserved_block , 0 , 0 , 32,
17123 0xfc0003ff, 0x200002e8, 0 , 0,
17124 0x0 }, /* _POOL32A0~*(93) */
17125 { reserved_block , 0 , 0 , 32,
17126 0xfc0003ff, 0x200002f0, 0 , 0,
17127 0x0 }, /* _POOL32A0~*(94) */
17128 { reserved_block , 0 , 0 , 32,
17129 0xfc0003ff, 0x200002f8, 0 , 0,
17130 0x0 }, /* _POOL32A0~*(95) */
17131 { reserved_block , 0 , 0 , 32,
17132 0xfc0003ff, 0x20000300, 0 , 0,
17133 0x0 }, /* _POOL32A0~*(96) */
17134 { reserved_block , 0 , 0 , 32,
17135 0xfc0003ff, 0x20000308, 0 , 0,
17136 0x0 }, /* _POOL32A0~*(97) */
17137 { instruction , 0 , 0 , 32,
17138 0xfc0003ff, 0x20000310, &NMD::XOR_32_ , 0,
17139 0x0 }, /* XOR[32] */
17140 { reserved_block , 0 , 0 , 32,
17141 0xfc0003ff, 0x20000318, 0 , 0,
17142 0x0 }, /* _POOL32A0~*(99) */
17143 { reserved_block , 0 , 0 , 32,
17144 0xfc0003ff, 0x20000320, 0 , 0,
17145 0x0 }, /* _POOL32A0~*(100) */
17146 { reserved_block , 0 , 0 , 32,
17147 0xfc0003ff, 0x20000328, 0 , 0,
17148 0x0 }, /* _POOL32A0~*(101) */
17149 { reserved_block , 0 , 0 , 32,
17150 0xfc0003ff, 0x20000330, 0 , 0,
17151 0x0 }, /* _POOL32A0~*(102) */
17152 { reserved_block , 0 , 0 , 32,
17153 0xfc0003ff, 0x20000338, 0 , 0,
17154 0x0 }, /* _POOL32A0~*(103) */
17155 { reserved_block , 0 , 0 , 32,
17156 0xfc0003ff, 0x20000340, 0 , 0,
17157 0x0 }, /* _POOL32A0~*(104) */
17158 { reserved_block , 0 , 0 , 32,
17159 0xfc0003ff, 0x20000348, 0 , 0,
17160 0x0 }, /* _POOL32A0~*(105) */
17161 { instruction , 0 , 0 , 32,
17162 0xfc0003ff, 0x20000350, &NMD::SLT , 0,
17163 0x0 }, /* SLT */
17164 { reserved_block , 0 , 0 , 32,
17165 0xfc0003ff, 0x20000358, 0 , 0,
17166 0x0 }, /* _POOL32A0~*(107) */
17167 { reserved_block , 0 , 0 , 32,
17168 0xfc0003ff, 0x20000360, 0 , 0,
17169 0x0 }, /* _POOL32A0~*(108) */
17170 { reserved_block , 0 , 0 , 32,
17171 0xfc0003ff, 0x20000368, 0 , 0,
17172 0x0 }, /* _POOL32A0~*(109) */
17173 { reserved_block , 0 , 0 , 32,
17174 0xfc0003ff, 0x20000370, 0 , 0,
17175 0x0 }, /* _POOL32A0~*(110) */
17176 { reserved_block , 0 , 0 , 32,
17177 0xfc0003ff, 0x20000378, 0 , 0,
17178 0x0 }, /* _POOL32A0~*(111) */
17179 { reserved_block , 0 , 0 , 32,
17180 0xfc0003ff, 0x20000380, 0 , 0,
17181 0x0 }, /* _POOL32A0~*(112) */
17182 { reserved_block , 0 , 0 , 32,
17183 0xfc0003ff, 0x20000388, 0 , 0,
17184 0x0 }, /* _POOL32A0~*(113) */
17185 { pool , P_SLTU , 2 , 32,
17186 0xfc0003ff, 0x20000390, 0 , 0,
17187 0x0 }, /* P.SLTU */
17188 { reserved_block , 0 , 0 , 32,
17189 0xfc0003ff, 0x20000398, 0 , 0,
17190 0x0 }, /* _POOL32A0~*(115) */
17191 { reserved_block , 0 , 0 , 32,
17192 0xfc0003ff, 0x200003a0, 0 , 0,
17193 0x0 }, /* _POOL32A0~*(116) */
17194 { reserved_block , 0 , 0 , 32,
17195 0xfc0003ff, 0x200003a8, 0 , 0,
17196 0x0 }, /* _POOL32A0~*(117) */
17197 { reserved_block , 0 , 0 , 32,
17198 0xfc0003ff, 0x200003b0, 0 , 0,
17199 0x0 }, /* _POOL32A0~*(118) */
17200 { reserved_block , 0 , 0 , 32,
17201 0xfc0003ff, 0x200003b8, 0 , 0,
17202 0x0 }, /* _POOL32A0~*(119) */
17203 { reserved_block , 0 , 0 , 32,
17204 0xfc0003ff, 0x200003c0, 0 , 0,
17205 0x0 }, /* _POOL32A0~*(120) */
17206 { reserved_block , 0 , 0 , 32,
17207 0xfc0003ff, 0x200003c8, 0 , 0,
17208 0x0 }, /* _POOL32A0~*(121) */
17209 { instruction , 0 , 0 , 32,
17210 0xfc0003ff, 0x200003d0, &NMD::SOV , 0,
17211 0x0 }, /* SOV */
17212 { reserved_block , 0 , 0 , 32,
17213 0xfc0003ff, 0x200003d8, 0 , 0,
17214 0x0 }, /* _POOL32A0~*(123) */
17215 { reserved_block , 0 , 0 , 32,
17216 0xfc0003ff, 0x200003e0, 0 , 0,
17217 0x0 }, /* _POOL32A0~*(124) */
17218 { reserved_block , 0 , 0 , 32,
17219 0xfc0003ff, 0x200003e8, 0 , 0,
17220 0x0 }, /* _POOL32A0~*(125) */
17221 { reserved_block , 0 , 0 , 32,
17222 0xfc0003ff, 0x200003f0, 0 , 0,
17223 0x0 }, /* _POOL32A0~*(126) */
17224 { reserved_block , 0 , 0 , 32,
17225 0xfc0003ff, 0x200003f8, 0 , 0,
17226 0x0 }, /* _POOL32A0~*(127) */
17227};
17228
17229
17230NMD::Pool NMD::ADDQ__S__PH[2] = {
17231 { instruction , 0 , 0 , 32,
17232 0xfc0007ff, 0x2000000d, &NMD::ADDQ_PH , 0,
17233 DSP_ }, /* ADDQ.PH */
17234 { instruction , 0 , 0 , 32,
17235 0xfc0007ff, 0x2000040d, &NMD::ADDQ_S_PH , 0,
17236 DSP_ }, /* ADDQ_S.PH */
17237};
17238
17239
17240NMD::Pool NMD::MUL__S__PH[2] = {
17241 { instruction , 0 , 0 , 32,
17242 0xfc0007ff, 0x2000002d, &NMD::MUL_PH , 0,
17243 DSP_ }, /* MUL.PH */
17244 { instruction , 0 , 0 , 32,
17245 0xfc0007ff, 0x2000042d, &NMD::MUL_S_PH , 0,
17246 DSP_ }, /* MUL_S.PH */
17247};
17248
17249
17250NMD::Pool NMD::ADDQH__R__PH[2] = {
17251 { instruction , 0 , 0 , 32,
17252 0xfc0007ff, 0x2000004d, &NMD::ADDQH_PH , 0,
17253 DSP_ }, /* ADDQH.PH */
17254 { instruction , 0 , 0 , 32,
17255 0xfc0007ff, 0x2000044d, &NMD::ADDQH_R_PH , 0,
17256 DSP_ }, /* ADDQH_R.PH */
17257};
17258
17259
17260NMD::Pool NMD::ADDQH__R__W[2] = {
17261 { instruction , 0 , 0 , 32,
17262 0xfc0007ff, 0x2000008d, &NMD::ADDQH_W , 0,
17263 DSP_ }, /* ADDQH.W */
17264 { instruction , 0 , 0 , 32,
17265 0xfc0007ff, 0x2000048d, &NMD::ADDQH_R_W , 0,
17266 DSP_ }, /* ADDQH_R.W */
17267};
17268
17269
17270NMD::Pool NMD::ADDU__S__QB[2] = {
17271 { instruction , 0 , 0 , 32,
17272 0xfc0007ff, 0x200000cd, &NMD::ADDU_QB , 0,
17273 DSP_ }, /* ADDU.QB */
17274 { instruction , 0 , 0 , 32,
17275 0xfc0007ff, 0x200004cd, &NMD::ADDU_S_QB , 0,
17276 DSP_ }, /* ADDU_S.QB */
17277};
17278
17279
17280NMD::Pool NMD::ADDU__S__PH[2] = {
17281 { instruction , 0 , 0 , 32,
17282 0xfc0007ff, 0x2000010d, &NMD::ADDU_PH , 0,
17283 DSP_ }, /* ADDU.PH */
17284 { instruction , 0 , 0 , 32,
17285 0xfc0007ff, 0x2000050d, &NMD::ADDU_S_PH , 0,
17286 DSP_ }, /* ADDU_S.PH */
17287};
17288
17289
17290NMD::Pool NMD::ADDUH__R__QB[2] = {
17291 { instruction , 0 , 0 , 32,
17292 0xfc0007ff, 0x2000014d, &NMD::ADDUH_QB , 0,
17293 DSP_ }, /* ADDUH.QB */
17294 { instruction , 0 , 0 , 32,
17295 0xfc0007ff, 0x2000054d, &NMD::ADDUH_R_QB , 0,
17296 DSP_ }, /* ADDUH_R.QB */
17297};
17298
17299
17300NMD::Pool NMD::SHRAV__R__PH[2] = {
17301 { instruction , 0 , 0 , 32,
17302 0xfc0007ff, 0x2000018d, &NMD::SHRAV_PH , 0,
17303 DSP_ }, /* SHRAV.PH */
17304 { instruction , 0 , 0 , 32,
17305 0xfc0007ff, 0x2000058d, &NMD::SHRAV_R_PH , 0,
17306 DSP_ }, /* SHRAV_R.PH */
17307};
17308
17309
17310NMD::Pool NMD::SHRAV__R__QB[2] = {
17311 { instruction , 0 , 0 , 32,
17312 0xfc0007ff, 0x200001cd, &NMD::SHRAV_QB , 0,
17313 DSP_ }, /* SHRAV.QB */
17314 { instruction , 0 , 0 , 32,
17315 0xfc0007ff, 0x200005cd, &NMD::SHRAV_R_QB , 0,
17316 DSP_ }, /* SHRAV_R.QB */
17317};
17318
17319
17320NMD::Pool NMD::SUBQ__S__PH[2] = {
17321 { instruction , 0 , 0 , 32,
17322 0xfc0007ff, 0x2000020d, &NMD::SUBQ_PH , 0,
17323 DSP_ }, /* SUBQ.PH */
17324 { instruction , 0 , 0 , 32,
17325 0xfc0007ff, 0x2000060d, &NMD::SUBQ_S_PH , 0,
17326 DSP_ }, /* SUBQ_S.PH */
17327};
17328
17329
17330NMD::Pool NMD::SUBQH__R__PH[2] = {
17331 { instruction , 0 , 0 , 32,
17332 0xfc0007ff, 0x2000024d, &NMD::SUBQH_PH , 0,
17333 DSP_ }, /* SUBQH.PH */
17334 { instruction , 0 , 0 , 32,
17335 0xfc0007ff, 0x2000064d, &NMD::SUBQH_R_PH , 0,
17336 DSP_ }, /* SUBQH_R.PH */
17337};
17338
17339
17340NMD::Pool NMD::SUBQH__R__W[2] = {
17341 { instruction , 0 , 0 , 32,
17342 0xfc0007ff, 0x2000028d, &NMD::SUBQH_W , 0,
17343 DSP_ }, /* SUBQH.W */
17344 { instruction , 0 , 0 , 32,
17345 0xfc0007ff, 0x2000068d, &NMD::SUBQH_R_W , 0,
17346 DSP_ }, /* SUBQH_R.W */
17347};
17348
17349
17350NMD::Pool NMD::SUBU__S__QB[2] = {
17351 { instruction , 0 , 0 , 32,
17352 0xfc0007ff, 0x200002cd, &NMD::SUBU_QB , 0,
17353 DSP_ }, /* SUBU.QB */
17354 { instruction , 0 , 0 , 32,
17355 0xfc0007ff, 0x200006cd, &NMD::SUBU_S_QB , 0,
17356 DSP_ }, /* SUBU_S.QB */
17357};
17358
17359
17360NMD::Pool NMD::SUBU__S__PH[2] = {
17361 { instruction , 0 , 0 , 32,
17362 0xfc0007ff, 0x2000030d, &NMD::SUBU_PH , 0,
17363 DSP_ }, /* SUBU.PH */
17364 { instruction , 0 , 0 , 32,
17365 0xfc0007ff, 0x2000070d, &NMD::SUBU_S_PH , 0,
17366 DSP_ }, /* SUBU_S.PH */
17367};
17368
17369
17370NMD::Pool NMD::SHRA__R__PH[2] = {
17371 { instruction , 0 , 0 , 32,
17372 0xfc0007ff, 0x20000335, &NMD::SHRA_PH , 0,
17373 DSP_ }, /* SHRA.PH */
17374 { instruction , 0 , 0 , 32,
17375 0xfc0007ff, 0x20000735, &NMD::SHRA_R_PH , 0,
17376 DSP_ }, /* SHRA_R.PH */
17377};
17378
17379
17380NMD::Pool NMD::SUBUH__R__QB[2] = {
17381 { instruction , 0 , 0 , 32,
17382 0xfc0007ff, 0x2000034d, &NMD::SUBUH_QB , 0,
17383 DSP_ }, /* SUBUH.QB */
17384 { instruction , 0 , 0 , 32,
17385 0xfc0007ff, 0x2000074d, &NMD::SUBUH_R_QB , 0,
17386 DSP_ }, /* SUBUH_R.QB */
17387};
17388
17389
17390NMD::Pool NMD::SHLLV__S__PH[2] = {
17391 { instruction , 0 , 0 , 32,
17392 0xfc0007ff, 0x2000038d, &NMD::SHLLV_PH , 0,
17393 DSP_ }, /* SHLLV.PH */
17394 { instruction , 0 , 0 , 32,
17395 0xfc0007ff, 0x2000078d, &NMD::SHLLV_S_PH , 0,
17396 DSP_ }, /* SHLLV_S.PH */
17397};
17398
17399
17400NMD::Pool NMD::SHLL__S__PH[4] = {
17401 { instruction , 0 , 0 , 32,
17402 0xfc000fff, 0x200003b5, &NMD::SHLL_PH , 0,
17403 DSP_ }, /* SHLL.PH */
17404 { reserved_block , 0 , 0 , 32,
17405 0xfc000fff, 0x200007b5, 0 , 0,
17406 0x0 }, /* SHLL[_S].PH~*(1) */
17407 { instruction , 0 , 0 , 32,
17408 0xfc000fff, 0x20000bb5, &NMD::SHLL_S_PH , 0,
17409 DSP_ }, /* SHLL_S.PH */
17410 { reserved_block , 0 , 0 , 32,
17411 0xfc000fff, 0x20000fb5, 0 , 0,
17412 0x0 }, /* SHLL[_S].PH~*(3) */
17413};
17414
17415
17416NMD::Pool NMD::PRECR_SRA__R__PH_W[2] = {
17417 { instruction , 0 , 0 , 32,
17418 0xfc0007ff, 0x200003cd, &NMD::PRECR_SRA_PH_W , 0,
17419 DSP_ }, /* PRECR_SRA.PH.W */
17420 { instruction , 0 , 0 , 32,
17421 0xfc0007ff, 0x200007cd, &NMD::PRECR_SRA_R_PH_W , 0,
17422 DSP_ }, /* PRECR_SRA_R.PH.W */
17423};
17424
17425
17426NMD::Pool NMD::_POOL32A5[128] = {
17427 { instruction , 0 , 0 , 32,
17428 0xfc0003ff, 0x20000005, &NMD::CMP_EQ_PH , 0,
17429 DSP_ }, /* CMP.EQ.PH */
17430 { pool , ADDQ__S__PH , 2 , 32,
17431 0xfc0003ff, 0x2000000d, 0 , 0,
17432 0x0 }, /* ADDQ[_S].PH */
17433 { reserved_block , 0 , 0 , 32,
17434 0xfc0003ff, 0x20000015, 0 , 0,
17435 0x0 }, /* _POOL32A5~*(2) */
17436 { instruction , 0 , 0 , 32,
17437 0xfc0003ff, 0x2000001d, &NMD::SHILO , 0,
17438 DSP_ }, /* SHILO */
17439 { instruction , 0 , 0 , 32,
17440 0xfc0003ff, 0x20000025, &NMD::MULEQ_S_W_PHL , 0,
17441 DSP_ }, /* MULEQ_S.W.PHL */
17442 { pool , MUL__S__PH , 2 , 32,
17443 0xfc0003ff, 0x2000002d, 0 , 0,
17444 0x0 }, /* MUL[_S].PH */
17445 { reserved_block , 0 , 0 , 32,
17446 0xfc0003ff, 0x20000035, 0 , 0,
17447 0x0 }, /* _POOL32A5~*(6) */
17448 { instruction , 0 , 0 , 32,
17449 0xfc0003ff, 0x2000003d, &NMD::REPL_PH , 0,
17450 DSP_ }, /* REPL.PH */
17451 { instruction , 0 , 0 , 32,
17452 0xfc0003ff, 0x20000045, &NMD::CMP_LT_PH , 0,
17453 DSP_ }, /* CMP.LT.PH */
17454 { pool , ADDQH__R__PH , 2 , 32,
17455 0xfc0003ff, 0x2000004d, 0 , 0,
17456 0x0 }, /* ADDQH[_R].PH */
17457 { reserved_block , 0 , 0 , 32,
17458 0xfc0003ff, 0x20000055, 0 , 0,
17459 0x0 }, /* _POOL32A5~*(10) */
17460 { reserved_block , 0 , 0 , 32,
17461 0xfc0003ff, 0x2000005d, 0 , 0,
17462 0x0 }, /* _POOL32A5~*(11) */
17463 { instruction , 0 , 0 , 32,
17464 0xfc0003ff, 0x20000065, &NMD::MULEQ_S_W_PHR , 0,
17465 DSP_ }, /* MULEQ_S.W.PHR */
17466 { instruction , 0 , 0 , 32,
17467 0xfc0003ff, 0x2000006d, &NMD::PRECR_QB_PH , 0,
17468 DSP_ }, /* PRECR.QB.PH */
17469 { reserved_block , 0 , 0 , 32,
17470 0xfc0003ff, 0x20000075, 0 , 0,
17471 0x0 }, /* _POOL32A5~*(14) */
17472 { reserved_block , 0 , 0 , 32,
17473 0xfc0003ff, 0x2000007d, 0 , 0,
17474 0x0 }, /* _POOL32A5~*(15) */
17475 { instruction , 0 , 0 , 32,
17476 0xfc0003ff, 0x20000085, &NMD::CMP_LE_PH , 0,
17477 DSP_ }, /* CMP.LE.PH */
17478 { pool , ADDQH__R__W , 2 , 32,
17479 0xfc0003ff, 0x2000008d, 0 , 0,
17480 0x0 }, /* ADDQH[_R].W */
17481 { instruction , 0 , 0 , 32,
17482 0xfc0003ff, 0x20000095, &NMD::MULEU_S_PH_QBL , 0,
17483 DSP_ }, /* MULEU_S.PH.QBL */
17484 { reserved_block , 0 , 0 , 32,
17485 0xfc0003ff, 0x2000009d, 0 , 0,
17486 0x0 }, /* _POOL32A5~*(19) */
17487 { reserved_block , 0 , 0 , 32,
17488 0xfc0003ff, 0x200000a5, 0 , 0,
17489 0x0 }, /* _POOL32A5~*(20) */
17490 { instruction , 0 , 0 , 32,
17491 0xfc0003ff, 0x200000ad, &NMD::PRECRQ_QB_PH , 0,
17492 DSP_ }, /* PRECRQ.QB.PH */
17493 { reserved_block , 0 , 0 , 32,
17494 0xfc0003ff, 0x200000b5, 0 , 0,
17495 0x0 }, /* _POOL32A5~*(22) */
17496 { reserved_block , 0 , 0 , 32,
17497 0xfc0003ff, 0x200000bd, 0 , 0,
17498 0x0 }, /* _POOL32A5~*(23) */
17499 { instruction , 0 , 0 , 32,
17500 0xfc0003ff, 0x200000c5, &NMD::CMPGU_EQ_QB , 0,
17501 DSP_ }, /* CMPGU.EQ.QB */
17502 { pool , ADDU__S__QB , 2 , 32,
17503 0xfc0003ff, 0x200000cd, 0 , 0,
17504 0x0 }, /* ADDU[_S].QB */
17505 { instruction , 0 , 0 , 32,
17506 0xfc0003ff, 0x200000d5, &NMD::MULEU_S_PH_QBR , 0,
17507 DSP_ }, /* MULEU_S.PH.QBR */
17508 { reserved_block , 0 , 0 , 32,
17509 0xfc0003ff, 0x200000dd, 0 , 0,
17510 0x0 }, /* _POOL32A5~*(27) */
17511 { reserved_block , 0 , 0 , 32,
17512 0xfc0003ff, 0x200000e5, 0 , 0,
17513 0x0 }, /* _POOL32A5~*(28) */
17514 { instruction , 0 , 0 , 32,
17515 0xfc0003ff, 0x200000ed, &NMD::PRECRQ_PH_W , 0,
17516 DSP_ }, /* PRECRQ.PH.W */
17517 { reserved_block , 0 , 0 , 32,
17518 0xfc0003ff, 0x200000f5, 0 , 0,
17519 0x0 }, /* _POOL32A5~*(30) */
17520 { reserved_block , 0 , 0 , 32,
17521 0xfc0003ff, 0x200000fd, 0 , 0,
17522 0x0 }, /* _POOL32A5~*(31) */
17523 { instruction , 0 , 0 , 32,
17524 0xfc0003ff, 0x20000105, &NMD::CMPGU_LT_QB , 0,
17525 DSP_ }, /* CMPGU.LT.QB */
17526 { pool , ADDU__S__PH , 2 , 32,
17527 0xfc0003ff, 0x2000010d, 0 , 0,
17528 0x0 }, /* ADDU[_S].PH */
17529 { instruction , 0 , 0 , 32,
17530 0xfc0003ff, 0x20000115, &NMD::MULQ_RS_PH , 0,
17531 DSP_ }, /* MULQ_RS.PH */
17532 { reserved_block , 0 , 0 , 32,
17533 0xfc0003ff, 0x2000011d, 0 , 0,
17534 0x0 }, /* _POOL32A5~*(35) */
17535 { reserved_block , 0 , 0 , 32,
17536 0xfc0003ff, 0x20000125, 0 , 0,
17537 0x0 }, /* _POOL32A5~*(36) */
17538 { instruction , 0 , 0 , 32,
17539 0xfc0003ff, 0x2000012d, &NMD::PRECRQ_RS_PH_W , 0,
17540 DSP_ }, /* PRECRQ_RS.PH.W */
17541 { reserved_block , 0 , 0 , 32,
17542 0xfc0003ff, 0x20000135, 0 , 0,
17543 0x0 }, /* _POOL32A5~*(38) */
17544 { reserved_block , 0 , 0 , 32,
17545 0xfc0003ff, 0x2000013d, 0 , 0,
17546 0x0 }, /* _POOL32A5~*(39) */
17547 { instruction , 0 , 0 , 32,
17548 0xfc0003ff, 0x20000145, &NMD::CMPGU_LE_QB , 0,
17549 DSP_ }, /* CMPGU.LE.QB */
17550 { pool , ADDUH__R__QB , 2 , 32,
17551 0xfc0003ff, 0x2000014d, 0 , 0,
17552 0x0 }, /* ADDUH[_R].QB */
17553 { instruction , 0 , 0 , 32,
17554 0xfc0003ff, 0x20000155, &NMD::MULQ_S_PH , 0,
17555 DSP_ }, /* MULQ_S.PH */
17556 { reserved_block , 0 , 0 , 32,
17557 0xfc0003ff, 0x2000015d, 0 , 0,
17558 0x0 }, /* _POOL32A5~*(43) */
17559 { reserved_block , 0 , 0 , 32,
17560 0xfc0003ff, 0x20000165, 0 , 0,
17561 0x0 }, /* _POOL32A5~*(44) */
17562 { instruction , 0 , 0 , 32,
17563 0xfc0003ff, 0x2000016d, &NMD::PRECRQU_S_QB_PH , 0,
17564 DSP_ }, /* PRECRQU_S.QB.PH */
17565 { reserved_block , 0 , 0 , 32,
17566 0xfc0003ff, 0x20000175, 0 , 0,
17567 0x0 }, /* _POOL32A5~*(46) */
17568 { reserved_block , 0 , 0 , 32,
17569 0xfc0003ff, 0x2000017d, 0 , 0,
17570 0x0 }, /* _POOL32A5~*(47) */
17571 { instruction , 0 , 0 , 32,
17572 0xfc0003ff, 0x20000185, &NMD::CMPGDU_EQ_QB , 0,
17573 DSP_ }, /* CMPGDU.EQ.QB */
17574 { pool , SHRAV__R__PH , 2 , 32,
17575 0xfc0003ff, 0x2000018d, 0 , 0,
17576 0x0 }, /* SHRAV[_R].PH */
17577 { instruction , 0 , 0 , 32,
17578 0xfc0003ff, 0x20000195, &NMD::MULQ_RS_W , 0,
17579 DSP_ }, /* MULQ_RS.W */
17580 { reserved_block , 0 , 0 , 32,
17581 0xfc0003ff, 0x2000019d, 0 , 0,
17582 0x0 }, /* _POOL32A5~*(51) */
17583 { reserved_block , 0 , 0 , 32,
17584 0xfc0003ff, 0x200001a5, 0 , 0,
17585 0x0 }, /* _POOL32A5~*(52) */
17586 { instruction , 0 , 0 , 32,
17587 0xfc0003ff, 0x200001ad, &NMD::PACKRL_PH , 0,
17588 DSP_ }, /* PACKRL.PH */
17589 { reserved_block , 0 , 0 , 32,
17590 0xfc0003ff, 0x200001b5, 0 , 0,
17591 0x0 }, /* _POOL32A5~*(54) */
17592 { reserved_block , 0 , 0 , 32,
17593 0xfc0003ff, 0x200001bd, 0 , 0,
17594 0x0 }, /* _POOL32A5~*(55) */
17595 { instruction , 0 , 0 , 32,
17596 0xfc0003ff, 0x200001c5, &NMD::CMPGDU_LT_QB , 0,
17597 DSP_ }, /* CMPGDU.LT.QB */
17598 { pool , SHRAV__R__QB , 2 , 32,
17599 0xfc0003ff, 0x200001cd, 0 , 0,
17600 0x0 }, /* SHRAV[_R].QB */
17601 { instruction , 0 , 0 , 32,
17602 0xfc0003ff, 0x200001d5, &NMD::MULQ_S_W , 0,
17603 DSP_ }, /* MULQ_S.W */
17604 { reserved_block , 0 , 0 , 32,
17605 0xfc0003ff, 0x200001dd, 0 , 0,
17606 0x0 }, /* _POOL32A5~*(59) */
17607 { reserved_block , 0 , 0 , 32,
17608 0xfc0003ff, 0x200001e5, 0 , 0,
17609 0x0 }, /* _POOL32A5~*(60) */
17610 { instruction , 0 , 0 , 32,
17611 0xfc0003ff, 0x200001ed, &NMD::PICK_QB , 0,
17612 DSP_ }, /* PICK.QB */
17613 { reserved_block , 0 , 0 , 32,
17614 0xfc0003ff, 0x200001f5, 0 , 0,
17615 0x0 }, /* _POOL32A5~*(62) */
17616 { reserved_block , 0 , 0 , 32,
17617 0xfc0003ff, 0x200001fd, 0 , 0,
17618 0x0 }, /* _POOL32A5~*(63) */
17619 { instruction , 0 , 0 , 32,
17620 0xfc0003ff, 0x20000205, &NMD::CMPGDU_LE_QB , 0,
17621 DSP_ }, /* CMPGDU.LE.QB */
17622 { pool , SUBQ__S__PH , 2 , 32,
17623 0xfc0003ff, 0x2000020d, 0 , 0,
17624 0x0 }, /* SUBQ[_S].PH */
17625 { instruction , 0 , 0 , 32,
17626 0xfc0003ff, 0x20000215, &NMD::APPEND , 0,
17627 DSP_ }, /* APPEND */
17628 { reserved_block , 0 , 0 , 32,
17629 0xfc0003ff, 0x2000021d, 0 , 0,
17630 0x0 }, /* _POOL32A5~*(67) */
17631 { reserved_block , 0 , 0 , 32,
17632 0xfc0003ff, 0x20000225, 0 , 0,
17633 0x0 }, /* _POOL32A5~*(68) */
17634 { instruction , 0 , 0 , 32,
17635 0xfc0003ff, 0x2000022d, &NMD::PICK_PH , 0,
17636 DSP_ }, /* PICK.PH */
17637 { reserved_block , 0 , 0 , 32,
17638 0xfc0003ff, 0x20000235, 0 , 0,
17639 0x0 }, /* _POOL32A5~*(70) */
17640 { reserved_block , 0 , 0 , 32,
17641 0xfc0003ff, 0x2000023d, 0 , 0,
17642 0x0 }, /* _POOL32A5~*(71) */
17643 { instruction , 0 , 0 , 32,
17644 0xfc0003ff, 0x20000245, &NMD::CMPU_EQ_QB , 0,
17645 DSP_ }, /* CMPU.EQ.QB */
17646 { pool , SUBQH__R__PH , 2 , 32,
17647 0xfc0003ff, 0x2000024d, 0 , 0,
17648 0x0 }, /* SUBQH[_R].PH */
17649 { instruction , 0 , 0 , 32,
17650 0xfc0003ff, 0x20000255, &NMD::PREPEND , 0,
17651 DSP_ }, /* PREPEND */
17652 { reserved_block , 0 , 0 , 32,
17653 0xfc0003ff, 0x2000025d, 0 , 0,
17654 0x0 }, /* _POOL32A5~*(75) */
17655 { reserved_block , 0 , 0 , 32,
17656 0xfc0003ff, 0x20000265, 0 , 0,
17657 0x0 }, /* _POOL32A5~*(76) */
17658 { reserved_block , 0 , 0 , 32,
17659 0xfc0003ff, 0x2000026d, 0 , 0,
17660 0x0 }, /* _POOL32A5~*(77) */
17661 { reserved_block , 0 , 0 , 32,
17662 0xfc0003ff, 0x20000275, 0 , 0,
17663 0x0 }, /* _POOL32A5~*(78) */
17664 { reserved_block , 0 , 0 , 32,
17665 0xfc0003ff, 0x2000027d, 0 , 0,
17666 0x0 }, /* _POOL32A5~*(79) */
17667 { instruction , 0 , 0 , 32,
17668 0xfc0003ff, 0x20000285, &NMD::CMPU_LT_QB , 0,
17669 DSP_ }, /* CMPU.LT.QB */
17670 { pool , SUBQH__R__W , 2 , 32,
17671 0xfc0003ff, 0x2000028d, 0 , 0,
17672 0x0 }, /* SUBQH[_R].W */
17673 { instruction , 0 , 0 , 32,
17674 0xfc0003ff, 0x20000295, &NMD::MODSUB , 0,
17675 DSP_ }, /* MODSUB */
17676 { reserved_block , 0 , 0 , 32,
17677 0xfc0003ff, 0x2000029d, 0 , 0,
17678 0x0 }, /* _POOL32A5~*(83) */
17679 { reserved_block , 0 , 0 , 32,
17680 0xfc0003ff, 0x200002a5, 0 , 0,
17681 0x0 }, /* _POOL32A5~*(84) */
17682 { reserved_block , 0 , 0 , 32,
17683 0xfc0003ff, 0x200002ad, 0 , 0,
17684 0x0 }, /* _POOL32A5~*(85) */
17685 { reserved_block , 0 , 0 , 32,
17686 0xfc0003ff, 0x200002b5, 0 , 0,
17687 0x0 }, /* _POOL32A5~*(86) */
17688 { reserved_block , 0 , 0 , 32,
17689 0xfc0003ff, 0x200002bd, 0 , 0,
17690 0x0 }, /* _POOL32A5~*(87) */
17691 { instruction , 0 , 0 , 32,
17692 0xfc0003ff, 0x200002c5, &NMD::CMPU_LE_QB , 0,
17693 DSP_ }, /* CMPU.LE.QB */
17694 { pool , SUBU__S__QB , 2 , 32,
17695 0xfc0003ff, 0x200002cd, 0 , 0,
17696 0x0 }, /* SUBU[_S].QB */
17697 { instruction , 0 , 0 , 32,
17698 0xfc0003ff, 0x200002d5, &NMD::SHRAV_R_W , 0,
17699 DSP_ }, /* SHRAV_R.W */
17700 { reserved_block , 0 , 0 , 32,
17701 0xfc0003ff, 0x200002dd, 0 , 0,
17702 0x0 }, /* _POOL32A5~*(91) */
17703 { reserved_block , 0 , 0 , 32,
17704 0xfc0003ff, 0x200002e5, 0 , 0,
17705 0x0 }, /* _POOL32A5~*(92) */
17706 { reserved_block , 0 , 0 , 32,
17707 0xfc0003ff, 0x200002ed, 0 , 0,
17708 0x0 }, /* _POOL32A5~*(93) */
17709 { instruction , 0 , 0 , 32,
17710 0xfc0003ff, 0x200002f5, &NMD::SHRA_R_W , 0,
17711 DSP_ }, /* SHRA_R.W */
17712 { reserved_block , 0 , 0 , 32,
17713 0xfc0003ff, 0x200002fd, 0 , 0,
17714 0x0 }, /* _POOL32A5~*(95) */
17715 { instruction , 0 , 0 , 32,
17716 0xfc0003ff, 0x20000305, &NMD::ADDQ_S_W , 0,
17717 DSP_ }, /* ADDQ_S.W */
17718 { pool , SUBU__S__PH , 2 , 32,
17719 0xfc0003ff, 0x2000030d, 0 , 0,
17720 0x0 }, /* SUBU[_S].PH */
17721 { instruction , 0 , 0 , 32,
17722 0xfc0003ff, 0x20000315, &NMD::SHRLV_PH , 0,
17723 DSP_ }, /* SHRLV.PH */
17724 { reserved_block , 0 , 0 , 32,
17725 0xfc0003ff, 0x2000031d, 0 , 0,
17726 0x0 }, /* _POOL32A5~*(99) */
17727 { reserved_block , 0 , 0 , 32,
17728 0xfc0003ff, 0x20000325, 0 , 0,
17729 0x0 }, /* _POOL32A5~*(100) */
17730 { reserved_block , 0 , 0 , 32,
17731 0xfc0003ff, 0x2000032d, 0 , 0,
17732 0x0 }, /* _POOL32A5~*(101) */
17733 { pool , SHRA__R__PH , 2 , 32,
17734 0xfc0003ff, 0x20000335, 0 , 0,
17735 0x0 }, /* SHRA[_R].PH */
17736 { reserved_block , 0 , 0 , 32,
17737 0xfc0003ff, 0x2000033d, 0 , 0,
17738 0x0 }, /* _POOL32A5~*(103) */
17739 { instruction , 0 , 0 , 32,
17740 0xfc0003ff, 0x20000345, &NMD::SUBQ_S_W , 0,
17741 DSP_ }, /* SUBQ_S.W */
17742 { pool , SUBUH__R__QB , 2 , 32,
17743 0xfc0003ff, 0x2000034d, 0 , 0,
17744 0x0 }, /* SUBUH[_R].QB */
17745 { instruction , 0 , 0 , 32,
17746 0xfc0003ff, 0x20000355, &NMD::SHRLV_QB , 0,
17747 DSP_ }, /* SHRLV.QB */
17748 { reserved_block , 0 , 0 , 32,
17749 0xfc0003ff, 0x2000035d, 0 , 0,
17750 0x0 }, /* _POOL32A5~*(107) */
17751 { reserved_block , 0 , 0 , 32,
17752 0xfc0003ff, 0x20000365, 0 , 0,
17753 0x0 }, /* _POOL32A5~*(108) */
17754 { reserved_block , 0 , 0 , 32,
17755 0xfc0003ff, 0x2000036d, 0 , 0,
17756 0x0 }, /* _POOL32A5~*(109) */
17757 { reserved_block , 0 , 0 , 32,
17758 0xfc0003ff, 0x20000375, 0 , 0,
17759 0x0 }, /* _POOL32A5~*(110) */
17760 { reserved_block , 0 , 0 , 32,
17761 0xfc0003ff, 0x2000037d, 0 , 0,
17762 0x0 }, /* _POOL32A5~*(111) */
17763 { instruction , 0 , 0 , 32,
17764 0xfc0003ff, 0x20000385, &NMD::ADDSC , 0,
17765 DSP_ }, /* ADDSC */
17766 { pool , SHLLV__S__PH , 2 , 32,
17767 0xfc0003ff, 0x2000038d, 0 , 0,
17768 0x0 }, /* SHLLV[_S].PH */
17769 { instruction , 0 , 0 , 32,
17770 0xfc0003ff, 0x20000395, &NMD::SHLLV_QB , 0,
17771 DSP_ }, /* SHLLV.QB */
17772 { reserved_block , 0 , 0 , 32,
17773 0xfc0003ff, 0x2000039d, 0 , 0,
17774 0x0 }, /* _POOL32A5~*(115) */
17775 { reserved_block , 0 , 0 , 32,
17776 0xfc0003ff, 0x200003a5, 0 , 0,
17777 0x0 }, /* _POOL32A5~*(116) */
17778 { reserved_block , 0 , 0 , 32,
17779 0xfc0003ff, 0x200003ad, 0 , 0,
17780 0x0 }, /* _POOL32A5~*(117) */
17781 { pool , SHLL__S__PH , 4 , 32,
17782 0xfc0003ff, 0x200003b5, 0 , 0,
17783 0x0 }, /* SHLL[_S].PH */
17784 { reserved_block , 0 , 0 , 32,
17785 0xfc0003ff, 0x200003bd, 0 , 0,
17786 0x0 }, /* _POOL32A5~*(119) */
17787 { instruction , 0 , 0 , 32,
17788 0xfc0003ff, 0x200003c5, &NMD::ADDWC , 0,
17789 DSP_ }, /* ADDWC */
17790 { pool , PRECR_SRA__R__PH_W , 2 , 32,
17791 0xfc0003ff, 0x200003cd, 0 , 0,
17792 0x0 }, /* PRECR_SRA[_R].PH.W */
17793 { instruction , 0 , 0 , 32,
17794 0xfc0003ff, 0x200003d5, &NMD::SHLLV_S_W , 0,
17795 DSP_ }, /* SHLLV_S.W */
17796 { reserved_block , 0 , 0 , 32,
17797 0xfc0003ff, 0x200003dd, 0 , 0,
17798 0x0 }, /* _POOL32A5~*(123) */
17799 { reserved_block , 0 , 0 , 32,
17800 0xfc0003ff, 0x200003e5, 0 , 0,
17801 0x0 }, /* _POOL32A5~*(124) */
17802 { reserved_block , 0 , 0 , 32,
17803 0xfc0003ff, 0x200003ed, 0 , 0,
17804 0x0 }, /* _POOL32A5~*(125) */
17805 { instruction , 0 , 0 , 32,
17806 0xfc0003ff, 0x200003f5, &NMD::SHLL_S_W , 0,
17807 DSP_ }, /* SHLL_S.W */
17808 { reserved_block , 0 , 0 , 32,
17809 0xfc0003ff, 0x200003fd, 0 , 0,
17810 0x0 }, /* _POOL32A5~*(127) */
17811};
17812
17813
17814NMD::Pool NMD::PP_LSX[16] = {
17815 { instruction , 0 , 0 , 32,
17816 0xfc0007ff, 0x20000007, &NMD::LBX , 0,
17817 0x0 }, /* LBX */
17818 { instruction , 0 , 0 , 32,
17819 0xfc0007ff, 0x20000087, &NMD::SBX , 0,
17820 XMMS_ }, /* SBX */
17821 { instruction , 0 , 0 , 32,
17822 0xfc0007ff, 0x20000107, &NMD::LBUX , 0,
17823 0x0 }, /* LBUX */
17824 { reserved_block , 0 , 0 , 32,
17825 0xfc0007ff, 0x20000187, 0 , 0,
17826 0x0 }, /* PP.LSX~*(3) */
17827 { instruction , 0 , 0 , 32,
17828 0xfc0007ff, 0x20000207, &NMD::LHX , 0,
17829 0x0 }, /* LHX */
17830 { instruction , 0 , 0 , 32,
17831 0xfc0007ff, 0x20000287, &NMD::SHX , 0,
17832 XMMS_ }, /* SHX */
17833 { instruction , 0 , 0 , 32,
17834 0xfc0007ff, 0x20000307, &NMD::LHUX , 0,
17835 0x0 }, /* LHUX */
17836 { instruction , 0 , 0 , 32,
17837 0xfc0007ff, 0x20000387, &NMD::LWUX , 0,
17838 MIPS64_ }, /* LWUX */
17839 { instruction , 0 , 0 , 32,
17840 0xfc0007ff, 0x20000407, &NMD::LWX , 0,
17841 0x0 }, /* LWX */
17842 { instruction , 0 , 0 , 32,
17843 0xfc0007ff, 0x20000487, &NMD::SWX , 0,
17844 XMMS_ }, /* SWX */
17845 { instruction , 0 , 0 , 32,
17846 0xfc0007ff, 0x20000507, &NMD::LWC1X , 0,
17847 CP1_ }, /* LWC1X */
17848 { instruction , 0 , 0 , 32,
17849 0xfc0007ff, 0x20000587, &NMD::SWC1X , 0,
17850 CP1_ }, /* SWC1X */
17851 { instruction , 0 , 0 , 32,
17852 0xfc0007ff, 0x20000607, &NMD::LDX , 0,
17853 MIPS64_ }, /* LDX */
17854 { instruction , 0 , 0 , 32,
17855 0xfc0007ff, 0x20000687, &NMD::SDX , 0,
17856 MIPS64_ }, /* SDX */
17857 { instruction , 0 , 0 , 32,
17858 0xfc0007ff, 0x20000707, &NMD::LDC1X , 0,
17859 CP1_ }, /* LDC1X */
17860 { instruction , 0 , 0 , 32,
17861 0xfc0007ff, 0x20000787, &NMD::SDC1X , 0,
17862 CP1_ }, /* SDC1X */
17863};
17864
17865
17866NMD::Pool NMD::PP_LSXS[16] = {
17867 { reserved_block , 0 , 0 , 32,
17868 0xfc0007ff, 0x20000047, 0 , 0,
17869 0x0 }, /* PP.LSXS~*(0) */
17870 { reserved_block , 0 , 0 , 32,
17871 0xfc0007ff, 0x200000c7, 0 , 0,
17872 0x0 }, /* PP.LSXS~*(1) */
17873 { reserved_block , 0 , 0 , 32,
17874 0xfc0007ff, 0x20000147, 0 , 0,
17875 0x0 }, /* PP.LSXS~*(2) */
17876 { reserved_block , 0 , 0 , 32,
17877 0xfc0007ff, 0x200001c7, 0 , 0,
17878 0x0 }, /* PP.LSXS~*(3) */
17879 { instruction , 0 , 0 , 32,
17880 0xfc0007ff, 0x20000247, &NMD::LHXS , 0,
17881 0x0 }, /* LHXS */
17882 { instruction , 0 , 0 , 32,
17883 0xfc0007ff, 0x200002c7, &NMD::SHXS , 0,
17884 XMMS_ }, /* SHXS */
17885 { instruction , 0 , 0 , 32,
17886 0xfc0007ff, 0x20000347, &NMD::LHUXS , 0,
17887 0x0 }, /* LHUXS */
17888 { instruction , 0 , 0 , 32,
17889 0xfc0007ff, 0x200003c7, &NMD::LWUXS , 0,
17890 MIPS64_ }, /* LWUXS */
17891 { instruction , 0 , 0 , 32,
17892 0xfc0007ff, 0x20000447, &NMD::LWXS_32_ , 0,
17893 0x0 }, /* LWXS[32] */
17894 { instruction , 0 , 0 , 32,
17895 0xfc0007ff, 0x200004c7, &NMD::SWXS , 0,
17896 XMMS_ }, /* SWXS */
17897 { instruction , 0 , 0 , 32,
17898 0xfc0007ff, 0x20000547, &NMD::LWC1XS , 0,
17899 CP1_ }, /* LWC1XS */
17900 { instruction , 0 , 0 , 32,
17901 0xfc0007ff, 0x200005c7, &NMD::SWC1XS , 0,
17902 CP1_ }, /* SWC1XS */
17903 { instruction , 0 , 0 , 32,
17904 0xfc0007ff, 0x20000647, &NMD::LDXS , 0,
17905 MIPS64_ }, /* LDXS */
17906 { instruction , 0 , 0 , 32,
17907 0xfc0007ff, 0x200006c7, &NMD::SDXS , 0,
17908 MIPS64_ }, /* SDXS */
17909 { instruction , 0 , 0 , 32,
17910 0xfc0007ff, 0x20000747, &NMD::LDC1XS , 0,
17911 CP1_ }, /* LDC1XS */
17912 { instruction , 0 , 0 , 32,
17913 0xfc0007ff, 0x200007c7, &NMD::SDC1XS , 0,
17914 CP1_ }, /* SDC1XS */
17915};
17916
17917
17918NMD::Pool NMD::P_LSX[2] = {
17919 { pool , PP_LSX , 16 , 32,
17920 0xfc00007f, 0x20000007, 0 , 0,
17921 0x0 }, /* PP.LSX */
17922 { pool , PP_LSXS , 16 , 32,
17923 0xfc00007f, 0x20000047, 0 , 0,
17924 0x0 }, /* PP.LSXS */
17925};
17926
17927
17928NMD::Pool NMD::POOL32Axf_1_0[4] = {
17929 { instruction , 0 , 0 , 32,
17930 0xfc003fff, 0x2000007f, &NMD::MFHI_DSP_ , 0,
17931 DSP_ }, /* MFHI[DSP] */
17932 { instruction , 0 , 0 , 32,
17933 0xfc003fff, 0x2000107f, &NMD::MFLO_DSP_ , 0,
17934 DSP_ }, /* MFLO[DSP] */
17935 { instruction , 0 , 0 , 32,
17936 0xfc003fff, 0x2000207f, &NMD::MTHI_DSP_ , 0,
17937 DSP_ }, /* MTHI[DSP] */
17938 { instruction , 0 , 0 , 32,
17939 0xfc003fff, 0x2000307f, &NMD::MTLO_DSP_ , 0,
17940 DSP_ }, /* MTLO[DSP] */
17941};
17942
17943
17944NMD::Pool NMD::POOL32Axf_1_1[4] = {
17945 { instruction , 0 , 0 , 32,
17946 0xfc003fff, 0x2000027f, &NMD::MTHLIP , 0,
17947 DSP_ }, /* MTHLIP */
17948 { instruction , 0 , 0 , 32,
17949 0xfc003fff, 0x2000127f, &NMD::SHILOV , 0,
17950 DSP_ }, /* SHILOV */
17951 { reserved_block , 0 , 0 , 32,
17952 0xfc003fff, 0x2000227f, 0 , 0,
17953 0x0 }, /* POOL32Axf_1_1~*(2) */
17954 { reserved_block , 0 , 0 , 32,
17955 0xfc003fff, 0x2000327f, 0 , 0,
17956 0x0 }, /* POOL32Axf_1_1~*(3) */
17957};
17958
17959
17960NMD::Pool NMD::POOL32Axf_1_3[4] = {
17961 { instruction , 0 , 0 , 32,
17962 0xfc003fff, 0x2000067f, &NMD::RDDSP , 0,
17963 DSP_ }, /* RDDSP */
17964 { instruction , 0 , 0 , 32,
17965 0xfc003fff, 0x2000167f, &NMD::WRDSP , 0,
17966 DSP_ }, /* WRDSP */
17967 { instruction , 0 , 0 , 32,
17968 0xfc003fff, 0x2000267f, &NMD::EXTP , 0,
17969 DSP_ }, /* EXTP */
17970 { instruction , 0 , 0 , 32,
17971 0xfc003fff, 0x2000367f, &NMD::EXTPDP , 0,
17972 DSP_ }, /* EXTPDP */
17973};
17974
17975
17976NMD::Pool NMD::POOL32Axf_1_4[2] = {
17977 { instruction , 0 , 0 , 32,
17978 0xfc001fff, 0x2000087f, &NMD::SHLL_QB , 0,
17979 DSP_ }, /* SHLL.QB */
17980 { instruction , 0 , 0 , 32,
17981 0xfc001fff, 0x2000187f, &NMD::SHRL_QB , 0,
17982 DSP_ }, /* SHRL.QB */
17983};
17984
17985
17986NMD::Pool NMD::MAQ_S_A__W_PHR[2] = {
17987 { instruction , 0 , 0 , 32,
17988 0xfc003fff, 0x20000a7f, &NMD::MAQ_S_W_PHR , 0,
17989 DSP_ }, /* MAQ_S.W.PHR */
17990 { instruction , 0 , 0 , 32,
17991 0xfc003fff, 0x20002a7f, &NMD::MAQ_SA_W_PHR , 0,
17992 DSP_ }, /* MAQ_SA.W.PHR */
17993};
17994
17995
17996NMD::Pool NMD::MAQ_S_A__W_PHL[2] = {
17997 { instruction , 0 , 0 , 32,
17998 0xfc003fff, 0x20001a7f, &NMD::MAQ_S_W_PHL , 0,
17999 DSP_ }, /* MAQ_S.W.PHL */
18000 { instruction , 0 , 0 , 32,
18001 0xfc003fff, 0x20003a7f, &NMD::MAQ_SA_W_PHL , 0,
18002 DSP_ }, /* MAQ_SA.W.PHL */
18003};
18004
18005
18006NMD::Pool NMD::POOL32Axf_1_5[2] = {
18007 { pool , MAQ_S_A__W_PHR , 2 , 32,
18008 0xfc001fff, 0x20000a7f, 0 , 0,
18009 0x0 }, /* MAQ_S[A].W.PHR */
18010 { pool , MAQ_S_A__W_PHL , 2 , 32,
18011 0xfc001fff, 0x20001a7f, 0 , 0,
18012 0x0 }, /* MAQ_S[A].W.PHL */
18013};
18014
18015
18016NMD::Pool NMD::POOL32Axf_1_7[4] = {
18017 { instruction , 0 , 0 , 32,
18018 0xfc003fff, 0x20000e7f, &NMD::EXTR_W , 0,
18019 DSP_ }, /* EXTR.W */
18020 { instruction , 0 , 0 , 32,
18021 0xfc003fff, 0x20001e7f, &NMD::EXTR_R_W , 0,
18022 DSP_ }, /* EXTR_R.W */
18023 { instruction , 0 , 0 , 32,
18024 0xfc003fff, 0x20002e7f, &NMD::EXTR_RS_W , 0,
18025 DSP_ }, /* EXTR_RS.W */
18026 { instruction , 0 , 0 , 32,
18027 0xfc003fff, 0x20003e7f, &NMD::EXTR_S_H , 0,
18028 DSP_ }, /* EXTR_S.H */
18029};
18030
18031
18032NMD::Pool NMD::POOL32Axf_1[8] = {
18033 { pool , POOL32Axf_1_0 , 4 , 32,
18034 0xfc000fff, 0x2000007f, 0 , 0,
18035 0x0 }, /* POOL32Axf_1_0 */
18036 { pool , POOL32Axf_1_1 , 4 , 32,
18037 0xfc000fff, 0x2000027f, 0 , 0,
18038 0x0 }, /* POOL32Axf_1_1 */
18039 { reserved_block , 0 , 0 , 32,
18040 0xfc000fff, 0x2000047f, 0 , 0,
18041 0x0 }, /* POOL32Axf_1~*(2) */
18042 { pool , POOL32Axf_1_3 , 4 , 32,
18043 0xfc000fff, 0x2000067f, 0 , 0,
18044 0x0 }, /* POOL32Axf_1_3 */
18045 { pool , POOL32Axf_1_4 , 2 , 32,
18046 0xfc000fff, 0x2000087f, 0 , 0,
18047 0x0 }, /* POOL32Axf_1_4 */
18048 { pool , POOL32Axf_1_5 , 2 , 32,
18049 0xfc000fff, 0x20000a7f, 0 , 0,
18050 0x0 }, /* POOL32Axf_1_5 */
18051 { reserved_block , 0 , 0 , 32,
18052 0xfc000fff, 0x20000c7f, 0 , 0,
18053 0x0 }, /* POOL32Axf_1~*(6) */
18054 { pool , POOL32Axf_1_7 , 4 , 32,
18055 0xfc000fff, 0x20000e7f, 0 , 0,
18056 0x0 }, /* POOL32Axf_1_7 */
18057};
18058
18059
18060NMD::Pool NMD::POOL32Axf_2_DSP__0_7[8] = {
18061 { instruction , 0 , 0 , 32,
18062 0xfc003fff, 0x200000bf, &NMD::DPA_W_PH , 0,
18063 DSP_ }, /* DPA.W.PH */
18064 { instruction , 0 , 0 , 32,
18065 0xfc003fff, 0x200002bf, &NMD::DPAQ_S_W_PH , 0,
18066 DSP_ }, /* DPAQ_S.W.PH */
18067 { instruction , 0 , 0 , 32,
18068 0xfc003fff, 0x200004bf, &NMD::DPS_W_PH , 0,
18069 DSP_ }, /* DPS.W.PH */
18070 { instruction , 0 , 0 , 32,
18071 0xfc003fff, 0x200006bf, &NMD::DPSQ_S_W_PH , 0,
18072 DSP_ }, /* DPSQ_S.W.PH */
18073 { reserved_block , 0 , 0 , 32,
18074 0xfc003fff, 0x200008bf, 0 , 0,
18075 0x0 }, /* POOL32Axf_2(DSP)_0_7~*(4) */
18076 { instruction , 0 , 0 , 32,
18077 0xfc003fff, 0x20000abf, &NMD::MADD_DSP_ , 0,
18078 DSP_ }, /* MADD[DSP] */
18079 { instruction , 0 , 0 , 32,
18080 0xfc003fff, 0x20000cbf, &NMD::MULT_DSP_ , 0,
18081 DSP_ }, /* MULT[DSP] */
18082 { instruction , 0 , 0 , 32,
18083 0xfc003fff, 0x20000ebf, &NMD::EXTRV_W , 0,
18084 DSP_ }, /* EXTRV.W */
18085};
18086
18087
18088NMD::Pool NMD::POOL32Axf_2_DSP__8_15[8] = {
18089 { instruction , 0 , 0 , 32,
18090 0xfc003fff, 0x200010bf, &NMD::DPAX_W_PH , 0,
18091 DSP_ }, /* DPAX.W.PH */
18092 { instruction , 0 , 0 , 32,
18093 0xfc003fff, 0x200012bf, &NMD::DPAQ_SA_L_W , 0,
18094 DSP_ }, /* DPAQ_SA.L.W */
18095 { instruction , 0 , 0 , 32,
18096 0xfc003fff, 0x200014bf, &NMD::DPSX_W_PH , 0,
18097 DSP_ }, /* DPSX.W.PH */
18098 { instruction , 0 , 0 , 32,
18099 0xfc003fff, 0x200016bf, &NMD::DPSQ_SA_L_W , 0,
18100 DSP_ }, /* DPSQ_SA.L.W */
18101 { reserved_block , 0 , 0 , 32,
18102 0xfc003fff, 0x200018bf, 0 , 0,
18103 0x0 }, /* POOL32Axf_2(DSP)_8_15~*(4) */
18104 { instruction , 0 , 0 , 32,
18105 0xfc003fff, 0x20001abf, &NMD::MADDU_DSP_ , 0,
18106 DSP_ }, /* MADDU[DSP] */
18107 { instruction , 0 , 0 , 32,
18108 0xfc003fff, 0x20001cbf, &NMD::MULTU_DSP_ , 0,
18109 DSP_ }, /* MULTU[DSP] */
18110 { instruction , 0 , 0 , 32,
18111 0xfc003fff, 0x20001ebf, &NMD::EXTRV_R_W , 0,
18112 DSP_ }, /* EXTRV_R.W */
18113};
18114
18115
18116NMD::Pool NMD::POOL32Axf_2_DSP__16_23[8] = {
18117 { instruction , 0 , 0 , 32,
18118 0xfc003fff, 0x200020bf, &NMD::DPAU_H_QBL , 0,
18119 DSP_ }, /* DPAU.H.QBL */
18120 { instruction , 0 , 0 , 32,
18121 0xfc003fff, 0x200022bf, &NMD::DPAQX_S_W_PH , 0,
18122 DSP_ }, /* DPAQX_S.W.PH */
18123 { instruction , 0 , 0 , 32,
18124 0xfc003fff, 0x200024bf, &NMD::DPSU_H_QBL , 0,
18125 DSP_ }, /* DPSU.H.QBL */
18126 { instruction , 0 , 0 , 32,
18127 0xfc003fff, 0x200026bf, &NMD::DPSQX_S_W_PH , 0,
18128 DSP_ }, /* DPSQX_S.W.PH */
18129 { instruction , 0 , 0 , 32,
18130 0xfc003fff, 0x200028bf, &NMD::EXTPV , 0,
18131 DSP_ }, /* EXTPV */
18132 { instruction , 0 , 0 , 32,
18133 0xfc003fff, 0x20002abf, &NMD::MSUB_DSP_ , 0,
18134 DSP_ }, /* MSUB[DSP] */
18135 { instruction , 0 , 0 , 32,
18136 0xfc003fff, 0x20002cbf, &NMD::MULSA_W_PH , 0,
18137 DSP_ }, /* MULSA.W.PH */
18138 { instruction , 0 , 0 , 32,
18139 0xfc003fff, 0x20002ebf, &NMD::EXTRV_RS_W , 0,
18140 DSP_ }, /* EXTRV_RS.W */
18141};
18142
18143
18144NMD::Pool NMD::POOL32Axf_2_DSP__24_31[8] = {
18145 { instruction , 0 , 0 , 32,
18146 0xfc003fff, 0x200030bf, &NMD::DPAU_H_QBR , 0,
18147 DSP_ }, /* DPAU.H.QBR */
18148 { instruction , 0 , 0 , 32,
18149 0xfc003fff, 0x200032bf, &NMD::DPAQX_SA_W_PH , 0,
18150 DSP_ }, /* DPAQX_SA.W.PH */
18151 { instruction , 0 , 0 , 32,
18152 0xfc003fff, 0x200034bf, &NMD::DPSU_H_QBR , 0,
18153 DSP_ }, /* DPSU.H.QBR */
18154 { instruction , 0 , 0 , 32,
18155 0xfc003fff, 0x200036bf, &NMD::DPSQX_SA_W_PH , 0,
18156 DSP_ }, /* DPSQX_SA.W.PH */
18157 { instruction , 0 , 0 , 32,
18158 0xfc003fff, 0x200038bf, &NMD::EXTPDPV , 0,
18159 DSP_ }, /* EXTPDPV */
18160 { instruction , 0 , 0 , 32,
18161 0xfc003fff, 0x20003abf, &NMD::MSUBU_DSP_ , 0,
18162 DSP_ }, /* MSUBU[DSP] */
18163 { instruction , 0 , 0 , 32,
18164 0xfc003fff, 0x20003cbf, &NMD::MULSAQ_S_W_PH , 0,
18165 DSP_ }, /* MULSAQ_S.W.PH */
18166 { instruction , 0 , 0 , 32,
18167 0xfc003fff, 0x20003ebf, &NMD::EXTRV_S_H , 0,
18168 DSP_ }, /* EXTRV_S.H */
18169};
18170
18171
18172NMD::Pool NMD::POOL32Axf_2[4] = {
18173 { pool , POOL32Axf_2_DSP__0_7, 8 , 32,
18174 0xfc0031ff, 0x200000bf, 0 , 0,
18175 0x0 }, /* POOL32Axf_2(DSP)_0_7 */
18176 { pool , POOL32Axf_2_DSP__8_15, 8 , 32,
18177 0xfc0031ff, 0x200010bf, 0 , 0,
18178 0x0 }, /* POOL32Axf_2(DSP)_8_15 */
18179 { pool , POOL32Axf_2_DSP__16_23, 8 , 32,
18180 0xfc0031ff, 0x200020bf, 0 , 0,
18181 0x0 }, /* POOL32Axf_2(DSP)_16_23 */
18182 { pool , POOL32Axf_2_DSP__24_31, 8 , 32,
18183 0xfc0031ff, 0x200030bf, 0 , 0,
18184 0x0 }, /* POOL32Axf_2(DSP)_24_31 */
18185};
18186
18187
18188NMD::Pool NMD::POOL32Axf_4[128] = {
18189 { instruction , 0 , 0 , 32,
18190 0xfc00ffff, 0x2000013f, &NMD::ABSQ_S_QB , 0,
18191 DSP_ }, /* ABSQ_S.QB */
18192 { instruction , 0 , 0 , 32,
18193 0xfc00ffff, 0x2000033f, &NMD::REPLV_PH , 0,
18194 DSP_ }, /* REPLV.PH */
18195 { reserved_block , 0 , 0 , 32,
18196 0xfc00ffff, 0x2000053f, 0 , 0,
18197 0x0 }, /* POOL32Axf_4~*(2) */
18198 { reserved_block , 0 , 0 , 32,
18199 0xfc00ffff, 0x2000073f, 0 , 0,
18200 0x0 }, /* POOL32Axf_4~*(3) */
18201 { reserved_block , 0 , 0 , 32,
18202 0xfc00ffff, 0x2000093f, 0 , 0,
18203 0x0 }, /* POOL32Axf_4~*(4) */
18204 { reserved_block , 0 , 0 , 32,
18205 0xfc00ffff, 0x20000b3f, 0 , 0,
18206 0x0 }, /* POOL32Axf_4~*(5) */
18207 { reserved_block , 0 , 0 , 32,
18208 0xfc00ffff, 0x20000d3f, 0 , 0,
18209 0x0 }, /* POOL32Axf_4~*(6) */
18210 { reserved_block , 0 , 0 , 32,
18211 0xfc00ffff, 0x20000f3f, 0 , 0,
18212 0x0 }, /* POOL32Axf_4~*(7) */
18213 { instruction , 0 , 0 , 32,
18214 0xfc00ffff, 0x2000113f, &NMD::ABSQ_S_PH , 0,
18215 DSP_ }, /* ABSQ_S.PH */
18216 { instruction , 0 , 0 , 32,
18217 0xfc00ffff, 0x2000133f, &NMD::REPLV_QB , 0,
18218 DSP_ }, /* REPLV.QB */
18219 { reserved_block , 0 , 0 , 32,
18220 0xfc00ffff, 0x2000153f, 0 , 0,
18221 0x0 }, /* POOL32Axf_4~*(10) */
18222 { reserved_block , 0 , 0 , 32,
18223 0xfc00ffff, 0x2000173f, 0 , 0,
18224 0x0 }, /* POOL32Axf_4~*(11) */
18225 { reserved_block , 0 , 0 , 32,
18226 0xfc00ffff, 0x2000193f, 0 , 0,
18227 0x0 }, /* POOL32Axf_4~*(12) */
18228 { reserved_block , 0 , 0 , 32,
18229 0xfc00ffff, 0x20001b3f, 0 , 0,
18230 0x0 }, /* POOL32Axf_4~*(13) */
18231 { reserved_block , 0 , 0 , 32,
18232 0xfc00ffff, 0x20001d3f, 0 , 0,
18233 0x0 }, /* POOL32Axf_4~*(14) */
18234 { reserved_block , 0 , 0 , 32,
18235 0xfc00ffff, 0x20001f3f, 0 , 0,
18236 0x0 }, /* POOL32Axf_4~*(15) */
18237 { instruction , 0 , 0 , 32,
18238 0xfc00ffff, 0x2000213f, &NMD::ABSQ_S_W , 0,
18239 DSP_ }, /* ABSQ_S.W */
18240 { reserved_block , 0 , 0 , 32,
18241 0xfc00ffff, 0x2000233f, 0 , 0,
18242 0x0 }, /* POOL32Axf_4~*(17) */
18243 { reserved_block , 0 , 0 , 32,
18244 0xfc00ffff, 0x2000253f, 0 , 0,
18245 0x0 }, /* POOL32Axf_4~*(18) */
18246 { reserved_block , 0 , 0 , 32,
18247 0xfc00ffff, 0x2000273f, 0 , 0,
18248 0x0 }, /* POOL32Axf_4~*(19) */
18249 { reserved_block , 0 , 0 , 32,
18250 0xfc00ffff, 0x2000293f, 0 , 0,
18251 0x0 }, /* POOL32Axf_4~*(20) */
18252 { reserved_block , 0 , 0 , 32,
18253 0xfc00ffff, 0x20002b3f, 0 , 0,
18254 0x0 }, /* POOL32Axf_4~*(21) */
18255 { reserved_block , 0 , 0 , 32,
18256 0xfc00ffff, 0x20002d3f, 0 , 0,
18257 0x0 }, /* POOL32Axf_4~*(22) */
18258 { reserved_block , 0 , 0 , 32,
18259 0xfc00ffff, 0x20002f3f, 0 , 0,
18260 0x0 }, /* POOL32Axf_4~*(23) */
18261 { reserved_block , 0 , 0 , 32,
18262 0xfc00ffff, 0x2000313f, 0 , 0,
18263 0x0 }, /* POOL32Axf_4~*(24) */
18264 { reserved_block , 0 , 0 , 32,
18265 0xfc00ffff, 0x2000333f, 0 , 0,
18266 0x0 }, /* POOL32Axf_4~*(25) */
18267 { reserved_block , 0 , 0 , 32,
18268 0xfc00ffff, 0x2000353f, 0 , 0,
18269 0x0 }, /* POOL32Axf_4~*(26) */
18270 { reserved_block , 0 , 0 , 32,
18271 0xfc00ffff, 0x2000373f, 0 , 0,
18272 0x0 }, /* POOL32Axf_4~*(27) */
18273 { reserved_block , 0 , 0 , 32,
18274 0xfc00ffff, 0x2000393f, 0 , 0,
18275 0x0 }, /* POOL32Axf_4~*(28) */
18276 { reserved_block , 0 , 0 , 32,
18277 0xfc00ffff, 0x20003b3f, 0 , 0,
18278 0x0 }, /* POOL32Axf_4~*(29) */
18279 { reserved_block , 0 , 0 , 32,
18280 0xfc00ffff, 0x20003d3f, 0 , 0,
18281 0x0 }, /* POOL32Axf_4~*(30) */
18282 { reserved_block , 0 , 0 , 32,
18283 0xfc00ffff, 0x20003f3f, 0 , 0,
18284 0x0 }, /* POOL32Axf_4~*(31) */
18285 { instruction , 0 , 0 , 32,
18286 0xfc00ffff, 0x2000413f, &NMD::INSV , 0,
18287 DSP_ }, /* INSV */
18288 { reserved_block , 0 , 0 , 32,
18289 0xfc00ffff, 0x2000433f, 0 , 0,
18290 0x0 }, /* POOL32Axf_4~*(33) */
18291 { reserved_block , 0 , 0 , 32,
18292 0xfc00ffff, 0x2000453f, 0 , 0,
18293 0x0 }, /* POOL32Axf_4~*(34) */
18294 { reserved_block , 0 , 0 , 32,
18295 0xfc00ffff, 0x2000473f, 0 , 0,
18296 0x0 }, /* POOL32Axf_4~*(35) */
18297 { reserved_block , 0 , 0 , 32,
18298 0xfc00ffff, 0x2000493f, 0 , 0,
18299 0x0 }, /* POOL32Axf_4~*(36) */
18300 { instruction , 0 , 0 , 32,
18301 0xfc00ffff, 0x20004b3f, &NMD::CLO , 0,
18302 XMMS_ }, /* CLO */
18303 { instruction , 0 , 0 , 32,
18304 0xfc00ffff, 0x20004d3f, &NMD::MFC2 , 0,
18305 CP2_ }, /* MFC2 */
18306 { reserved_block , 0 , 0 , 32,
18307 0xfc00ffff, 0x20004f3f, 0 , 0,
18308 0x0 }, /* POOL32Axf_4~*(39) */
18309 { instruction , 0 , 0 , 32,
18310 0xfc00ffff, 0x2000513f, &NMD::PRECEQ_W_PHL , 0,
18311 DSP_ }, /* PRECEQ.W.PHL */
18312 { reserved_block , 0 , 0 , 32,
18313 0xfc00ffff, 0x2000533f, 0 , 0,
18314 0x0 }, /* POOL32Axf_4~*(41) */
18315 { reserved_block , 0 , 0 , 32,
18316 0xfc00ffff, 0x2000553f, 0 , 0,
18317 0x0 }, /* POOL32Axf_4~*(42) */
18318 { reserved_block , 0 , 0 , 32,
18319 0xfc00ffff, 0x2000573f, 0 , 0,
18320 0x0 }, /* POOL32Axf_4~*(43) */
18321 { reserved_block , 0 , 0 , 32,
18322 0xfc00ffff, 0x2000593f, 0 , 0,
18323 0x0 }, /* POOL32Axf_4~*(44) */
18324 { instruction , 0 , 0 , 32,
18325 0xfc00ffff, 0x20005b3f, &NMD::CLZ , 0,
18326 XMMS_ }, /* CLZ */
18327 { instruction , 0 , 0 , 32,
18328 0xfc00ffff, 0x20005d3f, &NMD::MTC2 , 0,
18329 CP2_ }, /* MTC2 */
18330 { reserved_block , 0 , 0 , 32,
18331 0xfc00ffff, 0x20005f3f, 0 , 0,
18332 0x0 }, /* POOL32Axf_4~*(47) */
18333 { instruction , 0 , 0 , 32,
18334 0xfc00ffff, 0x2000613f, &NMD::PRECEQ_W_PHR , 0,
18335 DSP_ }, /* PRECEQ.W.PHR */
18336 { reserved_block , 0 , 0 , 32,
18337 0xfc00ffff, 0x2000633f, 0 , 0,
18338 0x0 }, /* POOL32Axf_4~*(49) */
18339 { reserved_block , 0 , 0 , 32,
18340 0xfc00ffff, 0x2000653f, 0 , 0,
18341 0x0 }, /* POOL32Axf_4~*(50) */
18342 { reserved_block , 0 , 0 , 32,
18343 0xfc00ffff, 0x2000673f, 0 , 0,
18344 0x0 }, /* POOL32Axf_4~*(51) */
18345 { reserved_block , 0 , 0 , 32,
18346 0xfc00ffff, 0x2000693f, 0 , 0,
18347 0x0 }, /* POOL32Axf_4~*(52) */
18348 { reserved_block , 0 , 0 , 32,
18349 0xfc00ffff, 0x20006b3f, 0 , 0,
18350 0x0 }, /* POOL32Axf_4~*(53) */
18351 { instruction , 0 , 0 , 32,
18352 0xfc00ffff, 0x20006d3f, &NMD::DMFC2 , 0,
18353 CP2_ }, /* DMFC2 */
18354 { reserved_block , 0 , 0 , 32,
18355 0xfc00ffff, 0x20006f3f, 0 , 0,
18356 0x0 }, /* POOL32Axf_4~*(55) */
18357 { instruction , 0 , 0 , 32,
18358 0xfc00ffff, 0x2000713f, &NMD::PRECEQU_PH_QBL , 0,
18359 DSP_ }, /* PRECEQU.PH.QBL */
18360 { instruction , 0 , 0 , 32,
18361 0xfc00ffff, 0x2000733f, &NMD::PRECEQU_PH_QBLA , 0,
18362 DSP_ }, /* PRECEQU.PH.QBLA */
18363 { reserved_block , 0 , 0 , 32,
18364 0xfc00ffff, 0x2000753f, 0 , 0,
18365 0x0 }, /* POOL32Axf_4~*(58) */
18366 { reserved_block , 0 , 0 , 32,
18367 0xfc00ffff, 0x2000773f, 0 , 0,
18368 0x0 }, /* POOL32Axf_4~*(59) */
18369 { reserved_block , 0 , 0 , 32,
18370 0xfc00ffff, 0x2000793f, 0 , 0,
18371 0x0 }, /* POOL32Axf_4~*(60) */
18372 { reserved_block , 0 , 0 , 32,
18373 0xfc00ffff, 0x20007b3f, 0 , 0,
18374 0x0 }, /* POOL32Axf_4~*(61) */
18375 { instruction , 0 , 0 , 32,
18376 0xfc00ffff, 0x20007d3f, &NMD::DMTC2 , 0,
18377 CP2_ }, /* DMTC2 */
18378 { reserved_block , 0 , 0 , 32,
18379 0xfc00ffff, 0x20007f3f, 0 , 0,
18380 0x0 }, /* POOL32Axf_4~*(63) */
18381 { reserved_block , 0 , 0 , 32,
18382 0xfc00ffff, 0x2000813f, 0 , 0,
18383 0x0 }, /* POOL32Axf_4~*(64) */
18384 { reserved_block , 0 , 0 , 32,
18385 0xfc00ffff, 0x2000833f, 0 , 0,
18386 0x0 }, /* POOL32Axf_4~*(65) */
18387 { reserved_block , 0 , 0 , 32,
18388 0xfc00ffff, 0x2000853f, 0 , 0,
18389 0x0 }, /* POOL32Axf_4~*(66) */
18390 { reserved_block , 0 , 0 , 32,
18391 0xfc00ffff, 0x2000873f, 0 , 0,
18392 0x0 }, /* POOL32Axf_4~*(67) */
18393 { reserved_block , 0 , 0 , 32,
18394 0xfc00ffff, 0x2000893f, 0 , 0,
18395 0x0 }, /* POOL32Axf_4~*(68) */
18396 { reserved_block , 0 , 0 , 32,
18397 0xfc00ffff, 0x20008b3f, 0 , 0,
18398 0x0 }, /* POOL32Axf_4~*(69) */
18399 { instruction , 0 , 0 , 32,
18400 0xfc00ffff, 0x20008d3f, &NMD::MFHC2 , 0,
18401 CP2_ }, /* MFHC2 */
18402 { reserved_block , 0 , 0 , 32,
18403 0xfc00ffff, 0x20008f3f, 0 , 0,
18404 0x0 }, /* POOL32Axf_4~*(71) */
18405 { instruction , 0 , 0 , 32,
18406 0xfc00ffff, 0x2000913f, &NMD::PRECEQU_PH_QBR , 0,
18407 DSP_ }, /* PRECEQU.PH.QBR */
18408 { instruction , 0 , 0 , 32,
18409 0xfc00ffff, 0x2000933f, &NMD::PRECEQU_PH_QBRA , 0,
18410 DSP_ }, /* PRECEQU.PH.QBRA */
18411 { reserved_block , 0 , 0 , 32,
18412 0xfc00ffff, 0x2000953f, 0 , 0,
18413 0x0 }, /* POOL32Axf_4~*(74) */
18414 { reserved_block , 0 , 0 , 32,
18415 0xfc00ffff, 0x2000973f, 0 , 0,
18416 0x0 }, /* POOL32Axf_4~*(75) */
18417 { reserved_block , 0 , 0 , 32,
18418 0xfc00ffff, 0x2000993f, 0 , 0,
18419 0x0 }, /* POOL32Axf_4~*(76) */
18420 { reserved_block , 0 , 0 , 32,
18421 0xfc00ffff, 0x20009b3f, 0 , 0,
18422 0x0 }, /* POOL32Axf_4~*(77) */
18423 { instruction , 0 , 0 , 32,
18424 0xfc00ffff, 0x20009d3f, &NMD::MTHC2 , 0,
18425 CP2_ }, /* MTHC2 */
18426 { reserved_block , 0 , 0 , 32,
18427 0xfc00ffff, 0x20009f3f, 0 , 0,
18428 0x0 }, /* POOL32Axf_4~*(79) */
18429 { reserved_block , 0 , 0 , 32,
18430 0xfc00ffff, 0x2000a13f, 0 , 0,
18431 0x0 }, /* POOL32Axf_4~*(80) */
18432 { reserved_block , 0 , 0 , 32,
18433 0xfc00ffff, 0x2000a33f, 0 , 0,
18434 0x0 }, /* POOL32Axf_4~*(81) */
18435 { reserved_block , 0 , 0 , 32,
18436 0xfc00ffff, 0x2000a53f, 0 , 0,
18437 0x0 }, /* POOL32Axf_4~*(82) */
18438 { reserved_block , 0 , 0 , 32,
18439 0xfc00ffff, 0x2000a73f, 0 , 0,
18440 0x0 }, /* POOL32Axf_4~*(83) */
18441 { reserved_block , 0 , 0 , 32,
18442 0xfc00ffff, 0x2000a93f, 0 , 0,
18443 0x0 }, /* POOL32Axf_4~*(84) */
18444 { reserved_block , 0 , 0 , 32,
18445 0xfc00ffff, 0x2000ab3f, 0 , 0,
18446 0x0 }, /* POOL32Axf_4~*(85) */
18447 { reserved_block , 0 , 0 , 32,
18448 0xfc00ffff, 0x2000ad3f, 0 , 0,
18449 0x0 }, /* POOL32Axf_4~*(86) */
18450 { reserved_block , 0 , 0 , 32,
18451 0xfc00ffff, 0x2000af3f, 0 , 0,
18452 0x0 }, /* POOL32Axf_4~*(87) */
18453 { instruction , 0 , 0 , 32,
18454 0xfc00ffff, 0x2000b13f, &NMD::PRECEU_PH_QBL , 0,
18455 DSP_ }, /* PRECEU.PH.QBL */
18456 { instruction , 0 , 0 , 32,
18457 0xfc00ffff, 0x2000b33f, &NMD::PRECEU_PH_QBLA , 0,
18458 DSP_ }, /* PRECEU.PH.QBLA */
18459 { reserved_block , 0 , 0 , 32,
18460 0xfc00ffff, 0x2000b53f, 0 , 0,
18461 0x0 }, /* POOL32Axf_4~*(90) */
18462 { reserved_block , 0 , 0 , 32,
18463 0xfc00ffff, 0x2000b73f, 0 , 0,
18464 0x0 }, /* POOL32Axf_4~*(91) */
18465 { reserved_block , 0 , 0 , 32,
18466 0xfc00ffff, 0x2000b93f, 0 , 0,
18467 0x0 }, /* POOL32Axf_4~*(92) */
18468 { reserved_block , 0 , 0 , 32,
18469 0xfc00ffff, 0x2000bb3f, 0 , 0,
18470 0x0 }, /* POOL32Axf_4~*(93) */
18471 { reserved_block , 0 , 0 , 32,
18472 0xfc00ffff, 0x2000bd3f, 0 , 0,
18473 0x0 }, /* POOL32Axf_4~*(94) */
18474 { reserved_block , 0 , 0 , 32,
18475 0xfc00ffff, 0x2000bf3f, 0 , 0,
18476 0x0 }, /* POOL32Axf_4~*(95) */
18477 { reserved_block , 0 , 0 , 32,
18478 0xfc00ffff, 0x2000c13f, 0 , 0,
18479 0x0 }, /* POOL32Axf_4~*(96) */
18480 { reserved_block , 0 , 0 , 32,
18481 0xfc00ffff, 0x2000c33f, 0 , 0,
18482 0x0 }, /* POOL32Axf_4~*(97) */
18483 { reserved_block , 0 , 0 , 32,
18484 0xfc00ffff, 0x2000c53f, 0 , 0,
18485 0x0 }, /* POOL32Axf_4~*(98) */
18486 { reserved_block , 0 , 0 , 32,
18487 0xfc00ffff, 0x2000c73f, 0 , 0,
18488 0x0 }, /* POOL32Axf_4~*(99) */
18489 { reserved_block , 0 , 0 , 32,
18490 0xfc00ffff, 0x2000c93f, 0 , 0,
18491 0x0 }, /* POOL32Axf_4~*(100) */
18492 { reserved_block , 0 , 0 , 32,
18493 0xfc00ffff, 0x2000cb3f, 0 , 0,
18494 0x0 }, /* POOL32Axf_4~*(101) */
18495 { instruction , 0 , 0 , 32,
18496 0xfc00ffff, 0x2000cd3f, &NMD::CFC2 , 0,
18497 CP2_ }, /* CFC2 */
18498 { reserved_block , 0 , 0 , 32,
18499 0xfc00ffff, 0x2000cf3f, 0 , 0,
18500 0x0 }, /* POOL32Axf_4~*(103) */
18501 { instruction , 0 , 0 , 32,
18502 0xfc00ffff, 0x2000d13f, &NMD::PRECEU_PH_QBR , 0,
18503 DSP_ }, /* PRECEU.PH.QBR */
18504 { instruction , 0 , 0 , 32,
18505 0xfc00ffff, 0x2000d33f, &NMD::PRECEU_PH_QBRA , 0,
18506 DSP_ }, /* PRECEU.PH.QBRA */
18507 { reserved_block , 0 , 0 , 32,
18508 0xfc00ffff, 0x2000d53f, 0 , 0,
18509 0x0 }, /* POOL32Axf_4~*(106) */
18510 { reserved_block , 0 , 0 , 32,
18511 0xfc00ffff, 0x2000d73f, 0 , 0,
18512 0x0 }, /* POOL32Axf_4~*(107) */
18513 { reserved_block , 0 , 0 , 32,
18514 0xfc00ffff, 0x2000d93f, 0 , 0,
18515 0x0 }, /* POOL32Axf_4~*(108) */
18516 { reserved_block , 0 , 0 , 32,
18517 0xfc00ffff, 0x2000db3f, 0 , 0,
18518 0x0 }, /* POOL32Axf_4~*(109) */
18519 { instruction , 0 , 0 , 32,
18520 0xfc00ffff, 0x2000dd3f, &NMD::CTC2 , 0,
18521 CP2_ }, /* CTC2 */
18522 { reserved_block , 0 , 0 , 32,
18523 0xfc00ffff, 0x2000df3f, 0 , 0,
18524 0x0 }, /* POOL32Axf_4~*(111) */
18525 { reserved_block , 0 , 0 , 32,
18526 0xfc00ffff, 0x2000e13f, 0 , 0,
18527 0x0 }, /* POOL32Axf_4~*(112) */
18528 { reserved_block , 0 , 0 , 32,
18529 0xfc00ffff, 0x2000e33f, 0 , 0,
18530 0x0 }, /* POOL32Axf_4~*(113) */
18531 { reserved_block , 0 , 0 , 32,
18532 0xfc00ffff, 0x2000e53f, 0 , 0,
18533 0x0 }, /* POOL32Axf_4~*(114) */
18534 { reserved_block , 0 , 0 , 32,
18535 0xfc00ffff, 0x2000e73f, 0 , 0,
18536 0x0 }, /* POOL32Axf_4~*(115) */
18537 { reserved_block , 0 , 0 , 32,
18538 0xfc00ffff, 0x2000e93f, 0 , 0,
18539 0x0 }, /* POOL32Axf_4~*(116) */
18540 { reserved_block , 0 , 0 , 32,
18541 0xfc00ffff, 0x2000eb3f, 0 , 0,
18542 0x0 }, /* POOL32Axf_4~*(117) */
18543 { reserved_block , 0 , 0 , 32,
18544 0xfc00ffff, 0x2000ed3f, 0 , 0,
18545 0x0 }, /* POOL32Axf_4~*(118) */
18546 { reserved_block , 0 , 0 , 32,
18547 0xfc00ffff, 0x2000ef3f, 0 , 0,
18548 0x0 }, /* POOL32Axf_4~*(119) */
18549 { instruction , 0 , 0 , 32,
18550 0xfc00ffff, 0x2000f13f, &NMD::RADDU_W_QB , 0,
18551 DSP_ }, /* RADDU.W.QB */
18552 { reserved_block , 0 , 0 , 32,
18553 0xfc00ffff, 0x2000f33f, 0 , 0,
18554 0x0 }, /* POOL32Axf_4~*(121) */
18555 { reserved_block , 0 , 0 , 32,
18556 0xfc00ffff, 0x2000f53f, 0 , 0,
18557 0x0 }, /* POOL32Axf_4~*(122) */
18558 { reserved_block , 0 , 0 , 32,
18559 0xfc00ffff, 0x2000f73f, 0 , 0,
18560 0x0 }, /* POOL32Axf_4~*(123) */
18561 { reserved_block , 0 , 0 , 32,
18562 0xfc00ffff, 0x2000f93f, 0 , 0,
18563 0x0 }, /* POOL32Axf_4~*(124) */
18564 { reserved_block , 0 , 0 , 32,
18565 0xfc00ffff, 0x2000fb3f, 0 , 0,
18566 0x0 }, /* POOL32Axf_4~*(125) */
18567 { reserved_block , 0 , 0 , 32,
18568 0xfc00ffff, 0x2000fd3f, 0 , 0,
18569 0x0 }, /* POOL32Axf_4~*(126) */
18570 { reserved_block , 0 , 0 , 32,
18571 0xfc00ffff, 0x2000ff3f, 0 , 0,
18572 0x0 }, /* POOL32Axf_4~*(127) */
18573};
18574
18575
18576NMD::Pool NMD::POOL32Axf_5_group0[32] = {
18577 { instruction , 0 , 0 , 32,
18578 0xfc00ffff, 0x2000017f, &NMD::TLBGP , 0,
18579 CP0_ | VZ_ | TLB_ }, /* TLBGP */
18580 { instruction , 0 , 0 , 32,
18581 0xfc00ffff, 0x2000037f, &NMD::TLBP , 0,
18582 CP0_ | TLB_ }, /* TLBP */
18583 { instruction , 0 , 0 , 32,
18584 0xfc00ffff, 0x2000057f, &NMD::TLBGINV , 0,
18585 CP0_ | VZ_ | TLB_ | TLBINV_}, /* TLBGINV */
18586 { instruction , 0 , 0 , 32,
18587 0xfc00ffff, 0x2000077f, &NMD::TLBINV , 0,
18588 CP0_ | TLB_ | TLBINV_}, /* TLBINV */
18589 { reserved_block , 0 , 0 , 32,
18590 0xfc00ffff, 0x2000097f, 0 , 0,
18591 0x0 }, /* POOL32Axf_5_group0~*(4) */
18592 { reserved_block , 0 , 0 , 32,
18593 0xfc00ffff, 0x20000b7f, 0 , 0,
18594 0x0 }, /* POOL32Axf_5_group0~*(5) */
18595 { reserved_block , 0 , 0 , 32,
18596 0xfc00ffff, 0x20000d7f, 0 , 0,
18597 0x0 }, /* POOL32Axf_5_group0~*(6) */
18598 { reserved_block , 0 , 0 , 32,
18599 0xfc00ffff, 0x20000f7f, 0 , 0,
18600 0x0 }, /* POOL32Axf_5_group0~*(7) */
18601 { instruction , 0 , 0 , 32,
18602 0xfc00ffff, 0x2000117f, &NMD::TLBGR , 0,
18603 CP0_ | VZ_ | TLB_ }, /* TLBGR */
18604 { instruction , 0 , 0 , 32,
18605 0xfc00ffff, 0x2000137f, &NMD::TLBR , 0,
18606 CP0_ | TLB_ }, /* TLBR */
18607 { instruction , 0 , 0 , 32,
18608 0xfc00ffff, 0x2000157f, &NMD::TLBGINVF , 0,
18609 CP0_ | VZ_ | TLB_ | TLBINV_}, /* TLBGINVF */
18610 { instruction , 0 , 0 , 32,
18611 0xfc00ffff, 0x2000177f, &NMD::TLBINVF , 0,
18612 CP0_ | TLB_ | TLBINV_}, /* TLBINVF */
18613 { reserved_block , 0 , 0 , 32,
18614 0xfc00ffff, 0x2000197f, 0 , 0,
18615 0x0 }, /* POOL32Axf_5_group0~*(12) */
18616 { reserved_block , 0 , 0 , 32,
18617 0xfc00ffff, 0x20001b7f, 0 , 0,
18618 0x0 }, /* POOL32Axf_5_group0~*(13) */
18619 { reserved_block , 0 , 0 , 32,
18620 0xfc00ffff, 0x20001d7f, 0 , 0,
18621 0x0 }, /* POOL32Axf_5_group0~*(14) */
18622 { reserved_block , 0 , 0 , 32,
18623 0xfc00ffff, 0x20001f7f, 0 , 0,
18624 0x0 }, /* POOL32Axf_5_group0~*(15) */
18625 { instruction , 0 , 0 , 32,
18626 0xfc00ffff, 0x2000217f, &NMD::TLBGWI , 0,
18627 CP0_ | VZ_ | TLB_ }, /* TLBGWI */
18628 { instruction , 0 , 0 , 32,
18629 0xfc00ffff, 0x2000237f, &NMD::TLBWI , 0,
18630 CP0_ | TLB_ }, /* TLBWI */
18631 { reserved_block , 0 , 0 , 32,
18632 0xfc00ffff, 0x2000257f, 0 , 0,
18633 0x0 }, /* POOL32Axf_5_group0~*(18) */
18634 { reserved_block , 0 , 0 , 32,
18635 0xfc00ffff, 0x2000277f, 0 , 0,
18636 0x0 }, /* POOL32Axf_5_group0~*(19) */
18637 { reserved_block , 0 , 0 , 32,
18638 0xfc00ffff, 0x2000297f, 0 , 0,
18639 0x0 }, /* POOL32Axf_5_group0~*(20) */
18640 { reserved_block , 0 , 0 , 32,
18641 0xfc00ffff, 0x20002b7f, 0 , 0,
18642 0x0 }, /* POOL32Axf_5_group0~*(21) */
18643 { reserved_block , 0 , 0 , 32,
18644 0xfc00ffff, 0x20002d7f, 0 , 0,
18645 0x0 }, /* POOL32Axf_5_group0~*(22) */
18646 { reserved_block , 0 , 0 , 32,
18647 0xfc00ffff, 0x20002f7f, 0 , 0,
18648 0x0 }, /* POOL32Axf_5_group0~*(23) */
18649 { instruction , 0 , 0 , 32,
18650 0xfc00ffff, 0x2000317f, &NMD::TLBGWR , 0,
18651 CP0_ | VZ_ | TLB_ }, /* TLBGWR */
18652 { instruction , 0 , 0 , 32,
18653 0xfc00ffff, 0x2000337f, &NMD::TLBWR , 0,
18654 CP0_ | TLB_ }, /* TLBWR */
18655 { reserved_block , 0 , 0 , 32,
18656 0xfc00ffff, 0x2000357f, 0 , 0,
18657 0x0 }, /* POOL32Axf_5_group0~*(26) */
18658 { reserved_block , 0 , 0 , 32,
18659 0xfc00ffff, 0x2000377f, 0 , 0,
18660 0x0 }, /* POOL32Axf_5_group0~*(27) */
18661 { reserved_block , 0 , 0 , 32,
18662 0xfc00ffff, 0x2000397f, 0 , 0,
18663 0x0 }, /* POOL32Axf_5_group0~*(28) */
18664 { reserved_block , 0 , 0 , 32,
18665 0xfc00ffff, 0x20003b7f, 0 , 0,
18666 0x0 }, /* POOL32Axf_5_group0~*(29) */
18667 { reserved_block , 0 , 0 , 32,
18668 0xfc00ffff, 0x20003d7f, 0 , 0,
18669 0x0 }, /* POOL32Axf_5_group0~*(30) */
18670 { reserved_block , 0 , 0 , 32,
18671 0xfc00ffff, 0x20003f7f, 0 , 0,
18672 0x0 }, /* POOL32Axf_5_group0~*(31) */
18673};
18674
18675
18676NMD::Pool NMD::POOL32Axf_5_group1[32] = {
18677 { reserved_block , 0 , 0 , 32,
18678 0xfc00ffff, 0x2000417f, 0 , 0,
18679 0x0 }, /* POOL32Axf_5_group1~*(0) */
18680 { reserved_block , 0 , 0 , 32,
18681 0xfc00ffff, 0x2000437f, 0 , 0,
18682 0x0 }, /* POOL32Axf_5_group1~*(1) */
18683 { reserved_block , 0 , 0 , 32,
18684 0xfc00ffff, 0x2000457f, 0 , 0,
18685 0x0 }, /* POOL32Axf_5_group1~*(2) */
18686 { instruction , 0 , 0 , 32,
18687 0xfc00ffff, 0x2000477f, &NMD::DI , 0,
18688 0x0 }, /* DI */
18689 { reserved_block , 0 , 0 , 32,
18690 0xfc00ffff, 0x2000497f, 0 , 0,
18691 0x0 }, /* POOL32Axf_5_group1~*(4) */
18692 { reserved_block , 0 , 0 , 32,
18693 0xfc00ffff, 0x20004b7f, 0 , 0,
18694 0x0 }, /* POOL32Axf_5_group1~*(5) */
18695 { reserved_block , 0 , 0 , 32,
18696 0xfc00ffff, 0x20004d7f, 0 , 0,
18697 0x0 }, /* POOL32Axf_5_group1~*(6) */
18698 { reserved_block , 0 , 0 , 32,
18699 0xfc00ffff, 0x20004f7f, 0 , 0,
18700 0x0 }, /* POOL32Axf_5_group1~*(7) */
18701 { reserved_block , 0 , 0 , 32,
18702 0xfc00ffff, 0x2000517f, 0 , 0,
18703 0x0 }, /* POOL32Axf_5_group1~*(8) */
18704 { reserved_block , 0 , 0 , 32,
18705 0xfc00ffff, 0x2000537f, 0 , 0,
18706 0x0 }, /* POOL32Axf_5_group1~*(9) */
18707 { reserved_block , 0 , 0 , 32,
18708 0xfc00ffff, 0x2000557f, 0 , 0,
18709 0x0 }, /* POOL32Axf_5_group1~*(10) */
18710 { instruction , 0 , 0 , 32,
18711 0xfc00ffff, 0x2000577f, &NMD::EI , 0,
18712 0x0 }, /* EI */
18713 { reserved_block , 0 , 0 , 32,
18714 0xfc00ffff, 0x2000597f, 0 , 0,
18715 0x0 }, /* POOL32Axf_5_group1~*(12) */
18716 { reserved_block , 0 , 0 , 32,
18717 0xfc00ffff, 0x20005b7f, 0 , 0,
18718 0x0 }, /* POOL32Axf_5_group1~*(13) */
18719 { reserved_block , 0 , 0 , 32,
18720 0xfc00ffff, 0x20005d7f, 0 , 0,
18721 0x0 }, /* POOL32Axf_5_group1~*(14) */
18722 { reserved_block , 0 , 0 , 32,
18723 0xfc00ffff, 0x20005f7f, 0 , 0,
18724 0x0 }, /* POOL32Axf_5_group1~*(15) */
18725 { reserved_block , 0 , 0 , 32,
18726 0xfc00ffff, 0x2000617f, 0 , 0,
18727 0x0 }, /* POOL32Axf_5_group1~*(16) */
18728 { reserved_block , 0 , 0 , 32,
18729 0xfc00ffff, 0x2000637f, 0 , 0,
18730 0x0 }, /* POOL32Axf_5_group1~*(17) */
18731 { reserved_block , 0 , 0 , 32,
18732 0xfc00ffff, 0x2000657f, 0 , 0,
18733 0x0 }, /* POOL32Axf_5_group1~*(18) */
18734 { reserved_block , 0 , 0 , 32,
18735 0xfc00ffff, 0x2000677f, 0 , 0,
18736 0x0 }, /* POOL32Axf_5_group1~*(19) */
18737 { reserved_block , 0 , 0 , 32,
18738 0xfc00ffff, 0x2000697f, 0 , 0,
18739 0x0 }, /* POOL32Axf_5_group1~*(20) */
18740 { reserved_block , 0 , 0 , 32,
18741 0xfc00ffff, 0x20006b7f, 0 , 0,
18742 0x0 }, /* POOL32Axf_5_group1~*(21) */
18743 { reserved_block , 0 , 0 , 32,
18744 0xfc00ffff, 0x20006d7f, 0 , 0,
18745 0x0 }, /* POOL32Axf_5_group1~*(22) */
18746 { reserved_block , 0 , 0 , 32,
18747 0xfc00ffff, 0x20006f7f, 0 , 0,
18748 0x0 }, /* POOL32Axf_5_group1~*(23) */
18749 { reserved_block , 0 , 0 , 32,
18750 0xfc00ffff, 0x2000717f, 0 , 0,
18751 0x0 }, /* POOL32Axf_5_group1~*(24) */
18752 { reserved_block , 0 , 0 , 32,
18753 0xfc00ffff, 0x2000737f, 0 , 0,
18754 0x0 }, /* POOL32Axf_5_group1~*(25) */
18755 { reserved_block , 0 , 0 , 32,
18756 0xfc00ffff, 0x2000757f, 0 , 0,
18757 0x0 }, /* POOL32Axf_5_group1~*(26) */
18758 { reserved_block , 0 , 0 , 32,
18759 0xfc00ffff, 0x2000777f, 0 , 0,
18760 0x0 }, /* POOL32Axf_5_group1~*(27) */
18761 { reserved_block , 0 , 0 , 32,
18762 0xfc00ffff, 0x2000797f, 0 , 0,
18763 0x0 }, /* POOL32Axf_5_group1~*(28) */
18764 { reserved_block , 0 , 0 , 32,
18765 0xfc00ffff, 0x20007b7f, 0 , 0,
18766 0x0 }, /* POOL32Axf_5_group1~*(29) */
18767 { reserved_block , 0 , 0 , 32,
18768 0xfc00ffff, 0x20007d7f, 0 , 0,
18769 0x0 }, /* POOL32Axf_5_group1~*(30) */
18770 { reserved_block , 0 , 0 , 32,
18771 0xfc00ffff, 0x20007f7f, 0 , 0,
18772 0x0 }, /* POOL32Axf_5_group1~*(31) */
18773};
18774
18775
18776NMD::Pool NMD::ERETx[2] = {
18777 { instruction , 0 , 0 , 32,
18778 0xfc01ffff, 0x2000f37f, &NMD::ERET , 0,
18779 0x0 }, /* ERET */
18780 { instruction , 0 , 0 , 32,
18781 0xfc01ffff, 0x2001f37f, &NMD::ERETNC , 0,
18782 0x0 }, /* ERETNC */
18783};
18784
18785
18786NMD::Pool NMD::POOL32Axf_5_group3[32] = {
18787 { reserved_block , 0 , 0 , 32,
18788 0xfc00ffff, 0x2000c17f, 0 , 0,
18789 0x0 }, /* POOL32Axf_5_group3~*(0) */
18790 { instruction , 0 , 0 , 32,
18791 0xfc00ffff, 0x2000c37f, &NMD::WAIT , 0,
18792 0x0 }, /* WAIT */
18793 { reserved_block , 0 , 0 , 32,
18794 0xfc00ffff, 0x2000c57f, 0 , 0,
18795 0x0 }, /* POOL32Axf_5_group3~*(2) */
18796 { reserved_block , 0 , 0 , 32,
18797 0xfc00ffff, 0x2000c77f, 0 , 0,
18798 0x0 }, /* POOL32Axf_5_group3~*(3) */
18799 { reserved_block , 0 , 0 , 32,
18800 0xfc00ffff, 0x2000c97f, 0 , 0,
18801 0x0 }, /* POOL32Axf_5_group3~*(4) */
18802 { reserved_block , 0 , 0 , 32,
18803 0xfc00ffff, 0x2000cb7f, 0 , 0,
18804 0x0 }, /* POOL32Axf_5_group3~*(5) */
18805 { reserved_block , 0 , 0 , 32,
18806 0xfc00ffff, 0x2000cd7f, 0 , 0,
18807 0x0 }, /* POOL32Axf_5_group3~*(6) */
18808 { reserved_block , 0 , 0 , 32,
18809 0xfc00ffff, 0x2000cf7f, 0 , 0,
18810 0x0 }, /* POOL32Axf_5_group3~*(7) */
18811 { reserved_block , 0 , 0 , 32,
18812 0xfc00ffff, 0x2000d17f, 0 , 0,
18813 0x0 }, /* POOL32Axf_5_group3~*(8) */
18814 { instruction , 0 , 0 , 32,
18815 0xfc00ffff, 0x2000d37f, &NMD::IRET , 0,
18816 MCU_ }, /* IRET */
18817 { reserved_block , 0 , 0 , 32,
18818 0xfc00ffff, 0x2000d57f, 0 , 0,
18819 0x0 }, /* POOL32Axf_5_group3~*(10) */
18820 { reserved_block , 0 , 0 , 32,
18821 0xfc00ffff, 0x2000d77f, 0 , 0,
18822 0x0 }, /* POOL32Axf_5_group3~*(11) */
18823 { reserved_block , 0 , 0 , 32,
18824 0xfc00ffff, 0x2000d97f, 0 , 0,
18825 0x0 }, /* POOL32Axf_5_group3~*(12) */
18826 { reserved_block , 0 , 0 , 32,
18827 0xfc00ffff, 0x2000db7f, 0 , 0,
18828 0x0 }, /* POOL32Axf_5_group3~*(13) */
18829 { reserved_block , 0 , 0 , 32,
18830 0xfc00ffff, 0x2000dd7f, 0 , 0,
18831 0x0 }, /* POOL32Axf_5_group3~*(14) */
18832 { reserved_block , 0 , 0 , 32,
18833 0xfc00ffff, 0x2000df7f, 0 , 0,
18834 0x0 }, /* POOL32Axf_5_group3~*(15) */
18835 { instruction , 0 , 0 , 32,
18836 0xfc00ffff, 0x2000e17f, &NMD::RDPGPR , 0,
18837 CP0_ }, /* RDPGPR */
18838 { instruction , 0 , 0 , 32,
18839 0xfc00ffff, 0x2000e37f, &NMD::DERET , 0,
18840 EJTAG_ }, /* DERET */
18841 { reserved_block , 0 , 0 , 32,
18842 0xfc00ffff, 0x2000e57f, 0 , 0,
18843 0x0 }, /* POOL32Axf_5_group3~*(18) */
18844 { reserved_block , 0 , 0 , 32,
18845 0xfc00ffff, 0x2000e77f, 0 , 0,
18846 0x0 }, /* POOL32Axf_5_group3~*(19) */
18847 { reserved_block , 0 , 0 , 32,
18848 0xfc00ffff, 0x2000e97f, 0 , 0,
18849 0x0 }, /* POOL32Axf_5_group3~*(20) */
18850 { reserved_block , 0 , 0 , 32,
18851 0xfc00ffff, 0x2000eb7f, 0 , 0,
18852 0x0 }, /* POOL32Axf_5_group3~*(21) */
18853 { reserved_block , 0 , 0 , 32,
18854 0xfc00ffff, 0x2000ed7f, 0 , 0,
18855 0x0 }, /* POOL32Axf_5_group3~*(22) */
18856 { reserved_block , 0 , 0 , 32,
18857 0xfc00ffff, 0x2000ef7f, 0 , 0,
18858 0x0 }, /* POOL32Axf_5_group3~*(23) */
18859 { instruction , 0 , 0 , 32,
18860 0xfc00ffff, 0x2000f17f, &NMD::WRPGPR , 0,
18861 CP0_ }, /* WRPGPR */
18862 { pool , ERETx , 2 , 32,
18863 0xfc00ffff, 0x2000f37f, 0 , 0,
18864 0x0 }, /* ERETx */
18865 { reserved_block , 0 , 0 , 32,
18866 0xfc00ffff, 0x2000f57f, 0 , 0,
18867 0x0 }, /* POOL32Axf_5_group3~*(26) */
18868 { reserved_block , 0 , 0 , 32,
18869 0xfc00ffff, 0x2000f77f, 0 , 0,
18870 0x0 }, /* POOL32Axf_5_group3~*(27) */
18871 { reserved_block , 0 , 0 , 32,
18872 0xfc00ffff, 0x2000f97f, 0 , 0,
18873 0x0 }, /* POOL32Axf_5_group3~*(28) */
18874 { reserved_block , 0 , 0 , 32,
18875 0xfc00ffff, 0x2000fb7f, 0 , 0,
18876 0x0 }, /* POOL32Axf_5_group3~*(29) */
18877 { reserved_block , 0 , 0 , 32,
18878 0xfc00ffff, 0x2000fd7f, 0 , 0,
18879 0x0 }, /* POOL32Axf_5_group3~*(30) */
18880 { reserved_block , 0 , 0 , 32,
18881 0xfc00ffff, 0x2000ff7f, 0 , 0,
18882 0x0 }, /* POOL32Axf_5_group3~*(31) */
18883};
18884
18885
18886NMD::Pool NMD::POOL32Axf_5[4] = {
18887 { pool , POOL32Axf_5_group0 , 32 , 32,
18888 0xfc00c1ff, 0x2000017f, 0 , 0,
18889 0x0 }, /* POOL32Axf_5_group0 */
18890 { pool , POOL32Axf_5_group1 , 32 , 32,
18891 0xfc00c1ff, 0x2000417f, 0 , 0,
18892 0x0 }, /* POOL32Axf_5_group1 */
18893 { reserved_block , 0 , 0 , 32,
18894 0xfc00c1ff, 0x2000817f, 0 , 0,
18895 0x0 }, /* POOL32Axf_5~*(2) */
18896 { pool , POOL32Axf_5_group3 , 32 , 32,
18897 0xfc00c1ff, 0x2000c17f, 0 , 0,
18898 0x0 }, /* POOL32Axf_5_group3 */
18899};
18900
18901
18902NMD::Pool NMD::SHRA__R__QB[2] = {
18903 { instruction , 0 , 0 , 32,
18904 0xfc001fff, 0x200001ff, &NMD::SHRA_QB , 0,
18905 DSP_ }, /* SHRA.QB */
18906 { instruction , 0 , 0 , 32,
18907 0xfc001fff, 0x200011ff, &NMD::SHRA_R_QB , 0,
18908 DSP_ }, /* SHRA_R.QB */
18909};
18910
18911
18912NMD::Pool NMD::POOL32Axf_7[8] = {
18913 { pool , SHRA__R__QB , 2 , 32,
18914 0xfc000fff, 0x200001ff, 0 , 0,
18915 0x0 }, /* SHRA[_R].QB */
18916 { instruction , 0 , 0 , 32,
18917 0xfc000fff, 0x200003ff, &NMD::SHRL_PH , 0,
18918 DSP_ }, /* SHRL.PH */
18919 { instruction , 0 , 0 , 32,
18920 0xfc000fff, 0x200005ff, &NMD::REPL_QB , 0,
18921 DSP_ }, /* REPL.QB */
18922 { reserved_block , 0 , 0 , 32,
18923 0xfc000fff, 0x200007ff, 0 , 0,
18924 0x0 }, /* POOL32Axf_7~*(3) */
18925 { reserved_block , 0 , 0 , 32,
18926 0xfc000fff, 0x200009ff, 0 , 0,
18927 0x0 }, /* POOL32Axf_7~*(4) */
18928 { reserved_block , 0 , 0 , 32,
18929 0xfc000fff, 0x20000bff, 0 , 0,
18930 0x0 }, /* POOL32Axf_7~*(5) */
18931 { reserved_block , 0 , 0 , 32,
18932 0xfc000fff, 0x20000dff, 0 , 0,
18933 0x0 }, /* POOL32Axf_7~*(6) */
18934 { reserved_block , 0 , 0 , 32,
18935 0xfc000fff, 0x20000fff, 0 , 0,
18936 0x0 }, /* POOL32Axf_7~*(7) */
18937};
18938
18939
18940NMD::Pool NMD::POOL32Axf[8] = {
18941 { reserved_block , 0 , 0 , 32,
18942 0xfc0001ff, 0x2000003f, 0 , 0,
18943 0x0 }, /* POOL32Axf~*(0) */
18944 { pool , POOL32Axf_1 , 8 , 32,
18945 0xfc0001ff, 0x2000007f, 0 , 0,
18946 0x0 }, /* POOL32Axf_1 */
18947 { pool , POOL32Axf_2 , 4 , 32,
18948 0xfc0001ff, 0x200000bf, 0 , 0,
18949 0x0 }, /* POOL32Axf_2 */
18950 { reserved_block , 0 , 0 , 32,
18951 0xfc0001ff, 0x200000ff, 0 , 0,
18952 0x0 }, /* POOL32Axf~*(3) */
18953 { pool , POOL32Axf_4 , 128 , 32,
18954 0xfc0001ff, 0x2000013f, 0 , 0,
18955 0x0 }, /* POOL32Axf_4 */
18956 { pool , POOL32Axf_5 , 4 , 32,
18957 0xfc0001ff, 0x2000017f, 0 , 0,
18958 0x0 }, /* POOL32Axf_5 */
18959 { reserved_block , 0 , 0 , 32,
18960 0xfc0001ff, 0x200001bf, 0 , 0,
18961 0x0 }, /* POOL32Axf~*(6) */
18962 { pool , POOL32Axf_7 , 8 , 32,
18963 0xfc0001ff, 0x200001ff, 0 , 0,
18964 0x0 }, /* POOL32Axf_7 */
18965};
18966
18967
18968NMD::Pool NMD::_POOL32A7[8] = {
18969 { pool , P_LSX , 2 , 32,
18970 0xfc00003f, 0x20000007, 0 , 0,
18971 0x0 }, /* P.LSX */
18972 { instruction , 0 , 0 , 32,
18973 0xfc00003f, 0x2000000f, &NMD::LSA , 0,
18974 0x0 }, /* LSA */
18975 { reserved_block , 0 , 0 , 32,
18976 0xfc00003f, 0x20000017, 0 , 0,
18977 0x0 }, /* _POOL32A7~*(2) */
18978 { instruction , 0 , 0 , 32,
18979 0xfc00003f, 0x2000001f, &NMD::EXTW , 0,
18980 0x0 }, /* EXTW */
18981 { reserved_block , 0 , 0 , 32,
18982 0xfc00003f, 0x20000027, 0 , 0,
18983 0x0 }, /* _POOL32A7~*(4) */
18984 { reserved_block , 0 , 0 , 32,
18985 0xfc00003f, 0x2000002f, 0 , 0,
18986 0x0 }, /* _POOL32A7~*(5) */
18987 { reserved_block , 0 , 0 , 32,
18988 0xfc00003f, 0x20000037, 0 , 0,
18989 0x0 }, /* _POOL32A7~*(6) */
18990 { pool , POOL32Axf , 8 , 32,
18991 0xfc00003f, 0x2000003f, 0 , 0,
18992 0x0 }, /* POOL32Axf */
18993};
18994
18995
18996NMD::Pool NMD::P32A[8] = {
18997 { pool , _POOL32A0 , 128 , 32,
18998 0xfc000007, 0x20000000, 0 , 0,
18999 0x0 }, /* _POOL32A0 */
19000 { instruction , 0 , 0 , 32,
19001 0xfc000007, 0x20000001, &NMD::SPECIAL2 , 0,
19002 UDI_ }, /* SPECIAL2 */
19003 { instruction , 0 , 0 , 32,
19004 0xfc000007, 0x20000002, &NMD::COP2_1 , 0,
19005 CP2_ }, /* COP2_1 */
19006 { instruction , 0 , 0 , 32,
19007 0xfc000007, 0x20000003, &NMD::UDI , 0,
19008 UDI_ }, /* UDI */
19009 { reserved_block , 0 , 0 , 32,
19010 0xfc000007, 0x20000004, 0 , 0,
19011 0x0 }, /* P32A~*(4) */
19012 { pool , _POOL32A5 , 128 , 32,
19013 0xfc000007, 0x20000005, 0 , 0,
19014 0x0 }, /* _POOL32A5 */
19015 { reserved_block , 0 , 0 , 32,
19016 0xfc000007, 0x20000006, 0 , 0,
19017 0x0 }, /* P32A~*(6) */
19018 { pool , _POOL32A7 , 8 , 32,
19019 0xfc000007, 0x20000007, 0 , 0,
19020 0x0 }, /* _POOL32A7 */
19021};
19022
19023
19024NMD::Pool NMD::P_GP_D[2] = {
19025 { instruction , 0 , 0 , 32,
19026 0xfc000007, 0x40000001, &NMD::LD_GP_ , 0,
19027 MIPS64_ }, /* LD[GP] */
19028 { instruction , 0 , 0 , 32,
19029 0xfc000007, 0x40000005, &NMD::SD_GP_ , 0,
19030 MIPS64_ }, /* SD[GP] */
19031};
19032
19033
19034NMD::Pool NMD::P_GP_W[4] = {
19035 { instruction , 0 , 0 , 32,
19036 0xfc000003, 0x40000000, &NMD::ADDIU_GP_W_ , 0,
19037 0x0 }, /* ADDIU[GP.W] */
19038 { pool , P_GP_D , 2 , 32,
19039 0xfc000003, 0x40000001, 0 , 0,
19040 0x0 }, /* P.GP.D */
19041 { instruction , 0 , 0 , 32,
19042 0xfc000003, 0x40000002, &NMD::LW_GP_ , 0,
19043 0x0 }, /* LW[GP] */
19044 { instruction , 0 , 0 , 32,
19045 0xfc000003, 0x40000003, &NMD::SW_GP_ , 0,
19046 0x0 }, /* SW[GP] */
19047};
19048
19049
19050NMD::Pool NMD::POOL48I[32] = {
19051 { instruction , 0 , 0 , 48,
19052 0xfc1f00000000ull, 0x600000000000ull, &NMD::LI_48_ , 0,
19053 XMMS_ }, /* LI[48] */
19054 { instruction , 0 , 0 , 48,
19055 0xfc1f00000000ull, 0x600100000000ull, &NMD::ADDIU_48_ , 0,
19056 XMMS_ }, /* ADDIU[48] */
19057 { instruction , 0 , 0 , 48,
19058 0xfc1f00000000ull, 0x600200000000ull, &NMD::ADDIU_GP48_ , 0,
19059 XMMS_ }, /* ADDIU[GP48] */
19060 { instruction , 0 , 0 , 48,
19061 0xfc1f00000000ull, 0x600300000000ull, &NMD::ADDIUPC_48_ , 0,
19062 XMMS_ }, /* ADDIUPC[48] */
19063 { reserved_block , 0 , 0 , 48,
19064 0xfc1f00000000ull, 0x600400000000ull, 0 , 0,
19065 0x0 }, /* POOL48I~*(4) */
19066 { reserved_block , 0 , 0 , 48,
19067 0xfc1f00000000ull, 0x600500000000ull, 0 , 0,
19068 0x0 }, /* POOL48I~*(5) */
19069 { reserved_block , 0 , 0 , 48,
19070 0xfc1f00000000ull, 0x600600000000ull, 0 , 0,
19071 0x0 }, /* POOL48I~*(6) */
19072 { reserved_block , 0 , 0 , 48,
19073 0xfc1f00000000ull, 0x600700000000ull, 0 , 0,
19074 0x0 }, /* POOL48I~*(7) */
19075 { reserved_block , 0 , 0 , 48,
19076 0xfc1f00000000ull, 0x600800000000ull, 0 , 0,
19077 0x0 }, /* POOL48I~*(8) */
19078 { reserved_block , 0 , 0 , 48,
19079 0xfc1f00000000ull, 0x600900000000ull, 0 , 0,
19080 0x0 }, /* POOL48I~*(9) */
19081 { reserved_block , 0 , 0 , 48,
19082 0xfc1f00000000ull, 0x600a00000000ull, 0 , 0,
19083 0x0 }, /* POOL48I~*(10) */
19084 { instruction , 0 , 0 , 48,
19085 0xfc1f00000000ull, 0x600b00000000ull, &NMD::LWPC_48_ , 0,
19086 XMMS_ }, /* LWPC[48] */
19087 { reserved_block , 0 , 0 , 48,
19088 0xfc1f00000000ull, 0x600c00000000ull, 0 , 0,
19089 0x0 }, /* POOL48I~*(12) */
19090 { reserved_block , 0 , 0 , 48,
19091 0xfc1f00000000ull, 0x600d00000000ull, 0 , 0,
19092 0x0 }, /* POOL48I~*(13) */
19093 { reserved_block , 0 , 0 , 48,
19094 0xfc1f00000000ull, 0x600e00000000ull, 0 , 0,
19095 0x0 }, /* POOL48I~*(14) */
19096 { instruction , 0 , 0 , 48,
19097 0xfc1f00000000ull, 0x600f00000000ull, &NMD::SWPC_48_ , 0,
19098 XMMS_ }, /* SWPC[48] */
19099 { reserved_block , 0 , 0 , 48,
19100 0xfc1f00000000ull, 0x601000000000ull, 0 , 0,
19101 0x0 }, /* POOL48I~*(16) */
19102 { instruction , 0 , 0 , 48,
19103 0xfc1f00000000ull, 0x601100000000ull, &NMD::DADDIU_48_ , 0,
19104 MIPS64_ }, /* DADDIU[48] */
19105 { reserved_block , 0 , 0 , 48,
19106 0xfc1f00000000ull, 0x601200000000ull, 0 , 0,
19107 0x0 }, /* POOL48I~*(18) */
19108 { reserved_block , 0 , 0 , 48,
19109 0xfc1f00000000ull, 0x601300000000ull, 0 , 0,
19110 0x0 }, /* POOL48I~*(19) */
19111 { instruction , 0 , 0 , 48,
19112 0xfc1f00000000ull, 0x601400000000ull, &NMD::DLUI_48_ , 0,
19113 MIPS64_ }, /* DLUI[48] */
19114 { reserved_block , 0 , 0 , 48,
19115 0xfc1f00000000ull, 0x601500000000ull, 0 , 0,
19116 0x0 }, /* POOL48I~*(21) */
19117 { reserved_block , 0 , 0 , 48,
19118 0xfc1f00000000ull, 0x601600000000ull, 0 , 0,
19119 0x0 }, /* POOL48I~*(22) */
19120 { reserved_block , 0 , 0 , 48,
19121 0xfc1f00000000ull, 0x601700000000ull, 0 , 0,
19122 0x0 }, /* POOL48I~*(23) */
19123 { reserved_block , 0 , 0 , 48,
19124 0xfc1f00000000ull, 0x601800000000ull, 0 , 0,
19125 0x0 }, /* POOL48I~*(24) */
19126 { reserved_block , 0 , 0 , 48,
19127 0xfc1f00000000ull, 0x601900000000ull, 0 , 0,
19128 0x0 }, /* POOL48I~*(25) */
19129 { reserved_block , 0 , 0 , 48,
19130 0xfc1f00000000ull, 0x601a00000000ull, 0 , 0,
19131 0x0 }, /* POOL48I~*(26) */
19132 { instruction , 0 , 0 , 48,
19133 0xfc1f00000000ull, 0x601b00000000ull, &NMD::LDPC_48_ , 0,
19134 MIPS64_ }, /* LDPC[48] */
19135 { reserved_block , 0 , 0 , 48,
19136 0xfc1f00000000ull, 0x601c00000000ull, 0 , 0,
19137 0x0 }, /* POOL48I~*(28) */
19138 { reserved_block , 0 , 0 , 48,
19139 0xfc1f00000000ull, 0x601d00000000ull, 0 , 0,
19140 0x0 }, /* POOL48I~*(29) */
19141 { reserved_block , 0 , 0 , 48,
19142 0xfc1f00000000ull, 0x601e00000000ull, 0 , 0,
19143 0x0 }, /* POOL48I~*(30) */
19144 { instruction , 0 , 0 , 48,
19145 0xfc1f00000000ull, 0x601f00000000ull, &NMD::SDPC_48_ , 0,
19146 MIPS64_ }, /* SDPC[48] */
19147};
19148
19149
19150NMD::Pool NMD::PP_SR[4] = {
19151 { instruction , 0 , 0 , 32,
19152 0xfc10f003, 0x80003000, &NMD::SAVE_32_ , 0,
19153 0x0 }, /* SAVE[32] */
19154 { reserved_block , 0 , 0 , 32,
19155 0xfc10f003, 0x80003001, 0 , 0,
19156 0x0 }, /* PP.SR~*(1) */
19157 { instruction , 0 , 0 , 32,
19158 0xfc10f003, 0x80003002, &NMD::RESTORE_32_ , 0,
19159 0x0 }, /* RESTORE[32] */
19160 { return_instruction , 0 , 0 , 32,
19161 0xfc10f003, 0x80003003, &NMD::RESTORE_JRC_32_ , 0,
19162 0x0 }, /* RESTORE.JRC[32] */
19163};
19164
19165
19166NMD::Pool NMD::P_SR_F[8] = {
19167 { instruction , 0 , 0 , 32,
19168 0xfc10f007, 0x80103000, &NMD::SAVEF , 0,
19169 CP1_ }, /* SAVEF */
19170 { instruction , 0 , 0 , 32,
19171 0xfc10f007, 0x80103001, &NMD::RESTOREF , 0,
19172 CP1_ }, /* RESTOREF */
19173 { reserved_block , 0 , 0 , 32,
19174 0xfc10f007, 0x80103002, 0 , 0,
19175 0x0 }, /* P.SR.F~*(2) */
19176 { reserved_block , 0 , 0 , 32,
19177 0xfc10f007, 0x80103003, 0 , 0,
19178 0x0 }, /* P.SR.F~*(3) */
19179 { reserved_block , 0 , 0 , 32,
19180 0xfc10f007, 0x80103004, 0 , 0,
19181 0x0 }, /* P.SR.F~*(4) */
19182 { reserved_block , 0 , 0 , 32,
19183 0xfc10f007, 0x80103005, 0 , 0,
19184 0x0 }, /* P.SR.F~*(5) */
19185 { reserved_block , 0 , 0 , 32,
19186 0xfc10f007, 0x80103006, 0 , 0,
19187 0x0 }, /* P.SR.F~*(6) */
19188 { reserved_block , 0 , 0 , 32,
19189 0xfc10f007, 0x80103007, 0 , 0,
19190 0x0 }, /* P.SR.F~*(7) */
19191};
19192
19193
19194NMD::Pool NMD::P_SR[2] = {
19195 { pool , PP_SR , 4 , 32,
19196 0xfc10f000, 0x80003000, 0 , 0,
19197 0x0 }, /* PP.SR */
19198 { pool , P_SR_F , 8 , 32,
19199 0xfc10f000, 0x80103000, 0 , 0,
19200 0x0 }, /* P.SR.F */
19201};
19202
19203
19204NMD::Pool NMD::P_SLL[5] = {
19205 { instruction , 0 , 0 , 32,
19206 0xffe0f1ff, 0x8000c000, &NMD::NOP_32_ , 0,
19207 0x0 }, /* NOP[32] */
19208 { instruction , 0 , 0 , 32,
19209 0xffe0f1ff, 0x8000c003, &NMD::EHB , 0,
19210 0x0 }, /* EHB */
19211 { instruction , 0 , 0 , 32,
19212 0xffe0f1ff, 0x8000c005, &NMD::PAUSE , 0,
19213 0x0 }, /* PAUSE */
19214 { instruction , 0 , 0 , 32,
19215 0xffe0f1ff, 0x8000c006, &NMD::SYNC , 0,
19216 0x0 }, /* SYNC */
19217 { instruction , 0 , 0 , 32,
19218 0xfc00f1e0, 0x8000c000, &NMD::SLL_32_ , 0,
19219 0x0 }, /* SLL[32] */
19220};
19221
19222
19223NMD::Pool NMD::P_SHIFT[16] = {
19224 { pool , P_SLL , 5 , 32,
19225 0xfc00f1e0, 0x8000c000, 0 , 0,
19226 0x0 }, /* P.SLL */
19227 { reserved_block , 0 , 0 , 32,
19228 0xfc00f1e0, 0x8000c020, 0 , 0,
19229 0x0 }, /* P.SHIFT~*(1) */
19230 { instruction , 0 , 0 , 32,
19231 0xfc00f1e0, 0x8000c040, &NMD::SRL_32_ , 0,
19232 0x0 }, /* SRL[32] */
19233 { reserved_block , 0 , 0 , 32,
19234 0xfc00f1e0, 0x8000c060, 0 , 0,
19235 0x0 }, /* P.SHIFT~*(3) */
19236 { instruction , 0 , 0 , 32,
19237 0xfc00f1e0, 0x8000c080, &NMD::SRA , 0,
19238 0x0 }, /* SRA */
19239 { reserved_block , 0 , 0 , 32,
19240 0xfc00f1e0, 0x8000c0a0, 0 , 0,
19241 0x0 }, /* P.SHIFT~*(5) */
19242 { instruction , 0 , 0 , 32,
19243 0xfc00f1e0, 0x8000c0c0, &NMD::ROTR , 0,
19244 0x0 }, /* ROTR */
19245 { reserved_block , 0 , 0 , 32,
19246 0xfc00f1e0, 0x8000c0e0, 0 , 0,
19247 0x0 }, /* P.SHIFT~*(7) */
19248 { instruction , 0 , 0 , 32,
19249 0xfc00f1e0, 0x8000c100, &NMD::DSLL , 0,
19250 MIPS64_ }, /* DSLL */
19251 { instruction , 0 , 0 , 32,
19252 0xfc00f1e0, 0x8000c120, &NMD::DSLL32 , 0,
19253 MIPS64_ }, /* DSLL32 */
19254 { instruction , 0 , 0 , 32,
19255 0xfc00f1e0, 0x8000c140, &NMD::DSRL , 0,
19256 MIPS64_ }, /* DSRL */
19257 { instruction , 0 , 0 , 32,
19258 0xfc00f1e0, 0x8000c160, &NMD::DSRL32 , 0,
19259 MIPS64_ }, /* DSRL32 */
19260 { instruction , 0 , 0 , 32,
19261 0xfc00f1e0, 0x8000c180, &NMD::DSRA , 0,
19262 MIPS64_ }, /* DSRA */
19263 { instruction , 0 , 0 , 32,
19264 0xfc00f1e0, 0x8000c1a0, &NMD::DSRA32 , 0,
19265 MIPS64_ }, /* DSRA32 */
19266 { instruction , 0 , 0 , 32,
19267 0xfc00f1e0, 0x8000c1c0, &NMD::DROTR , 0,
19268 MIPS64_ }, /* DROTR */
19269 { instruction , 0 , 0 , 32,
19270 0xfc00f1e0, 0x8000c1e0, &NMD::DROTR32 , 0,
19271 MIPS64_ }, /* DROTR32 */
19272};
19273
19274
19275NMD::Pool NMD::P_ROTX[4] = {
19276 { instruction , 0 , 0 , 32,
19277 0xfc00f820, 0x8000d000, &NMD::ROTX , 0,
19278 XMMS_ }, /* ROTX */
19279 { reserved_block , 0 , 0 , 32,
19280 0xfc00f820, 0x8000d020, 0 , 0,
19281 0x0 }, /* P.ROTX~*(1) */
19282 { reserved_block , 0 , 0 , 32,
19283 0xfc00f820, 0x8000d800, 0 , 0,
19284 0x0 }, /* P.ROTX~*(2) */
19285 { reserved_block , 0 , 0 , 32,
19286 0xfc00f820, 0x8000d820, 0 , 0,
19287 0x0 }, /* P.ROTX~*(3) */
19288};
19289
19290
19291NMD::Pool NMD::P_INS[4] = {
19292 { instruction , 0 , 0 , 32,
19293 0xfc00f820, 0x8000e000, &NMD::INS , 0,
19294 XMMS_ }, /* INS */
19295 { instruction , 0 , 0 , 32,
19296 0xfc00f820, 0x8000e020, &NMD::DINSU , 0,
19297 MIPS64_ }, /* DINSU */
19298 { instruction , 0 , 0 , 32,
19299 0xfc00f820, 0x8000e800, &NMD::DINSM , 0,
19300 MIPS64_ }, /* DINSM */
19301 { instruction , 0 , 0 , 32,
19302 0xfc00f820, 0x8000e820, &NMD::DINS , 0,
19303 MIPS64_ }, /* DINS */
19304};
19305
19306
19307NMD::Pool NMD::P_EXT[4] = {
19308 { instruction , 0 , 0 , 32,
19309 0xfc00f820, 0x8000f000, &NMD::EXT , 0,
19310 XMMS_ }, /* EXT */
19311 { instruction , 0 , 0 , 32,
19312 0xfc00f820, 0x8000f020, &NMD::DEXTU , 0,
19313 MIPS64_ }, /* DEXTU */
19314 { instruction , 0 , 0 , 32,
19315 0xfc00f820, 0x8000f800, &NMD::DEXTM , 0,
19316 MIPS64_ }, /* DEXTM */
19317 { instruction , 0 , 0 , 32,
19318 0xfc00f820, 0x8000f820, &NMD::DEXT , 0,
19319 MIPS64_ }, /* DEXT */
19320};
19321
19322
19323NMD::Pool NMD::P_U12[16] = {
19324 { instruction , 0 , 0 , 32,
19325 0xfc00f000, 0x80000000, &NMD::ORI , 0,
19326 0x0 }, /* ORI */
19327 { instruction , 0 , 0 , 32,
19328 0xfc00f000, 0x80001000, &NMD::XORI , 0,
19329 0x0 }, /* XORI */
19330 { instruction , 0 , 0 , 32,
19331 0xfc00f000, 0x80002000, &NMD::ANDI_32_ , 0,
19332 0x0 }, /* ANDI[32] */
19333 { pool , P_SR , 2 , 32,
19334 0xfc00f000, 0x80003000, 0 , 0,
19335 0x0 }, /* P.SR */
19336 { instruction , 0 , 0 , 32,
19337 0xfc00f000, 0x80004000, &NMD::SLTI , 0,
19338 0x0 }, /* SLTI */
19339 { instruction , 0 , 0 , 32,
19340 0xfc00f000, 0x80005000, &NMD::SLTIU , 0,
19341 0x0 }, /* SLTIU */
19342 { instruction , 0 , 0 , 32,
19343 0xfc00f000, 0x80006000, &NMD::SEQI , 0,
19344 0x0 }, /* SEQI */
19345 { reserved_block , 0 , 0 , 32,
19346 0xfc00f000, 0x80007000, 0 , 0,
19347 0x0 }, /* P.U12~*(7) */
19348 { instruction , 0 , 0 , 32,
19349 0xfc00f000, 0x80008000, &NMD::ADDIU_NEG_ , 0,
19350 0x0 }, /* ADDIU[NEG] */
19351 { instruction , 0 , 0 , 32,
19352 0xfc00f000, 0x80009000, &NMD::DADDIU_U12_ , 0,
19353 MIPS64_ }, /* DADDIU[U12] */
19354 { instruction , 0 , 0 , 32,
19355 0xfc00f000, 0x8000a000, &NMD::DADDIU_NEG_ , 0,
19356 MIPS64_ }, /* DADDIU[NEG] */
19357 { instruction , 0 , 0 , 32,
19358 0xfc00f000, 0x8000b000, &NMD::DROTX , 0,
19359 MIPS64_ }, /* DROTX */
19360 { pool , P_SHIFT , 16 , 32,
19361 0xfc00f000, 0x8000c000, 0 , 0,
19362 0x0 }, /* P.SHIFT */
19363 { pool , P_ROTX , 4 , 32,
19364 0xfc00f000, 0x8000d000, 0 , 0,
19365 0x0 }, /* P.ROTX */
19366 { pool , P_INS , 4 , 32,
19367 0xfc00f000, 0x8000e000, 0 , 0,
19368 0x0 }, /* P.INS */
19369 { pool , P_EXT , 4 , 32,
19370 0xfc00f000, 0x8000f000, 0 , 0,
19371 0x0 }, /* P.EXT */
19372};
19373
19374
19375NMD::Pool NMD::RINT_fmt[2] = {
19376 { instruction , 0 , 0 , 32,
19377 0xfc0003ff, 0xa0000020, &NMD::RINT_S , 0,
19378 CP1_ }, /* RINT.S */
19379 { instruction , 0 , 0 , 32,
19380 0xfc0003ff, 0xa0000220, &NMD::RINT_D , 0,
19381 CP1_ }, /* RINT.D */
19382};
19383
19384
19385NMD::Pool NMD::ADD_fmt0[2] = {
19386 { instruction , 0 , 0 , 32,
19387 0xfc0003ff, 0xa0000030, &NMD::ADD_S , 0,
19388 CP1_ }, /* ADD.S */
19389 { reserved_block , 0 , 0 , 32,
19390 0xfc0003ff, 0xa0000230, 0 , 0,
19391 CP1_ }, /* ADD.fmt0~*(1) */
19392};
19393
19394
19395NMD::Pool NMD::SELEQZ_fmt[2] = {
19396 { instruction , 0 , 0 , 32,
19397 0xfc0003ff, 0xa0000038, &NMD::SELEQZ_S , 0,
19398 CP1_ }, /* SELEQZ.S */
19399 { instruction , 0 , 0 , 32,
19400 0xfc0003ff, 0xa0000238, &NMD::SELEQZ_D , 0,
19401 CP1_ }, /* SELEQZ.D */
19402};
19403
19404
19405NMD::Pool NMD::CLASS_fmt[2] = {
19406 { instruction , 0 , 0 , 32,
19407 0xfc0003ff, 0xa0000060, &NMD::CLASS_S , 0,
19408 CP1_ }, /* CLASS.S */
19409 { instruction , 0 , 0 , 32,
19410 0xfc0003ff, 0xa0000260, &NMD::CLASS_D , 0,
19411 CP1_ }, /* CLASS.D */
19412};
19413
19414
19415NMD::Pool NMD::SUB_fmt0[2] = {
19416 { instruction , 0 , 0 , 32,
19417 0xfc0003ff, 0xa0000070, &NMD::SUB_S , 0,
19418 CP1_ }, /* SUB.S */
19419 { reserved_block , 0 , 0 , 32,
19420 0xfc0003ff, 0xa0000270, 0 , 0,
19421 CP1_ }, /* SUB.fmt0~*(1) */
19422};
19423
19424
19425NMD::Pool NMD::SELNEZ_fmt[2] = {
19426 { instruction , 0 , 0 , 32,
19427 0xfc0003ff, 0xa0000078, &NMD::SELNEZ_S , 0,
19428 CP1_ }, /* SELNEZ.S */
19429 { instruction , 0 , 0 , 32,
19430 0xfc0003ff, 0xa0000278, &NMD::SELNEZ_D , 0,
19431 CP1_ }, /* SELNEZ.D */
19432};
19433
19434
19435NMD::Pool NMD::MUL_fmt0[2] = {
19436 { instruction , 0 , 0 , 32,
19437 0xfc0003ff, 0xa00000b0, &NMD::MUL_S , 0,
19438 CP1_ }, /* MUL.S */
19439 { reserved_block , 0 , 0 , 32,
19440 0xfc0003ff, 0xa00002b0, 0 , 0,
19441 CP1_ }, /* MUL.fmt0~*(1) */
19442};
19443
19444
19445NMD::Pool NMD::SEL_fmt[2] = {
19446 { instruction , 0 , 0 , 32,
19447 0xfc0003ff, 0xa00000b8, &NMD::SEL_S , 0,
19448 CP1_ }, /* SEL.S */
19449 { instruction , 0 , 0 , 32,
19450 0xfc0003ff, 0xa00002b8, &NMD::SEL_D , 0,
19451 CP1_ }, /* SEL.D */
19452};
19453
19454
19455NMD::Pool NMD::DIV_fmt0[2] = {
19456 { instruction , 0 , 0 , 32,
19457 0xfc0003ff, 0xa00000f0, &NMD::DIV_S , 0,
19458 CP1_ }, /* DIV.S */
19459 { reserved_block , 0 , 0 , 32,
19460 0xfc0003ff, 0xa00002f0, 0 , 0,
19461 CP1_ }, /* DIV.fmt0~*(1) */
19462};
19463
19464
19465NMD::Pool NMD::ADD_fmt1[2] = {
19466 { instruction , 0 , 0 , 32,
19467 0xfc0003ff, 0xa0000130, &NMD::ADD_D , 0,
19468 CP1_ }, /* ADD.D */
19469 { reserved_block , 0 , 0 , 32,
19470 0xfc0003ff, 0xa0000330, 0 , 0,
19471 CP1_ }, /* ADD.fmt1~*(1) */
19472};
19473
19474
19475NMD::Pool NMD::SUB_fmt1[2] = {
19476 { instruction , 0 , 0 , 32,
19477 0xfc0003ff, 0xa0000170, &NMD::SUB_D , 0,
19478 CP1_ }, /* SUB.D */
19479 { reserved_block , 0 , 0 , 32,
19480 0xfc0003ff, 0xa0000370, 0 , 0,
19481 CP1_ }, /* SUB.fmt1~*(1) */
19482};
19483
19484
19485NMD::Pool NMD::MUL_fmt1[2] = {
19486 { instruction , 0 , 0 , 32,
19487 0xfc0003ff, 0xa00001b0, &NMD::MUL_D , 0,
19488 CP1_ }, /* MUL.D */
19489 { reserved_block , 0 , 0 , 32,
19490 0xfc0003ff, 0xa00003b0, 0 , 0,
19491 CP1_ }, /* MUL.fmt1~*(1) */
19492};
19493
19494
19495NMD::Pool NMD::MADDF_fmt[2] = {
19496 { instruction , 0 , 0 , 32,
19497 0xfc0003ff, 0xa00001b8, &NMD::MADDF_S , 0,
19498 CP1_ }, /* MADDF.S */
19499 { instruction , 0 , 0 , 32,
19500 0xfc0003ff, 0xa00003b8, &NMD::MADDF_D , 0,
19501 CP1_ }, /* MADDF.D */
19502};
19503
19504
19505NMD::Pool NMD::DIV_fmt1[2] = {
19506 { instruction , 0 , 0 , 32,
19507 0xfc0003ff, 0xa00001f0, &NMD::DIV_D , 0,
19508 CP1_ }, /* DIV.D */
19509 { reserved_block , 0 , 0 , 32,
19510 0xfc0003ff, 0xa00003f0, 0 , 0,
19511 CP1_ }, /* DIV.fmt1~*(1) */
19512};
19513
19514
19515NMD::Pool NMD::MSUBF_fmt[2] = {
19516 { instruction , 0 , 0 , 32,
19517 0xfc0003ff, 0xa00001f8, &NMD::MSUBF_S , 0,
19518 CP1_ }, /* MSUBF.S */
19519 { instruction , 0 , 0 , 32,
19520 0xfc0003ff, 0xa00003f8, &NMD::MSUBF_D , 0,
19521 CP1_ }, /* MSUBF.D */
19522};
19523
19524
19525NMD::Pool NMD::POOL32F_0[64] = {
19526 { reserved_block , 0 , 0 , 32,
19527 0xfc0001ff, 0xa0000000, 0 , 0,
19528 CP1_ }, /* POOL32F_0~*(0) */
19529 { reserved_block , 0 , 0 , 32,
19530 0xfc0001ff, 0xa0000008, 0 , 0,
19531 CP1_ }, /* POOL32F_0~*(1) */
19532 { reserved_block , 0 , 0 , 32,
19533 0xfc0001ff, 0xa0000010, 0 , 0,
19534 CP1_ }, /* POOL32F_0~*(2) */
19535 { reserved_block , 0 , 0 , 32,
19536 0xfc0001ff, 0xa0000018, 0 , 0,
19537 CP1_ }, /* POOL32F_0~*(3) */
19538 { pool , RINT_fmt , 2 , 32,
19539 0xfc0001ff, 0xa0000020, 0 , 0,
19540 CP1_ }, /* RINT.fmt */
19541 { reserved_block , 0 , 0 , 32,
19542 0xfc0001ff, 0xa0000028, 0 , 0,
19543 CP1_ }, /* POOL32F_0~*(5) */
19544 { pool , ADD_fmt0 , 2 , 32,
19545 0xfc0001ff, 0xa0000030, 0 , 0,
19546 CP1_ }, /* ADD.fmt0 */
19547 { pool , SELEQZ_fmt , 2 , 32,
19548 0xfc0001ff, 0xa0000038, 0 , 0,
19549 CP1_ }, /* SELEQZ.fmt */
19550 { reserved_block , 0 , 0 , 32,
19551 0xfc0001ff, 0xa0000040, 0 , 0,
19552 CP1_ }, /* POOL32F_0~*(8) */
19553 { reserved_block , 0 , 0 , 32,
19554 0xfc0001ff, 0xa0000048, 0 , 0,
19555 CP1_ }, /* POOL32F_0~*(9) */
19556 { reserved_block , 0 , 0 , 32,
19557 0xfc0001ff, 0xa0000050, 0 , 0,
19558 CP1_ }, /* POOL32F_0~*(10) */
19559 { reserved_block , 0 , 0 , 32,
19560 0xfc0001ff, 0xa0000058, 0 , 0,
19561 CP1_ }, /* POOL32F_0~*(11) */
19562 { pool , CLASS_fmt , 2 , 32,
19563 0xfc0001ff, 0xa0000060, 0 , 0,
19564 CP1_ }, /* CLASS.fmt */
19565 { reserved_block , 0 , 0 , 32,
19566 0xfc0001ff, 0xa0000068, 0 , 0,
19567 CP1_ }, /* POOL32F_0~*(13) */
19568 { pool , SUB_fmt0 , 2 , 32,
19569 0xfc0001ff, 0xa0000070, 0 , 0,
19570 CP1_ }, /* SUB.fmt0 */
19571 { pool , SELNEZ_fmt , 2 , 32,
19572 0xfc0001ff, 0xa0000078, 0 , 0,
19573 CP1_ }, /* SELNEZ.fmt */
19574 { reserved_block , 0 , 0 , 32,
19575 0xfc0001ff, 0xa0000080, 0 , 0,
19576 CP1_ }, /* POOL32F_0~*(16) */
19577 { reserved_block , 0 , 0 , 32,
19578 0xfc0001ff, 0xa0000088, 0 , 0,
19579 CP1_ }, /* POOL32F_0~*(17) */
19580 { reserved_block , 0 , 0 , 32,
19581 0xfc0001ff, 0xa0000090, 0 , 0,
19582 CP1_ }, /* POOL32F_0~*(18) */
19583 { reserved_block , 0 , 0 , 32,
19584 0xfc0001ff, 0xa0000098, 0 , 0,
19585 CP1_ }, /* POOL32F_0~*(19) */
19586 { reserved_block , 0 , 0 , 32,
19587 0xfc0001ff, 0xa00000a0, 0 , 0,
19588 CP1_ }, /* POOL32F_0~*(20) */
19589 { reserved_block , 0 , 0 , 32,
19590 0xfc0001ff, 0xa00000a8, 0 , 0,
19591 CP1_ }, /* POOL32F_0~*(21) */
19592 { pool , MUL_fmt0 , 2 , 32,
19593 0xfc0001ff, 0xa00000b0, 0 , 0,
19594 CP1_ }, /* MUL.fmt0 */
19595 { pool , SEL_fmt , 2 , 32,
19596 0xfc0001ff, 0xa00000b8, 0 , 0,
19597 CP1_ }, /* SEL.fmt */
19598 { reserved_block , 0 , 0 , 32,
19599 0xfc0001ff, 0xa00000c0, 0 , 0,
19600 CP1_ }, /* POOL32F_0~*(24) */
19601 { reserved_block , 0 , 0 , 32,
19602 0xfc0001ff, 0xa00000c8, 0 , 0,
19603 CP1_ }, /* POOL32F_0~*(25) */
19604 { reserved_block , 0 , 0 , 32,
19605 0xfc0001ff, 0xa00000d0, 0 , 0,
19606 CP1_ }, /* POOL32F_0~*(26) */
19607 { reserved_block , 0 , 0 , 32,
19608 0xfc0001ff, 0xa00000d8, 0 , 0,
19609 CP1_ }, /* POOL32F_0~*(27) */
19610 { reserved_block , 0 , 0 , 32,
19611 0xfc0001ff, 0xa00000e0, 0 , 0,
19612 CP1_ }, /* POOL32F_0~*(28) */
19613 { reserved_block , 0 , 0 , 32,
19614 0xfc0001ff, 0xa00000e8, 0 , 0,
19615 CP1_ }, /* POOL32F_0~*(29) */
19616 { pool , DIV_fmt0 , 2 , 32,
19617 0xfc0001ff, 0xa00000f0, 0 , 0,
19618 CP1_ }, /* DIV.fmt0 */
19619 { reserved_block , 0 , 0 , 32,
19620 0xfc0001ff, 0xa00000f8, 0 , 0,
19621 CP1_ }, /* POOL32F_0~*(31) */
19622 { reserved_block , 0 , 0 , 32,
19623 0xfc0001ff, 0xa0000100, 0 , 0,
19624 CP1_ }, /* POOL32F_0~*(32) */
19625 { reserved_block , 0 , 0 , 32,
19626 0xfc0001ff, 0xa0000108, 0 , 0,
19627 CP1_ }, /* POOL32F_0~*(33) */
19628 { reserved_block , 0 , 0 , 32,
19629 0xfc0001ff, 0xa0000110, 0 , 0,
19630 CP1_ }, /* POOL32F_0~*(34) */
19631 { reserved_block , 0 , 0 , 32,
19632 0xfc0001ff, 0xa0000118, 0 , 0,
19633 CP1_ }, /* POOL32F_0~*(35) */
19634 { reserved_block , 0 , 0 , 32,
19635 0xfc0001ff, 0xa0000120, 0 , 0,
19636 CP1_ }, /* POOL32F_0~*(36) */
19637 { reserved_block , 0 , 0 , 32,
19638 0xfc0001ff, 0xa0000128, 0 , 0,
19639 CP1_ }, /* POOL32F_0~*(37) */
19640 { pool , ADD_fmt1 , 2 , 32,
19641 0xfc0001ff, 0xa0000130, 0 , 0,
19642 CP1_ }, /* ADD.fmt1 */
19643 { reserved_block , 0 , 0 , 32,
19644 0xfc0001ff, 0xa0000138, 0 , 0,
19645 CP1_ }, /* POOL32F_0~*(39) */
19646 { reserved_block , 0 , 0 , 32,
19647 0xfc0001ff, 0xa0000140, 0 , 0,
19648 CP1_ }, /* POOL32F_0~*(40) */
19649 { reserved_block , 0 , 0 , 32,
19650 0xfc0001ff, 0xa0000148, 0 , 0,
19651 CP1_ }, /* POOL32F_0~*(41) */
19652 { reserved_block , 0 , 0 , 32,
19653 0xfc0001ff, 0xa0000150, 0 , 0,
19654 CP1_ }, /* POOL32F_0~*(42) */
19655 { reserved_block , 0 , 0 , 32,
19656 0xfc0001ff, 0xa0000158, 0 , 0,
19657 CP1_ }, /* POOL32F_0~*(43) */
19658 { reserved_block , 0 , 0 , 32,
19659 0xfc0001ff, 0xa0000160, 0 , 0,
19660 CP1_ }, /* POOL32F_0~*(44) */
19661 { reserved_block , 0 , 0 , 32,
19662 0xfc0001ff, 0xa0000168, 0 , 0,
19663 CP1_ }, /* POOL32F_0~*(45) */
19664 { pool , SUB_fmt1 , 2 , 32,
19665 0xfc0001ff, 0xa0000170, 0 , 0,
19666 CP1_ }, /* SUB.fmt1 */
19667 { reserved_block , 0 , 0 , 32,
19668 0xfc0001ff, 0xa0000178, 0 , 0,
19669 CP1_ }, /* POOL32F_0~*(47) */
19670 { reserved_block , 0 , 0 , 32,
19671 0xfc0001ff, 0xa0000180, 0 , 0,
19672 CP1_ }, /* POOL32F_0~*(48) */
19673 { reserved_block , 0 , 0 , 32,
19674 0xfc0001ff, 0xa0000188, 0 , 0,
19675 CP1_ }, /* POOL32F_0~*(49) */
19676 { reserved_block , 0 , 0 , 32,
19677 0xfc0001ff, 0xa0000190, 0 , 0,
19678 CP1_ }, /* POOL32F_0~*(50) */
19679 { reserved_block , 0 , 0 , 32,
19680 0xfc0001ff, 0xa0000198, 0 , 0,
19681 CP1_ }, /* POOL32F_0~*(51) */
19682 { reserved_block , 0 , 0 , 32,
19683 0xfc0001ff, 0xa00001a0, 0 , 0,
19684 CP1_ }, /* POOL32F_0~*(52) */
19685 { reserved_block , 0 , 0 , 32,
19686 0xfc0001ff, 0xa00001a8, 0 , 0,
19687 CP1_ }, /* POOL32F_0~*(53) */
19688 { pool , MUL_fmt1 , 2 , 32,
19689 0xfc0001ff, 0xa00001b0, 0 , 0,
19690 CP1_ }, /* MUL.fmt1 */
19691 { pool , MADDF_fmt , 2 , 32,
19692 0xfc0001ff, 0xa00001b8, 0 , 0,
19693 CP1_ }, /* MADDF.fmt */
19694 { reserved_block , 0 , 0 , 32,
19695 0xfc0001ff, 0xa00001c0, 0 , 0,
19696 CP1_ }, /* POOL32F_0~*(56) */
19697 { reserved_block , 0 , 0 , 32,
19698 0xfc0001ff, 0xa00001c8, 0 , 0,
19699 CP1_ }, /* POOL32F_0~*(57) */
19700 { reserved_block , 0 , 0 , 32,
19701 0xfc0001ff, 0xa00001d0, 0 , 0,
19702 CP1_ }, /* POOL32F_0~*(58) */
19703 { reserved_block , 0 , 0 , 32,
19704 0xfc0001ff, 0xa00001d8, 0 , 0,
19705 CP1_ }, /* POOL32F_0~*(59) */
19706 { reserved_block , 0 , 0 , 32,
19707 0xfc0001ff, 0xa00001e0, 0 , 0,
19708 CP1_ }, /* POOL32F_0~*(60) */
19709 { reserved_block , 0 , 0 , 32,
19710 0xfc0001ff, 0xa00001e8, 0 , 0,
19711 CP1_ }, /* POOL32F_0~*(61) */
19712 { pool , DIV_fmt1 , 2 , 32,
19713 0xfc0001ff, 0xa00001f0, 0 , 0,
19714 CP1_ }, /* DIV.fmt1 */
19715 { pool , MSUBF_fmt , 2 , 32,
19716 0xfc0001ff, 0xa00001f8, 0 , 0,
19717 CP1_ }, /* MSUBF.fmt */
19718};
19719
19720
19721NMD::Pool NMD::MIN_fmt[2] = {
19722 { instruction , 0 , 0 , 32,
19723 0xfc00023f, 0xa0000003, &NMD::MIN_S , 0,
19724 CP1_ }, /* MIN.S */
19725 { instruction , 0 , 0 , 32,
19726 0xfc00023f, 0xa0000203, &NMD::MIN_D , 0,
19727 CP1_ }, /* MIN.D */
19728};
19729
19730
19731NMD::Pool NMD::MAX_fmt[2] = {
19732 { instruction , 0 , 0 , 32,
19733 0xfc00023f, 0xa000000b, &NMD::MAX_S , 0,
19734 CP1_ }, /* MAX.S */
19735 { instruction , 0 , 0 , 32,
19736 0xfc00023f, 0xa000020b, &NMD::MAX_D , 0,
19737 CP1_ }, /* MAX.D */
19738};
19739
19740
19741NMD::Pool NMD::MINA_fmt[2] = {
19742 { instruction , 0 , 0 , 32,
19743 0xfc00023f, 0xa0000023, &NMD::MINA_S , 0,
19744 CP1_ }, /* MINA.S */
19745 { instruction , 0 , 0 , 32,
19746 0xfc00023f, 0xa0000223, &NMD::MINA_D , 0,
19747 CP1_ }, /* MINA.D */
19748};
19749
19750
19751NMD::Pool NMD::MAXA_fmt[2] = {
19752 { instruction , 0 , 0 , 32,
19753 0xfc00023f, 0xa000002b, &NMD::MAXA_S , 0,
19754 CP1_ }, /* MAXA.S */
19755 { instruction , 0 , 0 , 32,
19756 0xfc00023f, 0xa000022b, &NMD::MAXA_D , 0,
19757 CP1_ }, /* MAXA.D */
19758};
19759
19760
19761NMD::Pool NMD::CVT_L_fmt[2] = {
19762 { instruction , 0 , 0 , 32,
19763 0xfc007fff, 0xa000013b, &NMD::CVT_L_S , 0,
19764 CP1_ }, /* CVT.L.S */
19765 { instruction , 0 , 0 , 32,
19766 0xfc007fff, 0xa000413b, &NMD::CVT_L_D , 0,
19767 CP1_ }, /* CVT.L.D */
19768};
19769
19770
19771NMD::Pool NMD::RSQRT_fmt[2] = {
19772 { instruction , 0 , 0 , 32,
19773 0xfc007fff, 0xa000023b, &NMD::RSQRT_S , 0,
19774 CP1_ }, /* RSQRT.S */
19775 { instruction , 0 , 0 , 32,
19776 0xfc007fff, 0xa000423b, &NMD::RSQRT_D , 0,
19777 CP1_ }, /* RSQRT.D */
19778};
19779
19780
19781NMD::Pool NMD::FLOOR_L_fmt[2] = {
19782 { instruction , 0 , 0 , 32,
19783 0xfc007fff, 0xa000033b, &NMD::FLOOR_L_S , 0,
19784 CP1_ }, /* FLOOR.L.S */
19785 { instruction , 0 , 0 , 32,
19786 0xfc007fff, 0xa000433b, &NMD::FLOOR_L_D , 0,
19787 CP1_ }, /* FLOOR.L.D */
19788};
19789
19790
19791NMD::Pool NMD::CVT_W_fmt[2] = {
19792 { instruction , 0 , 0 , 32,
19793 0xfc007fff, 0xa000093b, &NMD::CVT_W_S , 0,
19794 CP1_ }, /* CVT.W.S */
19795 { instruction , 0 , 0 , 32,
19796 0xfc007fff, 0xa000493b, &NMD::CVT_W_D , 0,
19797 CP1_ }, /* CVT.W.D */
19798};
19799
19800
19801NMD::Pool NMD::SQRT_fmt[2] = {
19802 { instruction , 0 , 0 , 32,
19803 0xfc007fff, 0xa0000a3b, &NMD::SQRT_S , 0,
19804 CP1_ }, /* SQRT.S */
19805 { instruction , 0 , 0 , 32,
19806 0xfc007fff, 0xa0004a3b, &NMD::SQRT_D , 0,
19807 CP1_ }, /* SQRT.D */
19808};
19809
19810
19811NMD::Pool NMD::FLOOR_W_fmt[2] = {
19812 { instruction , 0 , 0 , 32,
19813 0xfc007fff, 0xa0000b3b, &NMD::FLOOR_W_S , 0,
19814 CP1_ }, /* FLOOR.W.S */
19815 { instruction , 0 , 0 , 32,
19816 0xfc007fff, 0xa0004b3b, &NMD::FLOOR_W_D , 0,
19817 CP1_ }, /* FLOOR.W.D */
19818};
19819
19820
19821NMD::Pool NMD::RECIP_fmt[2] = {
19822 { instruction , 0 , 0 , 32,
19823 0xfc007fff, 0xa000123b, &NMD::RECIP_S , 0,
19824 CP1_ }, /* RECIP.S */
19825 { instruction , 0 , 0 , 32,
19826 0xfc007fff, 0xa000523b, &NMD::RECIP_D , 0,
19827 CP1_ }, /* RECIP.D */
19828};
19829
19830
19831NMD::Pool NMD::CEIL_L_fmt[2] = {
19832 { instruction , 0 , 0 , 32,
19833 0xfc007fff, 0xa000133b, &NMD::CEIL_L_S , 0,
19834 CP1_ }, /* CEIL.L.S */
19835 { instruction , 0 , 0 , 32,
19836 0xfc007fff, 0xa000533b, &NMD::CEIL_L_D , 0,
19837 CP1_ }, /* CEIL.L.D */
19838};
19839
19840
19841NMD::Pool NMD::CEIL_W_fmt[2] = {
19842 { instruction , 0 , 0 , 32,
19843 0xfc007fff, 0xa0001b3b, &NMD::CEIL_W_S , 0,
19844 CP1_ }, /* CEIL.W.S */
19845 { instruction , 0 , 0 , 32,
19846 0xfc007fff, 0xa0005b3b, &NMD::CEIL_W_D , 0,
19847 CP1_ }, /* CEIL.W.D */
19848};
19849
19850
19851NMD::Pool NMD::TRUNC_L_fmt[2] = {
19852 { instruction , 0 , 0 , 32,
19853 0xfc007fff, 0xa000233b, &NMD::TRUNC_L_S , 0,
19854 CP1_ }, /* TRUNC.L.S */
19855 { instruction , 0 , 0 , 32,
19856 0xfc007fff, 0xa000633b, &NMD::TRUNC_L_D , 0,
19857 CP1_ }, /* TRUNC.L.D */
19858};
19859
19860
19861NMD::Pool NMD::TRUNC_W_fmt[2] = {
19862 { instruction , 0 , 0 , 32,
19863 0xfc007fff, 0xa0002b3b, &NMD::TRUNC_W_S , 0,
19864 CP1_ }, /* TRUNC.W.S */
19865 { instruction , 0 , 0 , 32,
19866 0xfc007fff, 0xa0006b3b, &NMD::TRUNC_W_D , 0,
19867 CP1_ }, /* TRUNC.W.D */
19868};
19869
19870
19871NMD::Pool NMD::ROUND_L_fmt[2] = {
19872 { instruction , 0 , 0 , 32,
19873 0xfc007fff, 0xa000333b, &NMD::ROUND_L_S , 0,
19874 CP1_ }, /* ROUND.L.S */
19875 { instruction , 0 , 0 , 32,
19876 0xfc007fff, 0xa000733b, &NMD::ROUND_L_D , 0,
19877 CP1_ }, /* ROUND.L.D */
19878};
19879
19880
19881NMD::Pool NMD::ROUND_W_fmt[2] = {
19882 { instruction , 0 , 0 , 32,
19883 0xfc007fff, 0xa0003b3b, &NMD::ROUND_W_S , 0,
19884 CP1_ }, /* ROUND.W.S */
19885 { instruction , 0 , 0 , 32,
19886 0xfc007fff, 0xa0007b3b, &NMD::ROUND_W_D , 0,
19887 CP1_ }, /* ROUND.W.D */
19888};
19889
19890
19891NMD::Pool NMD::POOL32Fxf_0[64] = {
19892 { reserved_block , 0 , 0 , 32,
19893 0xfc003fff, 0xa000003b, 0 , 0,
19894 CP1_ }, /* POOL32Fxf_0~*(0) */
19895 { pool , CVT_L_fmt , 2 , 32,
19896 0xfc003fff, 0xa000013b, 0 , 0,
19897 CP1_ }, /* CVT.L.fmt */
19898 { pool , RSQRT_fmt , 2 , 32,
19899 0xfc003fff, 0xa000023b, 0 , 0,
19900 CP1_ }, /* RSQRT.fmt */
19901 { pool , FLOOR_L_fmt , 2 , 32,
19902 0xfc003fff, 0xa000033b, 0 , 0,
19903 CP1_ }, /* FLOOR.L.fmt */
19904 { reserved_block , 0 , 0 , 32,
19905 0xfc003fff, 0xa000043b, 0 , 0,
19906 CP1_ }, /* POOL32Fxf_0~*(4) */
19907 { reserved_block , 0 , 0 , 32,
19908 0xfc003fff, 0xa000053b, 0 , 0,
19909 CP1_ }, /* POOL32Fxf_0~*(5) */
19910 { reserved_block , 0 , 0 , 32,
19911 0xfc003fff, 0xa000063b, 0 , 0,
19912 CP1_ }, /* POOL32Fxf_0~*(6) */
19913 { reserved_block , 0 , 0 , 32,
19914 0xfc003fff, 0xa000073b, 0 , 0,
19915 CP1_ }, /* POOL32Fxf_0~*(7) */
19916 { reserved_block , 0 , 0 , 32,
19917 0xfc003fff, 0xa000083b, 0 , 0,
19918 CP1_ }, /* POOL32Fxf_0~*(8) */
19919 { pool , CVT_W_fmt , 2 , 32,
19920 0xfc003fff, 0xa000093b, 0 , 0,
19921 CP1_ }, /* CVT.W.fmt */
19922 { pool , SQRT_fmt , 2 , 32,
19923 0xfc003fff, 0xa0000a3b, 0 , 0,
19924 CP1_ }, /* SQRT.fmt */
19925 { pool , FLOOR_W_fmt , 2 , 32,
19926 0xfc003fff, 0xa0000b3b, 0 , 0,
19927 CP1_ }, /* FLOOR.W.fmt */
19928 { reserved_block , 0 , 0 , 32,
19929 0xfc003fff, 0xa0000c3b, 0 , 0,
19930 CP1_ }, /* POOL32Fxf_0~*(12) */
19931 { reserved_block , 0 , 0 , 32,
19932 0xfc003fff, 0xa0000d3b, 0 , 0,
19933 CP1_ }, /* POOL32Fxf_0~*(13) */
19934 { reserved_block , 0 , 0 , 32,
19935 0xfc003fff, 0xa0000e3b, 0 , 0,
19936 CP1_ }, /* POOL32Fxf_0~*(14) */
19937 { reserved_block , 0 , 0 , 32,
19938 0xfc003fff, 0xa0000f3b, 0 , 0,
19939 CP1_ }, /* POOL32Fxf_0~*(15) */
19940 { instruction , 0 , 0 , 32,
19941 0xfc003fff, 0xa000103b, &NMD::CFC1 , 0,
19942 CP1_ }, /* CFC1 */
19943 { reserved_block , 0 , 0 , 32,
19944 0xfc003fff, 0xa000113b, 0 , 0,
19945 CP1_ }, /* POOL32Fxf_0~*(17) */
19946 { pool , RECIP_fmt , 2 , 32,
19947 0xfc003fff, 0xa000123b, 0 , 0,
19948 CP1_ }, /* RECIP.fmt */
19949 { pool , CEIL_L_fmt , 2 , 32,
19950 0xfc003fff, 0xa000133b, 0 , 0,
19951 CP1_ }, /* CEIL.L.fmt */
19952 { reserved_block , 0 , 0 , 32,
19953 0xfc003fff, 0xa000143b, 0 , 0,
19954 CP1_ }, /* POOL32Fxf_0~*(20) */
19955 { reserved_block , 0 , 0 , 32,
19956 0xfc003fff, 0xa000153b, 0 , 0,
19957 CP1_ }, /* POOL32Fxf_0~*(21) */
19958 { reserved_block , 0 , 0 , 32,
19959 0xfc003fff, 0xa000163b, 0 , 0,
19960 CP1_ }, /* POOL32Fxf_0~*(22) */
19961 { reserved_block , 0 , 0 , 32,
19962 0xfc003fff, 0xa000173b, 0 , 0,
19963 CP1_ }, /* POOL32Fxf_0~*(23) */
19964 { instruction , 0 , 0 , 32,
19965 0xfc003fff, 0xa000183b, &NMD::CTC1 , 0,
19966 CP1_ }, /* CTC1 */
19967 { reserved_block , 0 , 0 , 32,
19968 0xfc003fff, 0xa000193b, 0 , 0,
19969 CP1_ }, /* POOL32Fxf_0~*(25) */
19970 { reserved_block , 0 , 0 , 32,
19971 0xfc003fff, 0xa0001a3b, 0 , 0,
19972 CP1_ }, /* POOL32Fxf_0~*(26) */
19973 { pool , CEIL_W_fmt , 2 , 32,
19974 0xfc003fff, 0xa0001b3b, 0 , 0,
19975 CP1_ }, /* CEIL.W.fmt */
19976 { reserved_block , 0 , 0 , 32,
19977 0xfc003fff, 0xa0001c3b, 0 , 0,
19978 CP1_ }, /* POOL32Fxf_0~*(28) */
19979 { reserved_block , 0 , 0 , 32,
19980 0xfc003fff, 0xa0001d3b, 0 , 0,
19981 CP1_ }, /* POOL32Fxf_0~*(29) */
19982 { reserved_block , 0 , 0 , 32,
19983 0xfc003fff, 0xa0001e3b, 0 , 0,
19984 CP1_ }, /* POOL32Fxf_0~*(30) */
19985 { reserved_block , 0 , 0 , 32,
19986 0xfc003fff, 0xa0001f3b, 0 , 0,
19987 CP1_ }, /* POOL32Fxf_0~*(31) */
19988 { instruction , 0 , 0 , 32,
19989 0xfc003fff, 0xa000203b, &NMD::MFC1 , 0,
19990 CP1_ }, /* MFC1 */
19991 { instruction , 0 , 0 , 32,
19992 0xfc003fff, 0xa000213b, &NMD::CVT_S_PL , 0,
19993 CP1_ }, /* CVT.S.PL */
19994 { reserved_block , 0 , 0 , 32,
19995 0xfc003fff, 0xa000223b, 0 , 0,
19996 CP1_ }, /* POOL32Fxf_0~*(34) */
19997 { pool , TRUNC_L_fmt , 2 , 32,
19998 0xfc003fff, 0xa000233b, 0 , 0,
19999 CP1_ }, /* TRUNC.L.fmt */
20000 { instruction , 0 , 0 , 32,
20001 0xfc003fff, 0xa000243b, &NMD::DMFC1 , 0,
20002 CP1_ | MIPS64_ }, /* DMFC1 */
20003 { reserved_block , 0 , 0 , 32,
20004 0xfc003fff, 0xa000253b, 0 , 0,
20005 CP1_ }, /* POOL32Fxf_0~*(37) */
20006 { reserved_block , 0 , 0 , 32,
20007 0xfc003fff, 0xa000263b, 0 , 0,
20008 CP1_ }, /* POOL32Fxf_0~*(38) */
20009 { reserved_block , 0 , 0 , 32,
20010 0xfc003fff, 0xa000273b, 0 , 0,
20011 CP1_ }, /* POOL32Fxf_0~*(39) */
20012 { instruction , 0 , 0 , 32,
20013 0xfc003fff, 0xa000283b, &NMD::MTC1 , 0,
20014 CP1_ }, /* MTC1 */
20015 { instruction , 0 , 0 , 32,
20016 0xfc003fff, 0xa000293b, &NMD::CVT_S_PU , 0,
20017 CP1_ }, /* CVT.S.PU */
20018 { reserved_block , 0 , 0 , 32,
20019 0xfc003fff, 0xa0002a3b, 0 , 0,
20020 CP1_ }, /* POOL32Fxf_0~*(42) */
20021 { pool , TRUNC_W_fmt , 2 , 32,
20022 0xfc003fff, 0xa0002b3b, 0 , 0,
20023 CP1_ }, /* TRUNC.W.fmt */
20024 { instruction , 0 , 0 , 32,
20025 0xfc003fff, 0xa0002c3b, &NMD::DMTC1 , 0,
20026 CP1_ | MIPS64_ }, /* DMTC1 */
20027 { reserved_block , 0 , 0 , 32,
20028 0xfc003fff, 0xa0002d3b, 0 , 0,
20029 CP1_ }, /* POOL32Fxf_0~*(45) */
20030 { reserved_block , 0 , 0 , 32,
20031 0xfc003fff, 0xa0002e3b, 0 , 0,
20032 CP1_ }, /* POOL32Fxf_0~*(46) */
20033 { reserved_block , 0 , 0 , 32,
20034 0xfc003fff, 0xa0002f3b, 0 , 0,
20035 CP1_ }, /* POOL32Fxf_0~*(47) */
20036 { instruction , 0 , 0 , 32,
20037 0xfc003fff, 0xa000303b, &NMD::MFHC1 , 0,
20038 CP1_ }, /* MFHC1 */
20039 { reserved_block , 0 , 0 , 32,
20040 0xfc003fff, 0xa000313b, 0 , 0,
20041 CP1_ }, /* POOL32Fxf_0~*(49) */
20042 { reserved_block , 0 , 0 , 32,
20043 0xfc003fff, 0xa000323b, 0 , 0,
20044 CP1_ }, /* POOL32Fxf_0~*(50) */
20045 { pool , ROUND_L_fmt , 2 , 32,
20046 0xfc003fff, 0xa000333b, 0 , 0,
20047 CP1_ }, /* ROUND.L.fmt */
20048 { reserved_block , 0 , 0 , 32,
20049 0xfc003fff, 0xa000343b, 0 , 0,
20050 CP1_ }, /* POOL32Fxf_0~*(52) */
20051 { reserved_block , 0 , 0 , 32,
20052 0xfc003fff, 0xa000353b, 0 , 0,
20053 CP1_ }, /* POOL32Fxf_0~*(53) */
20054 { reserved_block , 0 , 0 , 32,
20055 0xfc003fff, 0xa000363b, 0 , 0,
20056 CP1_ }, /* POOL32Fxf_0~*(54) */
20057 { reserved_block , 0 , 0 , 32,
20058 0xfc003fff, 0xa000373b, 0 , 0,
20059 CP1_ }, /* POOL32Fxf_0~*(55) */
20060 { instruction , 0 , 0 , 32,
20061 0xfc003fff, 0xa000383b, &NMD::MTHC1 , 0,
20062 CP1_ }, /* MTHC1 */
20063 { reserved_block , 0 , 0 , 32,
20064 0xfc003fff, 0xa000393b, 0 , 0,
20065 CP1_ }, /* POOL32Fxf_0~*(57) */
20066 { reserved_block , 0 , 0 , 32,
20067 0xfc003fff, 0xa0003a3b, 0 , 0,
20068 CP1_ }, /* POOL32Fxf_0~*(58) */
20069 { pool , ROUND_W_fmt , 2 , 32,
20070 0xfc003fff, 0xa0003b3b, 0 , 0,
20071 CP1_ }, /* ROUND.W.fmt */
20072 { reserved_block , 0 , 0 , 32,
20073 0xfc003fff, 0xa0003c3b, 0 , 0,
20074 CP1_ }, /* POOL32Fxf_0~*(60) */
20075 { reserved_block , 0 , 0 , 32,
20076 0xfc003fff, 0xa0003d3b, 0 , 0,
20077 CP1_ }, /* POOL32Fxf_0~*(61) */
20078 { reserved_block , 0 , 0 , 32,
20079 0xfc003fff, 0xa0003e3b, 0 , 0,
20080 CP1_ }, /* POOL32Fxf_0~*(62) */
20081 { reserved_block , 0 , 0 , 32,
20082 0xfc003fff, 0xa0003f3b, 0 , 0,
20083 CP1_ }, /* POOL32Fxf_0~*(63) */
20084};
20085
20086
20087NMD::Pool NMD::MOV_fmt[4] = {
20088 { instruction , 0 , 0 , 32,
20089 0xfc007fff, 0xa000007b, &NMD::MOV_S , 0,
20090 CP1_ }, /* MOV.S */
20091 { instruction , 0 , 0 , 32,
20092 0xfc007fff, 0xa000207b, &NMD::MOV_D , 0,
20093 CP1_ }, /* MOV.D */
20094 { reserved_block , 0 , 0 , 32,
20095 0xfc007fff, 0xa000407b, 0 , 0,
20096 CP1_ }, /* MOV.fmt~*(2) */
20097 { reserved_block , 0 , 0 , 32,
20098 0xfc007fff, 0xa000607b, 0 , 0,
20099 CP1_ }, /* MOV.fmt~*(3) */
20100};
20101
20102
20103NMD::Pool NMD::ABS_fmt[4] = {
20104 { instruction , 0 , 0 , 32,
20105 0xfc007fff, 0xa000037b, &NMD::ABS_S , 0,
20106 CP1_ }, /* ABS.S */
20107 { instruction , 0 , 0 , 32,
20108 0xfc007fff, 0xa000237b, &NMD::ABS_D , 0,
20109 CP1_ }, /* ABS.D */
20110 { reserved_block , 0 , 0 , 32,
20111 0xfc007fff, 0xa000437b, 0 , 0,
20112 CP1_ }, /* ABS.fmt~*(2) */
20113 { reserved_block , 0 , 0 , 32,
20114 0xfc007fff, 0xa000637b, 0 , 0,
20115 CP1_ }, /* ABS.fmt~*(3) */
20116};
20117
20118
20119NMD::Pool NMD::NEG_fmt[4] = {
20120 { instruction , 0 , 0 , 32,
20121 0xfc007fff, 0xa0000b7b, &NMD::NEG_S , 0,
20122 CP1_ }, /* NEG.S */
20123 { instruction , 0 , 0 , 32,
20124 0xfc007fff, 0xa0002b7b, &NMD::NEG_D , 0,
20125 CP1_ }, /* NEG.D */
20126 { reserved_block , 0 , 0 , 32,
20127 0xfc007fff, 0xa0004b7b, 0 , 0,
20128 CP1_ }, /* NEG.fmt~*(2) */
20129 { reserved_block , 0 , 0 , 32,
20130 0xfc007fff, 0xa0006b7b, 0 , 0,
20131 CP1_ }, /* NEG.fmt~*(3) */
20132};
20133
20134
20135NMD::Pool NMD::CVT_D_fmt[4] = {
20136 { instruction , 0 , 0 , 32,
20137 0xfc007fff, 0xa000137b, &NMD::CVT_D_S , 0,
20138 CP1_ }, /* CVT.D.S */
20139 { instruction , 0 , 0 , 32,
20140 0xfc007fff, 0xa000337b, &NMD::CVT_D_W , 0,
20141 CP1_ }, /* CVT.D.W */
20142 { instruction , 0 , 0 , 32,
20143 0xfc007fff, 0xa000537b, &NMD::CVT_D_L , 0,
20144 CP1_ }, /* CVT.D.L */
20145 { reserved_block , 0 , 0 , 32,
20146 0xfc007fff, 0xa000737b, 0 , 0,
20147 CP1_ }, /* CVT.D.fmt~*(3) */
20148};
20149
20150
20151NMD::Pool NMD::CVT_S_fmt[4] = {
20152 { instruction , 0 , 0 , 32,
20153 0xfc007fff, 0xa0001b7b, &NMD::CVT_S_D , 0,
20154 CP1_ }, /* CVT.S.D */
20155 { instruction , 0 , 0 , 32,
20156 0xfc007fff, 0xa0003b7b, &NMD::CVT_S_W , 0,
20157 CP1_ }, /* CVT.S.W */
20158 { instruction , 0 , 0 , 32,
20159 0xfc007fff, 0xa0005b7b, &NMD::CVT_S_L , 0,
20160 CP1_ }, /* CVT.S.L */
20161 { reserved_block , 0 , 0 , 32,
20162 0xfc007fff, 0xa0007b7b, 0 , 0,
20163 CP1_ }, /* CVT.S.fmt~*(3) */
20164};
20165
20166
20167NMD::Pool NMD::POOL32Fxf_1[32] = {
20168 { pool , MOV_fmt , 4 , 32,
20169 0xfc001fff, 0xa000007b, 0 , 0,
20170 CP1_ }, /* MOV.fmt */
20171 { reserved_block , 0 , 0 , 32,
20172 0xfc001fff, 0xa000017b, 0 , 0,
20173 CP1_ }, /* POOL32Fxf_1~*(1) */
20174 { reserved_block , 0 , 0 , 32,
20175 0xfc001fff, 0xa000027b, 0 , 0,
20176 CP1_ }, /* POOL32Fxf_1~*(2) */
20177 { pool , ABS_fmt , 4 , 32,
20178 0xfc001fff, 0xa000037b, 0 , 0,
20179 CP1_ }, /* ABS.fmt */
20180 { reserved_block , 0 , 0 , 32,
20181 0xfc001fff, 0xa000047b, 0 , 0,
20182 CP1_ }, /* POOL32Fxf_1~*(4) */
20183 { reserved_block , 0 , 0 , 32,
20184 0xfc001fff, 0xa000057b, 0 , 0,
20185 CP1_ }, /* POOL32Fxf_1~*(5) */
20186 { reserved_block , 0 , 0 , 32,
20187 0xfc001fff, 0xa000067b, 0 , 0,
20188 CP1_ }, /* POOL32Fxf_1~*(6) */
20189 { reserved_block , 0 , 0 , 32,
20190 0xfc001fff, 0xa000077b, 0 , 0,
20191 CP1_ }, /* POOL32Fxf_1~*(7) */
20192 { reserved_block , 0 , 0 , 32,
20193 0xfc001fff, 0xa000087b, 0 , 0,
20194 CP1_ }, /* POOL32Fxf_1~*(8) */
20195 { reserved_block , 0 , 0 , 32,
20196 0xfc001fff, 0xa000097b, 0 , 0,
20197 CP1_ }, /* POOL32Fxf_1~*(9) */
20198 { reserved_block , 0 , 0 , 32,
20199 0xfc001fff, 0xa0000a7b, 0 , 0,
20200 CP1_ }, /* POOL32Fxf_1~*(10) */
20201 { pool , NEG_fmt , 4 , 32,
20202 0xfc001fff, 0xa0000b7b, 0 , 0,
20203 CP1_ }, /* NEG.fmt */
20204 { reserved_block , 0 , 0 , 32,
20205 0xfc001fff, 0xa0000c7b, 0 , 0,
20206 CP1_ }, /* POOL32Fxf_1~*(12) */
20207 { reserved_block , 0 , 0 , 32,
20208 0xfc001fff, 0xa0000d7b, 0 , 0,
20209 CP1_ }, /* POOL32Fxf_1~*(13) */
20210 { reserved_block , 0 , 0 , 32,
20211 0xfc001fff, 0xa0000e7b, 0 , 0,
20212 CP1_ }, /* POOL32Fxf_1~*(14) */
20213 { reserved_block , 0 , 0 , 32,
20214 0xfc001fff, 0xa0000f7b, 0 , 0,
20215 CP1_ }, /* POOL32Fxf_1~*(15) */
20216 { reserved_block , 0 , 0 , 32,
20217 0xfc001fff, 0xa000107b, 0 , 0,
20218 CP1_ }, /* POOL32Fxf_1~*(16) */
20219 { reserved_block , 0 , 0 , 32,
20220 0xfc001fff, 0xa000117b, 0 , 0,
20221 CP1_ }, /* POOL32Fxf_1~*(17) */
20222 { reserved_block , 0 , 0 , 32,
20223 0xfc001fff, 0xa000127b, 0 , 0,
20224 CP1_ }, /* POOL32Fxf_1~*(18) */
20225 { pool , CVT_D_fmt , 4 , 32,
20226 0xfc001fff, 0xa000137b, 0 , 0,
20227 CP1_ }, /* CVT.D.fmt */
20228 { reserved_block , 0 , 0 , 32,
20229 0xfc001fff, 0xa000147b, 0 , 0,
20230 CP1_ }, /* POOL32Fxf_1~*(20) */
20231 { reserved_block , 0 , 0 , 32,
20232 0xfc001fff, 0xa000157b, 0 , 0,
20233 CP1_ }, /* POOL32Fxf_1~*(21) */
20234 { reserved_block , 0 , 0 , 32,
20235 0xfc001fff, 0xa000167b, 0 , 0,
20236 CP1_ }, /* POOL32Fxf_1~*(22) */
20237 { reserved_block , 0 , 0 , 32,
20238 0xfc001fff, 0xa000177b, 0 , 0,
20239 CP1_ }, /* POOL32Fxf_1~*(23) */
20240 { reserved_block , 0 , 0 , 32,
20241 0xfc001fff, 0xa000187b, 0 , 0,
20242 CP1_ }, /* POOL32Fxf_1~*(24) */
20243 { reserved_block , 0 , 0 , 32,
20244 0xfc001fff, 0xa000197b, 0 , 0,
20245 CP1_ }, /* POOL32Fxf_1~*(25) */
20246 { reserved_block , 0 , 0 , 32,
20247 0xfc001fff, 0xa0001a7b, 0 , 0,
20248 CP1_ }, /* POOL32Fxf_1~*(26) */
20249 { pool , CVT_S_fmt , 4 , 32,
20250 0xfc001fff, 0xa0001b7b, 0 , 0,
20251 CP1_ }, /* CVT.S.fmt */
20252 { reserved_block , 0 , 0 , 32,
20253 0xfc001fff, 0xa0001c7b, 0 , 0,
20254 CP1_ }, /* POOL32Fxf_1~*(28) */
20255 { reserved_block , 0 , 0 , 32,
20256 0xfc001fff, 0xa0001d7b, 0 , 0,
20257 CP1_ }, /* POOL32Fxf_1~*(29) */
20258 { reserved_block , 0 , 0 , 32,
20259 0xfc001fff, 0xa0001e7b, 0 , 0,
20260 CP1_ }, /* POOL32Fxf_1~*(30) */
20261 { reserved_block , 0 , 0 , 32,
20262 0xfc001fff, 0xa0001f7b, 0 , 0,
20263 CP1_ }, /* POOL32Fxf_1~*(31) */
20264};
20265
20266
20267NMD::Pool NMD::POOL32Fxf[4] = {
20268 { pool , POOL32Fxf_0 , 64 , 32,
20269 0xfc0000ff, 0xa000003b, 0 , 0,
20270 CP1_ }, /* POOL32Fxf_0 */
20271 { pool , POOL32Fxf_1 , 32 , 32,
20272 0xfc0000ff, 0xa000007b, 0 , 0,
20273 CP1_ }, /* POOL32Fxf_1 */
20274 { reserved_block , 0 , 0 , 32,
20275 0xfc0000ff, 0xa00000bb, 0 , 0,
20276 CP1_ }, /* POOL32Fxf~*(2) */
20277 { reserved_block , 0 , 0 , 32,
20278 0xfc0000ff, 0xa00000fb, 0 , 0,
20279 CP1_ }, /* POOL32Fxf~*(3) */
20280};
20281
20282
20283NMD::Pool NMD::POOL32F_3[8] = {
20284 { pool , MIN_fmt , 2 , 32,
20285 0xfc00003f, 0xa0000003, 0 , 0,
20286 CP1_ }, /* MIN.fmt */
20287 { pool , MAX_fmt , 2 , 32,
20288 0xfc00003f, 0xa000000b, 0 , 0,
20289 CP1_ }, /* MAX.fmt */
20290 { reserved_block , 0 , 0 , 32,
20291 0xfc00003f, 0xa0000013, 0 , 0,
20292 CP1_ }, /* POOL32F_3~*(2) */
20293 { reserved_block , 0 , 0 , 32,
20294 0xfc00003f, 0xa000001b, 0 , 0,
20295 CP1_ }, /* POOL32F_3~*(3) */
20296 { pool , MINA_fmt , 2 , 32,
20297 0xfc00003f, 0xa0000023, 0 , 0,
20298 CP1_ }, /* MINA.fmt */
20299 { pool , MAXA_fmt , 2 , 32,
20300 0xfc00003f, 0xa000002b, 0 , 0,
20301 CP1_ }, /* MAXA.fmt */
20302 { reserved_block , 0 , 0 , 32,
20303 0xfc00003f, 0xa0000033, 0 , 0,
20304 CP1_ }, /* POOL32F_3~*(6) */
20305 { pool , POOL32Fxf , 4 , 32,
20306 0xfc00003f, 0xa000003b, 0 , 0,
20307 CP1_ }, /* POOL32Fxf */
20308};
20309
20310
20311NMD::Pool NMD::CMP_condn_S[32] = {
20312 { instruction , 0 , 0 , 32,
20313 0xfc0007ff, 0xa0000005, &NMD::CMP_AF_S , 0,
20314 CP1_ }, /* CMP.AF.S */
20315 { instruction , 0 , 0 , 32,
20316 0xfc0007ff, 0xa0000045, &NMD::CMP_UN_S , 0,
20317 CP1_ }, /* CMP.UN.S */
20318 { instruction , 0 , 0 , 32,
20319 0xfc0007ff, 0xa0000085, &NMD::CMP_EQ_S , 0,
20320 CP1_ }, /* CMP.EQ.S */
20321 { instruction , 0 , 0 , 32,
20322 0xfc0007ff, 0xa00000c5, &NMD::CMP_UEQ_S , 0,
20323 CP1_ }, /* CMP.UEQ.S */
20324 { instruction , 0 , 0 , 32,
20325 0xfc0007ff, 0xa0000105, &NMD::CMP_LT_S , 0,
20326 CP1_ }, /* CMP.LT.S */
20327 { instruction , 0 , 0 , 32,
20328 0xfc0007ff, 0xa0000145, &NMD::CMP_ULT_S , 0,
20329 CP1_ }, /* CMP.ULT.S */
20330 { instruction , 0 , 0 , 32,
20331 0xfc0007ff, 0xa0000185, &NMD::CMP_LE_S , 0,
20332 CP1_ }, /* CMP.LE.S */
20333 { instruction , 0 , 0 , 32,
20334 0xfc0007ff, 0xa00001c5, &NMD::CMP_ULE_S , 0,
20335 CP1_ }, /* CMP.ULE.S */
20336 { instruction , 0 , 0 , 32,
20337 0xfc0007ff, 0xa0000205, &NMD::CMP_SAF_S , 0,
20338 CP1_ }, /* CMP.SAF.S */
20339 { instruction , 0 , 0 , 32,
20340 0xfc0007ff, 0xa0000245, &NMD::CMP_SUN_S , 0,
20341 CP1_ }, /* CMP.SUN.S */
20342 { instruction , 0 , 0 , 32,
20343 0xfc0007ff, 0xa0000285, &NMD::CMP_SEQ_S , 0,
20344 CP1_ }, /* CMP.SEQ.S */
20345 { instruction , 0 , 0 , 32,
20346 0xfc0007ff, 0xa00002c5, &NMD::CMP_SUEQ_S , 0,
20347 CP1_ }, /* CMP.SUEQ.S */
20348 { instruction , 0 , 0 , 32,
20349 0xfc0007ff, 0xa0000305, &NMD::CMP_SLT_S , 0,
20350 CP1_ }, /* CMP.SLT.S */
20351 { instruction , 0 , 0 , 32,
20352 0xfc0007ff, 0xa0000345, &NMD::CMP_SULT_S , 0,
20353 CP1_ }, /* CMP.SULT.S */
20354 { instruction , 0 , 0 , 32,
20355 0xfc0007ff, 0xa0000385, &NMD::CMP_SLE_S , 0,
20356 CP1_ }, /* CMP.SLE.S */
20357 { instruction , 0 , 0 , 32,
20358 0xfc0007ff, 0xa00003c5, &NMD::CMP_SULE_S , 0,
20359 CP1_ }, /* CMP.SULE.S */
20360 { reserved_block , 0 , 0 , 32,
20361 0xfc0007ff, 0xa0000405, 0 , 0,
20362 CP1_ }, /* CMP.condn.S~*(16) */
20363 { instruction , 0 , 0 , 32,
20364 0xfc0007ff, 0xa0000445, &NMD::CMP_OR_S , 0,
20365 CP1_ }, /* CMP.OR.S */
20366 { instruction , 0 , 0 , 32,
20367 0xfc0007ff, 0xa0000485, &NMD::CMP_UNE_S , 0,
20368 CP1_ }, /* CMP.UNE.S */
20369 { instruction , 0 , 0 , 32,
20370 0xfc0007ff, 0xa00004c5, &NMD::CMP_NE_S , 0,
20371 CP1_ }, /* CMP.NE.S */
20372 { reserved_block , 0 , 0 , 32,
20373 0xfc0007ff, 0xa0000505, 0 , 0,
20374 CP1_ }, /* CMP.condn.S~*(20) */
20375 { reserved_block , 0 , 0 , 32,
20376 0xfc0007ff, 0xa0000545, 0 , 0,
20377 CP1_ }, /* CMP.condn.S~*(21) */
20378 { reserved_block , 0 , 0 , 32,
20379 0xfc0007ff, 0xa0000585, 0 , 0,
20380 CP1_ }, /* CMP.condn.S~*(22) */
20381 { reserved_block , 0 , 0 , 32,
20382 0xfc0007ff, 0xa00005c5, 0 , 0,
20383 CP1_ }, /* CMP.condn.S~*(23) */
20384 { reserved_block , 0 , 0 , 32,
20385 0xfc0007ff, 0xa0000605, 0 , 0,
20386 CP1_ }, /* CMP.condn.S~*(24) */
20387 { instruction , 0 , 0 , 32,
20388 0xfc0007ff, 0xa0000645, &NMD::CMP_SOR_S , 0,
20389 CP1_ }, /* CMP.SOR.S */
20390 { instruction , 0 , 0 , 32,
20391 0xfc0007ff, 0xa0000685, &NMD::CMP_SUNE_S , 0,
20392 CP1_ }, /* CMP.SUNE.S */
20393 { instruction , 0 , 0 , 32,
20394 0xfc0007ff, 0xa00006c5, &NMD::CMP_SNE_S , 0,
20395 CP1_ }, /* CMP.SNE.S */
20396 { reserved_block , 0 , 0 , 32,
20397 0xfc0007ff, 0xa0000705, 0 , 0,
20398 CP1_ }, /* CMP.condn.S~*(28) */
20399 { reserved_block , 0 , 0 , 32,
20400 0xfc0007ff, 0xa0000745, 0 , 0,
20401 CP1_ }, /* CMP.condn.S~*(29) */
20402 { reserved_block , 0 , 0 , 32,
20403 0xfc0007ff, 0xa0000785, 0 , 0,
20404 CP1_ }, /* CMP.condn.S~*(30) */
20405 { reserved_block , 0 , 0 , 32,
20406 0xfc0007ff, 0xa00007c5, 0 , 0,
20407 CP1_ }, /* CMP.condn.S~*(31) */
20408};
20409
20410
20411NMD::Pool NMD::CMP_condn_D[32] = {
20412 { instruction , 0 , 0 , 32,
20413 0xfc0007ff, 0xa0000015, &NMD::CMP_AF_D , 0,
20414 CP1_ }, /* CMP.AF.D */
20415 { instruction , 0 , 0 , 32,
20416 0xfc0007ff, 0xa0000055, &NMD::CMP_UN_D , 0,
20417 CP1_ }, /* CMP.UN.D */
20418 { instruction , 0 , 0 , 32,
20419 0xfc0007ff, 0xa0000095, &NMD::CMP_EQ_D , 0,
20420 CP1_ }, /* CMP.EQ.D */
20421 { instruction , 0 , 0 , 32,
20422 0xfc0007ff, 0xa00000d5, &NMD::CMP_UEQ_D , 0,
20423 CP1_ }, /* CMP.UEQ.D */
20424 { instruction , 0 , 0 , 32,
20425 0xfc0007ff, 0xa0000115, &NMD::CMP_LT_D , 0,
20426 CP1_ }, /* CMP.LT.D */
20427 { instruction , 0 , 0 , 32,
20428 0xfc0007ff, 0xa0000155, &NMD::CMP_ULT_D , 0,
20429 CP1_ }, /* CMP.ULT.D */
20430 { instruction , 0 , 0 , 32,
20431 0xfc0007ff, 0xa0000195, &NMD::CMP_LE_D , 0,
20432 CP1_ }, /* CMP.LE.D */
20433 { instruction , 0 , 0 , 32,
20434 0xfc0007ff, 0xa00001d5, &NMD::CMP_ULE_D , 0,
20435 CP1_ }, /* CMP.ULE.D */
20436 { instruction , 0 , 0 , 32,
20437 0xfc0007ff, 0xa0000215, &NMD::CMP_SAF_D , 0,
20438 CP1_ }, /* CMP.SAF.D */
20439 { instruction , 0 , 0 , 32,
20440 0xfc0007ff, 0xa0000255, &NMD::CMP_SUN_D , 0,
20441 CP1_ }, /* CMP.SUN.D */
20442 { instruction , 0 , 0 , 32,
20443 0xfc0007ff, 0xa0000295, &NMD::CMP_SEQ_D , 0,
20444 CP1_ }, /* CMP.SEQ.D */
20445 { instruction , 0 , 0 , 32,
20446 0xfc0007ff, 0xa00002d5, &NMD::CMP_SUEQ_D , 0,
20447 CP1_ }, /* CMP.SUEQ.D */
20448 { instruction , 0 , 0 , 32,
20449 0xfc0007ff, 0xa0000315, &NMD::CMP_SLT_D , 0,
20450 CP1_ }, /* CMP.SLT.D */
20451 { instruction , 0 , 0 , 32,
20452 0xfc0007ff, 0xa0000355, &NMD::CMP_SULT_D , 0,
20453 CP1_ }, /* CMP.SULT.D */
20454 { instruction , 0 , 0 , 32,
20455 0xfc0007ff, 0xa0000395, &NMD::CMP_SLE_D , 0,
20456 CP1_ }, /* CMP.SLE.D */
20457 { instruction , 0 , 0 , 32,
20458 0xfc0007ff, 0xa00003d5, &NMD::CMP_SULE_D , 0,
20459 CP1_ }, /* CMP.SULE.D */
20460 { reserved_block , 0 , 0 , 32,
20461 0xfc0007ff, 0xa0000415, 0 , 0,
20462 CP1_ }, /* CMP.condn.D~*(16) */
20463 { instruction , 0 , 0 , 32,
20464 0xfc0007ff, 0xa0000455, &NMD::CMP_OR_D , 0,
20465 CP1_ }, /* CMP.OR.D */
20466 { instruction , 0 , 0 , 32,
20467 0xfc0007ff, 0xa0000495, &NMD::CMP_UNE_D , 0,
20468 CP1_ }, /* CMP.UNE.D */
20469 { instruction , 0 , 0 , 32,
20470 0xfc0007ff, 0xa00004d5, &NMD::CMP_NE_D , 0,
20471 CP1_ }, /* CMP.NE.D */
20472 { reserved_block , 0 , 0 , 32,
20473 0xfc0007ff, 0xa0000515, 0 , 0,
20474 CP1_ }, /* CMP.condn.D~*(20) */
20475 { reserved_block , 0 , 0 , 32,
20476 0xfc0007ff, 0xa0000555, 0 , 0,
20477 CP1_ }, /* CMP.condn.D~*(21) */
20478 { reserved_block , 0 , 0 , 32,
20479 0xfc0007ff, 0xa0000595, 0 , 0,
20480 CP1_ }, /* CMP.condn.D~*(22) */
20481 { reserved_block , 0 , 0 , 32,
20482 0xfc0007ff, 0xa00005d5, 0 , 0,
20483 CP1_ }, /* CMP.condn.D~*(23) */
20484 { reserved_block , 0 , 0 , 32,
20485 0xfc0007ff, 0xa0000615, 0 , 0,
20486 CP1_ }, /* CMP.condn.D~*(24) */
20487 { instruction , 0 , 0 , 32,
20488 0xfc0007ff, 0xa0000655, &NMD::CMP_SOR_D , 0,
20489 CP1_ }, /* CMP.SOR.D */
20490 { instruction , 0 , 0 , 32,
20491 0xfc0007ff, 0xa0000695, &NMD::CMP_SUNE_D , 0,
20492 CP1_ }, /* CMP.SUNE.D */
20493 { instruction , 0 , 0 , 32,
20494 0xfc0007ff, 0xa00006d5, &NMD::CMP_SNE_D , 0,
20495 CP1_ }, /* CMP.SNE.D */
20496 { reserved_block , 0 , 0 , 32,
20497 0xfc0007ff, 0xa0000715, 0 , 0,
20498 CP1_ }, /* CMP.condn.D~*(28) */
20499 { reserved_block , 0 , 0 , 32,
20500 0xfc0007ff, 0xa0000755, 0 , 0,
20501 CP1_ }, /* CMP.condn.D~*(29) */
20502 { reserved_block , 0 , 0 , 32,
20503 0xfc0007ff, 0xa0000795, 0 , 0,
20504 CP1_ }, /* CMP.condn.D~*(30) */
20505 { reserved_block , 0 , 0 , 32,
20506 0xfc0007ff, 0xa00007d5, 0 , 0,
20507 CP1_ }, /* CMP.condn.D~*(31) */
20508};
20509
20510
20511NMD::Pool NMD::POOL32F_5[8] = {
20512 { pool , CMP_condn_S , 32 , 32,
20513 0xfc00003f, 0xa0000005, 0 , 0,
20514 CP1_ }, /* CMP.condn.S */
20515 { reserved_block , 0 , 0 , 32,
20516 0xfc00003f, 0xa000000d, 0 , 0,
20517 CP1_ }, /* POOL32F_5~*(1) */
20518 { pool , CMP_condn_D , 32 , 32,
20519 0xfc00003f, 0xa0000015, 0 , 0,
20520 CP1_ }, /* CMP.condn.D */
20521 { reserved_block , 0 , 0 , 32,
20522 0xfc00003f, 0xa000001d, 0 , 0,
20523 CP1_ }, /* POOL32F_5~*(3) */
20524 { reserved_block , 0 , 0 , 32,
20525 0xfc00003f, 0xa0000025, 0 , 0,
20526 CP1_ }, /* POOL32F_5~*(4) */
20527 { reserved_block , 0 , 0 , 32,
20528 0xfc00003f, 0xa000002d, 0 , 0,
20529 CP1_ }, /* POOL32F_5~*(5) */
20530 { reserved_block , 0 , 0 , 32,
20531 0xfc00003f, 0xa0000035, 0 , 0,
20532 CP1_ }, /* POOL32F_5~*(6) */
20533 { reserved_block , 0 , 0 , 32,
20534 0xfc00003f, 0xa000003d, 0 , 0,
20535 CP1_ }, /* POOL32F_5~*(7) */
20536};
20537
20538
20539NMD::Pool NMD::POOL32F[8] = {
20540 { pool , POOL32F_0 , 64 , 32,
20541 0xfc000007, 0xa0000000, 0 , 0,
20542 CP1_ }, /* POOL32F_0 */
20543 { reserved_block , 0 , 0 , 32,
20544 0xfc000007, 0xa0000001, 0 , 0,
20545 CP1_ }, /* POOL32F~*(1) */
20546 { reserved_block , 0 , 0 , 32,
20547 0xfc000007, 0xa0000002, 0 , 0,
20548 CP1_ }, /* POOL32F~*(2) */
20549 { pool , POOL32F_3 , 8 , 32,
20550 0xfc000007, 0xa0000003, 0 , 0,
20551 CP1_ }, /* POOL32F_3 */
20552 { reserved_block , 0 , 0 , 32,
20553 0xfc000007, 0xa0000004, 0 , 0,
20554 CP1_ }, /* POOL32F~*(4) */
20555 { pool , POOL32F_5 , 8 , 32,
20556 0xfc000007, 0xa0000005, 0 , 0,
20557 CP1_ }, /* POOL32F_5 */
20558 { reserved_block , 0 , 0 , 32,
20559 0xfc000007, 0xa0000006, 0 , 0,
20560 CP1_ }, /* POOL32F~*(6) */
20561 { reserved_block , 0 , 0 , 32,
20562 0xfc000007, 0xa0000007, 0 , 0,
20563 CP1_ }, /* POOL32F~*(7) */
20564};
20565
20566
20567NMD::Pool NMD::POOL32S_0[64] = {
20568 { reserved_block , 0 , 0 , 32,
20569 0xfc0001ff, 0xc0000000, 0 , 0,
20570 0x0 }, /* POOL32S_0~*(0) */
20571 { instruction , 0 , 0 , 32,
20572 0xfc0001ff, 0xc0000008, &NMD::DLSA , 0,
20573 MIPS64_ }, /* DLSA */
20574 { instruction , 0 , 0 , 32,
20575 0xfc0001ff, 0xc0000010, &NMD::DSLLV , 0,
20576 MIPS64_ }, /* DSLLV */
20577 { instruction , 0 , 0 , 32,
20578 0xfc0001ff, 0xc0000018, &NMD::DMUL , 0,
20579 MIPS64_ }, /* DMUL */
20580 { reserved_block , 0 , 0 , 32,
20581 0xfc0001ff, 0xc0000020, 0 , 0,
20582 0x0 }, /* POOL32S_0~*(4) */
20583 { reserved_block , 0 , 0 , 32,
20584 0xfc0001ff, 0xc0000028, 0 , 0,
20585 0x0 }, /* POOL32S_0~*(5) */
20586 { reserved_block , 0 , 0 , 32,
20587 0xfc0001ff, 0xc0000030, 0 , 0,
20588 0x0 }, /* POOL32S_0~*(6) */
20589 { reserved_block , 0 , 0 , 32,
20590 0xfc0001ff, 0xc0000038, 0 , 0,
20591 0x0 }, /* POOL32S_0~*(7) */
20592 { reserved_block , 0 , 0 , 32,
20593 0xfc0001ff, 0xc0000040, 0 , 0,
20594 0x0 }, /* POOL32S_0~*(8) */
20595 { reserved_block , 0 , 0 , 32,
20596 0xfc0001ff, 0xc0000048, 0 , 0,
20597 0x0 }, /* POOL32S_0~*(9) */
20598 { instruction , 0 , 0 , 32,
20599 0xfc0001ff, 0xc0000050, &NMD::DSRLV , 0,
20600 MIPS64_ }, /* DSRLV */
20601 { instruction , 0 , 0 , 32,
20602 0xfc0001ff, 0xc0000058, &NMD::DMUH , 0,
20603 MIPS64_ }, /* DMUH */
20604 { reserved_block , 0 , 0 , 32,
20605 0xfc0001ff, 0xc0000060, 0 , 0,
20606 0x0 }, /* POOL32S_0~*(12) */
20607 { reserved_block , 0 , 0 , 32,
20608 0xfc0001ff, 0xc0000068, 0 , 0,
20609 0x0 }, /* POOL32S_0~*(13) */
20610 { reserved_block , 0 , 0 , 32,
20611 0xfc0001ff, 0xc0000070, 0 , 0,
20612 0x0 }, /* POOL32S_0~*(14) */
20613 { reserved_block , 0 , 0 , 32,
20614 0xfc0001ff, 0xc0000078, 0 , 0,
20615 0x0 }, /* POOL32S_0~*(15) */
20616 { reserved_block , 0 , 0 , 32,
20617 0xfc0001ff, 0xc0000080, 0 , 0,
20618 0x0 }, /* POOL32S_0~*(16) */
20619 { reserved_block , 0 , 0 , 32,
20620 0xfc0001ff, 0xc0000088, 0 , 0,
20621 0x0 }, /* POOL32S_0~*(17) */
20622 { instruction , 0 , 0 , 32,
20623 0xfc0001ff, 0xc0000090, &NMD::DSRAV , 0,
20624 MIPS64_ }, /* DSRAV */
20625 { instruction , 0 , 0 , 32,
20626 0xfc0001ff, 0xc0000098, &NMD::DMULU , 0,
20627 MIPS64_ }, /* DMULU */
20628 { reserved_block , 0 , 0 , 32,
20629 0xfc0001ff, 0xc00000a0, 0 , 0,
20630 0x0 }, /* POOL32S_0~*(20) */
20631 { reserved_block , 0 , 0 , 32,
20632 0xfc0001ff, 0xc00000a8, 0 , 0,
20633 0x0 }, /* POOL32S_0~*(21) */
20634 { reserved_block , 0 , 0 , 32,
20635 0xfc0001ff, 0xc00000b0, 0 , 0,
20636 0x0 }, /* POOL32S_0~*(22) */
20637 { reserved_block , 0 , 0 , 32,
20638 0xfc0001ff, 0xc00000b8, 0 , 0,
20639 0x0 }, /* POOL32S_0~*(23) */
20640 { reserved_block , 0 , 0 , 32,
20641 0xfc0001ff, 0xc00000c0, 0 , 0,
20642 0x0 }, /* POOL32S_0~*(24) */
20643 { reserved_block , 0 , 0 , 32,
20644 0xfc0001ff, 0xc00000c8, 0 , 0,
20645 0x0 }, /* POOL32S_0~*(25) */
20646 { instruction , 0 , 0 , 32,
20647 0xfc0001ff, 0xc00000d0, &NMD::DROTRV , 0,
20648 MIPS64_ }, /* DROTRV */
20649 { instruction , 0 , 0 , 32,
20650 0xfc0001ff, 0xc00000d8, &NMD::DMUHU , 0,
20651 MIPS64_ }, /* DMUHU */
20652 { reserved_block , 0 , 0 , 32,
20653 0xfc0001ff, 0xc00000e0, 0 , 0,
20654 0x0 }, /* POOL32S_0~*(28) */
20655 { reserved_block , 0 , 0 , 32,
20656 0xfc0001ff, 0xc00000e8, 0 , 0,
20657 0x0 }, /* POOL32S_0~*(29) */
20658 { reserved_block , 0 , 0 , 32,
20659 0xfc0001ff, 0xc00000f0, 0 , 0,
20660 0x0 }, /* POOL32S_0~*(30) */
20661 { reserved_block , 0 , 0 , 32,
20662 0xfc0001ff, 0xc00000f8, 0 , 0,
20663 0x0 }, /* POOL32S_0~*(31) */
20664 { reserved_block , 0 , 0 , 32,
20665 0xfc0001ff, 0xc0000100, 0 , 0,
20666 0x0 }, /* POOL32S_0~*(32) */
20667 { reserved_block , 0 , 0 , 32,
20668 0xfc0001ff, 0xc0000108, 0 , 0,
20669 0x0 }, /* POOL32S_0~*(33) */
20670 { instruction , 0 , 0 , 32,
20671 0xfc0001ff, 0xc0000110, &NMD::DADD , 0,
20672 MIPS64_ }, /* DADD */
20673 { instruction , 0 , 0 , 32,
20674 0xfc0001ff, 0xc0000118, &NMD::DDIV , 0,
20675 MIPS64_ }, /* DDIV */
20676 { reserved_block , 0 , 0 , 32,
20677 0xfc0001ff, 0xc0000120, 0 , 0,
20678 0x0 }, /* POOL32S_0~*(36) */
20679 { reserved_block , 0 , 0 , 32,
20680 0xfc0001ff, 0xc0000128, 0 , 0,
20681 0x0 }, /* POOL32S_0~*(37) */
20682 { reserved_block , 0 , 0 , 32,
20683 0xfc0001ff, 0xc0000130, 0 , 0,
20684 0x0 }, /* POOL32S_0~*(38) */
20685 { reserved_block , 0 , 0 , 32,
20686 0xfc0001ff, 0xc0000138, 0 , 0,
20687 0x0 }, /* POOL32S_0~*(39) */
20688 { reserved_block , 0 , 0 , 32,
20689 0xfc0001ff, 0xc0000140, 0 , 0,
20690 0x0 }, /* POOL32S_0~*(40) */
20691 { reserved_block , 0 , 0 , 32,
20692 0xfc0001ff, 0xc0000148, 0 , 0,
20693 0x0 }, /* POOL32S_0~*(41) */
20694 { instruction , 0 , 0 , 32,
20695 0xfc0001ff, 0xc0000150, &NMD::DADDU , 0,
20696 MIPS64_ }, /* DADDU */
20697 { instruction , 0 , 0 , 32,
20698 0xfc0001ff, 0xc0000158, &NMD::DMOD , 0,
20699 MIPS64_ }, /* DMOD */
20700 { reserved_block , 0 , 0 , 32,
20701 0xfc0001ff, 0xc0000160, 0 , 0,
20702 0x0 }, /* POOL32S_0~*(44) */
20703 { reserved_block , 0 , 0 , 32,
20704 0xfc0001ff, 0xc0000168, 0 , 0,
20705 0x0 }, /* POOL32S_0~*(45) */
20706 { reserved_block , 0 , 0 , 32,
20707 0xfc0001ff, 0xc0000170, 0 , 0,
20708 0x0 }, /* POOL32S_0~*(46) */
20709 { reserved_block , 0 , 0 , 32,
20710 0xfc0001ff, 0xc0000178, 0 , 0,
20711 0x0 }, /* POOL32S_0~*(47) */
20712 { reserved_block , 0 , 0 , 32,
20713 0xfc0001ff, 0xc0000180, 0 , 0,
20714 0x0 }, /* POOL32S_0~*(48) */
20715 { reserved_block , 0 , 0 , 32,
20716 0xfc0001ff, 0xc0000188, 0 , 0,
20717 0x0 }, /* POOL32S_0~*(49) */
20718 { instruction , 0 , 0 , 32,
20719 0xfc0001ff, 0xc0000190, &NMD::DSUB , 0,
20720 MIPS64_ }, /* DSUB */
20721 { instruction , 0 , 0 , 32,
20722 0xfc0001ff, 0xc0000198, &NMD::DDIVU , 0,
20723 MIPS64_ }, /* DDIVU */
20724 { reserved_block , 0 , 0 , 32,
20725 0xfc0001ff, 0xc00001a0, 0 , 0,
20726 0x0 }, /* POOL32S_0~*(52) */
20727 { reserved_block , 0 , 0 , 32,
20728 0xfc0001ff, 0xc00001a8, 0 , 0,
20729 0x0 }, /* POOL32S_0~*(53) */
20730 { reserved_block , 0 , 0 , 32,
20731 0xfc0001ff, 0xc00001b0, 0 , 0,
20732 0x0 }, /* POOL32S_0~*(54) */
20733 { reserved_block , 0 , 0 , 32,
20734 0xfc0001ff, 0xc00001b8, 0 , 0,
20735 0x0 }, /* POOL32S_0~*(55) */
20736 { reserved_block , 0 , 0 , 32,
20737 0xfc0001ff, 0xc00001c0, 0 , 0,
20738 0x0 }, /* POOL32S_0~*(56) */
20739 { reserved_block , 0 , 0 , 32,
20740 0xfc0001ff, 0xc00001c8, 0 , 0,
20741 0x0 }, /* POOL32S_0~*(57) */
20742 { instruction , 0 , 0 , 32,
20743 0xfc0001ff, 0xc00001d0, &NMD::DSUBU , 0,
20744 MIPS64_ }, /* DSUBU */
20745 { instruction , 0 , 0 , 32,
20746 0xfc0001ff, 0xc00001d8, &NMD::DMODU , 0,
20747 MIPS64_ }, /* DMODU */
20748 { reserved_block , 0 , 0 , 32,
20749 0xfc0001ff, 0xc00001e0, 0 , 0,
20750 0x0 }, /* POOL32S_0~*(60) */
20751 { reserved_block , 0 , 0 , 32,
20752 0xfc0001ff, 0xc00001e8, 0 , 0,
20753 0x0 }, /* POOL32S_0~*(61) */
20754 { reserved_block , 0 , 0 , 32,
20755 0xfc0001ff, 0xc00001f0, 0 , 0,
20756 0x0 }, /* POOL32S_0~*(62) */
20757 { reserved_block , 0 , 0 , 32,
20758 0xfc0001ff, 0xc00001f8, 0 , 0,
20759 0x0 }, /* POOL32S_0~*(63) */
20760};
20761
20762
20763NMD::Pool NMD::POOL32Sxf_4[128] = {
20764 { reserved_block , 0 , 0 , 32,
20765 0xfc00ffff, 0xc000013c, 0 , 0,
20766 0x0 }, /* POOL32Sxf_4~*(0) */
20767 { reserved_block , 0 , 0 , 32,
20768 0xfc00ffff, 0xc000033c, 0 , 0,
20769 0x0 }, /* POOL32Sxf_4~*(1) */
20770 { reserved_block , 0 , 0 , 32,
20771 0xfc00ffff, 0xc000053c, 0 , 0,
20772 0x0 }, /* POOL32Sxf_4~*(2) */
20773 { reserved_block , 0 , 0 , 32,
20774 0xfc00ffff, 0xc000073c, 0 , 0,
20775 0x0 }, /* POOL32Sxf_4~*(3) */
20776 { reserved_block , 0 , 0 , 32,
20777 0xfc00ffff, 0xc000093c, 0 , 0,
20778 0x0 }, /* POOL32Sxf_4~*(4) */
20779 { reserved_block , 0 , 0 , 32,
20780 0xfc00ffff, 0xc0000b3c, 0 , 0,
20781 0x0 }, /* POOL32Sxf_4~*(5) */
20782 { reserved_block , 0 , 0 , 32,
20783 0xfc00ffff, 0xc0000d3c, 0 , 0,
20784 0x0 }, /* POOL32Sxf_4~*(6) */
20785 { reserved_block , 0 , 0 , 32,
20786 0xfc00ffff, 0xc0000f3c, 0 , 0,
20787 0x0 }, /* POOL32Sxf_4~*(7) */
20788 { reserved_block , 0 , 0 , 32,
20789 0xfc00ffff, 0xc000113c, 0 , 0,
20790 0x0 }, /* POOL32Sxf_4~*(8) */
20791 { reserved_block , 0 , 0 , 32,
20792 0xfc00ffff, 0xc000133c, 0 , 0,
20793 0x0 }, /* POOL32Sxf_4~*(9) */
20794 { reserved_block , 0 , 0 , 32,
20795 0xfc00ffff, 0xc000153c, 0 , 0,
20796 0x0 }, /* POOL32Sxf_4~*(10) */
20797 { reserved_block , 0 , 0 , 32,
20798 0xfc00ffff, 0xc000173c, 0 , 0,
20799 0x0 }, /* POOL32Sxf_4~*(11) */
20800 { reserved_block , 0 , 0 , 32,
20801 0xfc00ffff, 0xc000193c, 0 , 0,
20802 0x0 }, /* POOL32Sxf_4~*(12) */
20803 { reserved_block , 0 , 0 , 32,
20804 0xfc00ffff, 0xc0001b3c, 0 , 0,
20805 0x0 }, /* POOL32Sxf_4~*(13) */
20806 { reserved_block , 0 , 0 , 32,
20807 0xfc00ffff, 0xc0001d3c, 0 , 0,
20808 0x0 }, /* POOL32Sxf_4~*(14) */
20809 { reserved_block , 0 , 0 , 32,
20810 0xfc00ffff, 0xc0001f3c, 0 , 0,
20811 0x0 }, /* POOL32Sxf_4~*(15) */
20812 { reserved_block , 0 , 0 , 32,
20813 0xfc00ffff, 0xc000213c, 0 , 0,
20814 0x0 }, /* POOL32Sxf_4~*(16) */
20815 { reserved_block , 0 , 0 , 32,
20816 0xfc00ffff, 0xc000233c, 0 , 0,
20817 0x0 }, /* POOL32Sxf_4~*(17) */
20818 { reserved_block , 0 , 0 , 32,
20819 0xfc00ffff, 0xc000253c, 0 , 0,
20820 0x0 }, /* POOL32Sxf_4~*(18) */
20821 { reserved_block , 0 , 0 , 32,
20822 0xfc00ffff, 0xc000273c, 0 , 0,
20823 0x0 }, /* POOL32Sxf_4~*(19) */
20824 { reserved_block , 0 , 0 , 32,
20825 0xfc00ffff, 0xc000293c, 0 , 0,
20826 0x0 }, /* POOL32Sxf_4~*(20) */
20827 { reserved_block , 0 , 0 , 32,
20828 0xfc00ffff, 0xc0002b3c, 0 , 0,
20829 0x0 }, /* POOL32Sxf_4~*(21) */
20830 { reserved_block , 0 , 0 , 32,
20831 0xfc00ffff, 0xc0002d3c, 0 , 0,
20832 0x0 }, /* POOL32Sxf_4~*(22) */
20833 { reserved_block , 0 , 0 , 32,
20834 0xfc00ffff, 0xc0002f3c, 0 , 0,
20835 0x0 }, /* POOL32Sxf_4~*(23) */
20836 { reserved_block , 0 , 0 , 32,
20837 0xfc00ffff, 0xc000313c, 0 , 0,
20838 0x0 }, /* POOL32Sxf_4~*(24) */
20839 { reserved_block , 0 , 0 , 32,
20840 0xfc00ffff, 0xc000333c, 0 , 0,
20841 0x0 }, /* POOL32Sxf_4~*(25) */
20842 { reserved_block , 0 , 0 , 32,
20843 0xfc00ffff, 0xc000353c, 0 , 0,
20844 0x0 }, /* POOL32Sxf_4~*(26) */
20845 { reserved_block , 0 , 0 , 32,
20846 0xfc00ffff, 0xc000373c, 0 , 0,
20847 0x0 }, /* POOL32Sxf_4~*(27) */
20848 { reserved_block , 0 , 0 , 32,
20849 0xfc00ffff, 0xc000393c, 0 , 0,
20850 0x0 }, /* POOL32Sxf_4~*(28) */
20851 { reserved_block , 0 , 0 , 32,
20852 0xfc00ffff, 0xc0003b3c, 0 , 0,
20853 0x0 }, /* POOL32Sxf_4~*(29) */
20854 { reserved_block , 0 , 0 , 32,
20855 0xfc00ffff, 0xc0003d3c, 0 , 0,
20856 0x0 }, /* POOL32Sxf_4~*(30) */
20857 { reserved_block , 0 , 0 , 32,
20858 0xfc00ffff, 0xc0003f3c, 0 , 0,
20859 0x0 }, /* POOL32Sxf_4~*(31) */
20860 { reserved_block , 0 , 0 , 32,
20861 0xfc00ffff, 0xc000413c, 0 , 0,
20862 0x0 }, /* POOL32Sxf_4~*(32) */
20863 { reserved_block , 0 , 0 , 32,
20864 0xfc00ffff, 0xc000433c, 0 , 0,
20865 0x0 }, /* POOL32Sxf_4~*(33) */
20866 { reserved_block , 0 , 0 , 32,
20867 0xfc00ffff, 0xc000453c, 0 , 0,
20868 0x0 }, /* POOL32Sxf_4~*(34) */
20869 { reserved_block , 0 , 0 , 32,
20870 0xfc00ffff, 0xc000473c, 0 , 0,
20871 0x0 }, /* POOL32Sxf_4~*(35) */
20872 { reserved_block , 0 , 0 , 32,
20873 0xfc00ffff, 0xc000493c, 0 , 0,
20874 0x0 }, /* POOL32Sxf_4~*(36) */
20875 { instruction , 0 , 0 , 32,
20876 0xfc00ffff, 0xc0004b3c, &NMD::DCLO , 0,
20877 MIPS64_ }, /* DCLO */
20878 { reserved_block , 0 , 0 , 32,
20879 0xfc00ffff, 0xc0004d3c, 0 , 0,
20880 0x0 }, /* POOL32Sxf_4~*(38) */
20881 { reserved_block , 0 , 0 , 32,
20882 0xfc00ffff, 0xc0004f3c, 0 , 0,
20883 0x0 }, /* POOL32Sxf_4~*(39) */
20884 { reserved_block , 0 , 0 , 32,
20885 0xfc00ffff, 0xc000513c, 0 , 0,
20886 0x0 }, /* POOL32Sxf_4~*(40) */
20887 { reserved_block , 0 , 0 , 32,
20888 0xfc00ffff, 0xc000533c, 0 , 0,
20889 0x0 }, /* POOL32Sxf_4~*(41) */
20890 { reserved_block , 0 , 0 , 32,
20891 0xfc00ffff, 0xc000553c, 0 , 0,
20892 0x0 }, /* POOL32Sxf_4~*(42) */
20893 { reserved_block , 0 , 0 , 32,
20894 0xfc00ffff, 0xc000573c, 0 , 0,
20895 0x0 }, /* POOL32Sxf_4~*(43) */
20896 { reserved_block , 0 , 0 , 32,
20897 0xfc00ffff, 0xc000593c, 0 , 0,
20898 0x0 }, /* POOL32Sxf_4~*(44) */
20899 { instruction , 0 , 0 , 32,
20900 0xfc00ffff, 0xc0005b3c, &NMD::DCLZ , 0,
20901 MIPS64_ }, /* DCLZ */
20902 { reserved_block , 0 , 0 , 32,
20903 0xfc00ffff, 0xc0005d3c, 0 , 0,
20904 0x0 }, /* POOL32Sxf_4~*(46) */
20905 { reserved_block , 0 , 0 , 32,
20906 0xfc00ffff, 0xc0005f3c, 0 , 0,
20907 0x0 }, /* POOL32Sxf_4~*(47) */
20908 { reserved_block , 0 , 0 , 32,
20909 0xfc00ffff, 0xc000613c, 0 , 0,
20910 0x0 }, /* POOL32Sxf_4~*(48) */
20911 { reserved_block , 0 , 0 , 32,
20912 0xfc00ffff, 0xc000633c, 0 , 0,
20913 0x0 }, /* POOL32Sxf_4~*(49) */
20914 { reserved_block , 0 , 0 , 32,
20915 0xfc00ffff, 0xc000653c, 0 , 0,
20916 0x0 }, /* POOL32Sxf_4~*(50) */
20917 { reserved_block , 0 , 0 , 32,
20918 0xfc00ffff, 0xc000673c, 0 , 0,
20919 0x0 }, /* POOL32Sxf_4~*(51) */
20920 { reserved_block , 0 , 0 , 32,
20921 0xfc00ffff, 0xc000693c, 0 , 0,
20922 0x0 }, /* POOL32Sxf_4~*(52) */
20923 { reserved_block , 0 , 0 , 32,
20924 0xfc00ffff, 0xc0006b3c, 0 , 0,
20925 0x0 }, /* POOL32Sxf_4~*(53) */
20926 { reserved_block , 0 , 0 , 32,
20927 0xfc00ffff, 0xc0006d3c, 0 , 0,
20928 0x0 }, /* POOL32Sxf_4~*(54) */
20929 { reserved_block , 0 , 0 , 32,
20930 0xfc00ffff, 0xc0006f3c, 0 , 0,
20931 0x0 }, /* POOL32Sxf_4~*(55) */
20932 { reserved_block , 0 , 0 , 32,
20933 0xfc00ffff, 0xc000713c, 0 , 0,
20934 0x0 }, /* POOL32Sxf_4~*(56) */
20935 { reserved_block , 0 , 0 , 32,
20936 0xfc00ffff, 0xc000733c, 0 , 0,
20937 0x0 }, /* POOL32Sxf_4~*(57) */
20938 { reserved_block , 0 , 0 , 32,
20939 0xfc00ffff, 0xc000753c, 0 , 0,
20940 0x0 }, /* POOL32Sxf_4~*(58) */
20941 { reserved_block , 0 , 0 , 32,
20942 0xfc00ffff, 0xc000773c, 0 , 0,
20943 0x0 }, /* POOL32Sxf_4~*(59) */
20944 { reserved_block , 0 , 0 , 32,
20945 0xfc00ffff, 0xc000793c, 0 , 0,
20946 0x0 }, /* POOL32Sxf_4~*(60) */
20947 { reserved_block , 0 , 0 , 32,
20948 0xfc00ffff, 0xc0007b3c, 0 , 0,
20949 0x0 }, /* POOL32Sxf_4~*(61) */
20950 { reserved_block , 0 , 0 , 32,
20951 0xfc00ffff, 0xc0007d3c, 0 , 0,
20952 0x0 }, /* POOL32Sxf_4~*(62) */
20953 { reserved_block , 0 , 0 , 32,
20954 0xfc00ffff, 0xc0007f3c, 0 , 0,
20955 0x0 }, /* POOL32Sxf_4~*(63) */
20956 { reserved_block , 0 , 0 , 32,
20957 0xfc00ffff, 0xc000813c, 0 , 0,
20958 0x0 }, /* POOL32Sxf_4~*(64) */
20959 { reserved_block , 0 , 0 , 32,
20960 0xfc00ffff, 0xc000833c, 0 , 0,
20961 0x0 }, /* POOL32Sxf_4~*(65) */
20962 { reserved_block , 0 , 0 , 32,
20963 0xfc00ffff, 0xc000853c, 0 , 0,
20964 0x0 }, /* POOL32Sxf_4~*(66) */
20965 { reserved_block , 0 , 0 , 32,
20966 0xfc00ffff, 0xc000873c, 0 , 0,
20967 0x0 }, /* POOL32Sxf_4~*(67) */
20968 { reserved_block , 0 , 0 , 32,
20969 0xfc00ffff, 0xc000893c, 0 , 0,
20970 0x0 }, /* POOL32Sxf_4~*(68) */
20971 { reserved_block , 0 , 0 , 32,
20972 0xfc00ffff, 0xc0008b3c, 0 , 0,
20973 0x0 }, /* POOL32Sxf_4~*(69) */
20974 { reserved_block , 0 , 0 , 32,
20975 0xfc00ffff, 0xc0008d3c, 0 , 0,
20976 0x0 }, /* POOL32Sxf_4~*(70) */
20977 { reserved_block , 0 , 0 , 32,
20978 0xfc00ffff, 0xc0008f3c, 0 , 0,
20979 0x0 }, /* POOL32Sxf_4~*(71) */
20980 { reserved_block , 0 , 0 , 32,
20981 0xfc00ffff, 0xc000913c, 0 , 0,
20982 0x0 }, /* POOL32Sxf_4~*(72) */
20983 { reserved_block , 0 , 0 , 32,
20984 0xfc00ffff, 0xc000933c, 0 , 0,
20985 0x0 }, /* POOL32Sxf_4~*(73) */
20986 { reserved_block , 0 , 0 , 32,
20987 0xfc00ffff, 0xc000953c, 0 , 0,
20988 0x0 }, /* POOL32Sxf_4~*(74) */
20989 { reserved_block , 0 , 0 , 32,
20990 0xfc00ffff, 0xc000973c, 0 , 0,
20991 0x0 }, /* POOL32Sxf_4~*(75) */
20992 { reserved_block , 0 , 0 , 32,
20993 0xfc00ffff, 0xc000993c, 0 , 0,
20994 0x0 }, /* POOL32Sxf_4~*(76) */
20995 { reserved_block , 0 , 0 , 32,
20996 0xfc00ffff, 0xc0009b3c, 0 , 0,
20997 0x0 }, /* POOL32Sxf_4~*(77) */
20998 { reserved_block , 0 , 0 , 32,
20999 0xfc00ffff, 0xc0009d3c, 0 , 0,
21000 0x0 }, /* POOL32Sxf_4~*(78) */
21001 { reserved_block , 0 , 0 , 32,
21002 0xfc00ffff, 0xc0009f3c, 0 , 0,
21003 0x0 }, /* POOL32Sxf_4~*(79) */
21004 { reserved_block , 0 , 0 , 32,
21005 0xfc00ffff, 0xc000a13c, 0 , 0,
21006 0x0 }, /* POOL32Sxf_4~*(80) */
21007 { reserved_block , 0 , 0 , 32,
21008 0xfc00ffff, 0xc000a33c, 0 , 0,
21009 0x0 }, /* POOL32Sxf_4~*(81) */
21010 { reserved_block , 0 , 0 , 32,
21011 0xfc00ffff, 0xc000a53c, 0 , 0,
21012 0x0 }, /* POOL32Sxf_4~*(82) */
21013 { reserved_block , 0 , 0 , 32,
21014 0xfc00ffff, 0xc000a73c, 0 , 0,
21015 0x0 }, /* POOL32Sxf_4~*(83) */
21016 { reserved_block , 0 , 0 , 32,
21017 0xfc00ffff, 0xc000a93c, 0 , 0,
21018 0x0 }, /* POOL32Sxf_4~*(84) */
21019 { reserved_block , 0 , 0 , 32,
21020 0xfc00ffff, 0xc000ab3c, 0 , 0,
21021 0x0 }, /* POOL32Sxf_4~*(85) */
21022 { reserved_block , 0 , 0 , 32,
21023 0xfc00ffff, 0xc000ad3c, 0 , 0,
21024 0x0 }, /* POOL32Sxf_4~*(86) */
21025 { reserved_block , 0 , 0 , 32,
21026 0xfc00ffff, 0xc000af3c, 0 , 0,
21027 0x0 }, /* POOL32Sxf_4~*(87) */
21028 { reserved_block , 0 , 0 , 32,
21029 0xfc00ffff, 0xc000b13c, 0 , 0,
21030 0x0 }, /* POOL32Sxf_4~*(88) */
21031 { reserved_block , 0 , 0 , 32,
21032 0xfc00ffff, 0xc000b33c, 0 , 0,
21033 0x0 }, /* POOL32Sxf_4~*(89) */
21034 { reserved_block , 0 , 0 , 32,
21035 0xfc00ffff, 0xc000b53c, 0 , 0,
21036 0x0 }, /* POOL32Sxf_4~*(90) */
21037 { reserved_block , 0 , 0 , 32,
21038 0xfc00ffff, 0xc000b73c, 0 , 0,
21039 0x0 }, /* POOL32Sxf_4~*(91) */
21040 { reserved_block , 0 , 0 , 32,
21041 0xfc00ffff, 0xc000b93c, 0 , 0,
21042 0x0 }, /* POOL32Sxf_4~*(92) */
21043 { reserved_block , 0 , 0 , 32,
21044 0xfc00ffff, 0xc000bb3c, 0 , 0,
21045 0x0 }, /* POOL32Sxf_4~*(93) */
21046 { reserved_block , 0 , 0 , 32,
21047 0xfc00ffff, 0xc000bd3c, 0 , 0,
21048 0x0 }, /* POOL32Sxf_4~*(94) */
21049 { reserved_block , 0 , 0 , 32,
21050 0xfc00ffff, 0xc000bf3c, 0 , 0,
21051 0x0 }, /* POOL32Sxf_4~*(95) */
21052 { reserved_block , 0 , 0 , 32,
21053 0xfc00ffff, 0xc000c13c, 0 , 0,
21054 0x0 }, /* POOL32Sxf_4~*(96) */
21055 { reserved_block , 0 , 0 , 32,
21056 0xfc00ffff, 0xc000c33c, 0 , 0,
21057 0x0 }, /* POOL32Sxf_4~*(97) */
21058 { reserved_block , 0 , 0 , 32,
21059 0xfc00ffff, 0xc000c53c, 0 , 0,
21060 0x0 }, /* POOL32Sxf_4~*(98) */
21061 { reserved_block , 0 , 0 , 32,
21062 0xfc00ffff, 0xc000c73c, 0 , 0,
21063 0x0 }, /* POOL32Sxf_4~*(99) */
21064 { reserved_block , 0 , 0 , 32,
21065 0xfc00ffff, 0xc000c93c, 0 , 0,
21066 0x0 }, /* POOL32Sxf_4~*(100) */
21067 { reserved_block , 0 , 0 , 32,
21068 0xfc00ffff, 0xc000cb3c, 0 , 0,
21069 0x0 }, /* POOL32Sxf_4~*(101) */
21070 { reserved_block , 0 , 0 , 32,
21071 0xfc00ffff, 0xc000cd3c, 0 , 0,
21072 0x0 }, /* POOL32Sxf_4~*(102) */
21073 { reserved_block , 0 , 0 , 32,
21074 0xfc00ffff, 0xc000cf3c, 0 , 0,
21075 0x0 }, /* POOL32Sxf_4~*(103) */
21076 { reserved_block , 0 , 0 , 32,
21077 0xfc00ffff, 0xc000d13c, 0 , 0,
21078 0x0 }, /* POOL32Sxf_4~*(104) */
21079 { reserved_block , 0 , 0 , 32,
21080 0xfc00ffff, 0xc000d33c, 0 , 0,
21081 0x0 }, /* POOL32Sxf_4~*(105) */
21082 { reserved_block , 0 , 0 , 32,
21083 0xfc00ffff, 0xc000d53c, 0 , 0,
21084 0x0 }, /* POOL32Sxf_4~*(106) */
21085 { reserved_block , 0 , 0 , 32,
21086 0xfc00ffff, 0xc000d73c, 0 , 0,
21087 0x0 }, /* POOL32Sxf_4~*(107) */
21088 { reserved_block , 0 , 0 , 32,
21089 0xfc00ffff, 0xc000d93c, 0 , 0,
21090 0x0 }, /* POOL32Sxf_4~*(108) */
21091 { reserved_block , 0 , 0 , 32,
21092 0xfc00ffff, 0xc000db3c, 0 , 0,
21093 0x0 }, /* POOL32Sxf_4~*(109) */
21094 { reserved_block , 0 , 0 , 32,
21095 0xfc00ffff, 0xc000dd3c, 0 , 0,
21096 0x0 }, /* POOL32Sxf_4~*(110) */
21097 { reserved_block , 0 , 0 , 32,
21098 0xfc00ffff, 0xc000df3c, 0 , 0,
21099 0x0 }, /* POOL32Sxf_4~*(111) */
21100 { reserved_block , 0 , 0 , 32,
21101 0xfc00ffff, 0xc000e13c, 0 , 0,
21102 0x0 }, /* POOL32Sxf_4~*(112) */
21103 { reserved_block , 0 , 0 , 32,
21104 0xfc00ffff, 0xc000e33c, 0 , 0,
21105 0x0 }, /* POOL32Sxf_4~*(113) */
21106 { reserved_block , 0 , 0 , 32,
21107 0xfc00ffff, 0xc000e53c, 0 , 0,
21108 0x0 }, /* POOL32Sxf_4~*(114) */
21109 { reserved_block , 0 , 0 , 32,
21110 0xfc00ffff, 0xc000e73c, 0 , 0,
21111 0x0 }, /* POOL32Sxf_4~*(115) */
21112 { reserved_block , 0 , 0 , 32,
21113 0xfc00ffff, 0xc000e93c, 0 , 0,
21114 0x0 }, /* POOL32Sxf_4~*(116) */
21115 { reserved_block , 0 , 0 , 32,
21116 0xfc00ffff, 0xc000eb3c, 0 , 0,
21117 0x0 }, /* POOL32Sxf_4~*(117) */
21118 { reserved_block , 0 , 0 , 32,
21119 0xfc00ffff, 0xc000ed3c, 0 , 0,
21120 0x0 }, /* POOL32Sxf_4~*(118) */
21121 { reserved_block , 0 , 0 , 32,
21122 0xfc00ffff, 0xc000ef3c, 0 , 0,
21123 0x0 }, /* POOL32Sxf_4~*(119) */
21124 { reserved_block , 0 , 0 , 32,
21125 0xfc00ffff, 0xc000f13c, 0 , 0,
21126 0x0 }, /* POOL32Sxf_4~*(120) */
21127 { reserved_block , 0 , 0 , 32,
21128 0xfc00ffff, 0xc000f33c, 0 , 0,
21129 0x0 }, /* POOL32Sxf_4~*(121) */
21130 { reserved_block , 0 , 0 , 32,
21131 0xfc00ffff, 0xc000f53c, 0 , 0,
21132 0x0 }, /* POOL32Sxf_4~*(122) */
21133 { reserved_block , 0 , 0 , 32,
21134 0xfc00ffff, 0xc000f73c, 0 , 0,
21135 0x0 }, /* POOL32Sxf_4~*(123) */
21136 { reserved_block , 0 , 0 , 32,
21137 0xfc00ffff, 0xc000f93c, 0 , 0,
21138 0x0 }, /* POOL32Sxf_4~*(124) */
21139 { reserved_block , 0 , 0 , 32,
21140 0xfc00ffff, 0xc000fb3c, 0 , 0,
21141 0x0 }, /* POOL32Sxf_4~*(125) */
21142 { reserved_block , 0 , 0 , 32,
21143 0xfc00ffff, 0xc000fd3c, 0 , 0,
21144 0x0 }, /* POOL32Sxf_4~*(126) */
21145 { reserved_block , 0 , 0 , 32,
21146 0xfc00ffff, 0xc000ff3c, 0 , 0,
21147 0x0 }, /* POOL32Sxf_4~*(127) */
21148};
21149
21150
21151NMD::Pool NMD::POOL32Sxf[8] = {
21152 { reserved_block , 0 , 0 , 32,
21153 0xfc0001ff, 0xc000003c, 0 , 0,
21154 0x0 }, /* POOL32Sxf~*(0) */
21155 { reserved_block , 0 , 0 , 32,
21156 0xfc0001ff, 0xc000007c, 0 , 0,
21157 0x0 }, /* POOL32Sxf~*(1) */
21158 { reserved_block , 0 , 0 , 32,
21159 0xfc0001ff, 0xc00000bc, 0 , 0,
21160 0x0 }, /* POOL32Sxf~*(2) */
21161 { reserved_block , 0 , 0 , 32,
21162 0xfc0001ff, 0xc00000fc, 0 , 0,
21163 0x0 }, /* POOL32Sxf~*(3) */
21164 { pool , POOL32Sxf_4 , 128 , 32,
21165 0xfc0001ff, 0xc000013c, 0 , 0,
21166 0x0 }, /* POOL32Sxf_4 */
21167 { reserved_block , 0 , 0 , 32,
21168 0xfc0001ff, 0xc000017c, 0 , 0,
21169 0x0 }, /* POOL32Sxf~*(5) */
21170 { reserved_block , 0 , 0 , 32,
21171 0xfc0001ff, 0xc00001bc, 0 , 0,
21172 0x0 }, /* POOL32Sxf~*(6) */
21173 { reserved_block , 0 , 0 , 32,
21174 0xfc0001ff, 0xc00001fc, 0 , 0,
21175 0x0 }, /* POOL32Sxf~*(7) */
21176};
21177
21178
21179NMD::Pool NMD::POOL32S_4[8] = {
21180 { instruction , 0 , 0 , 32,
21181 0xfc00003f, 0xc0000004, &NMD::EXTD , 0,
21182 MIPS64_ }, /* EXTD */
21183 { instruction , 0 , 0 , 32,
21184 0xfc00003f, 0xc000000c, &NMD::EXTD32 , 0,
21185 MIPS64_ }, /* EXTD32 */
21186 { reserved_block , 0 , 0 , 32,
21187 0xfc00003f, 0xc0000014, 0 , 0,
21188 0x0 }, /* POOL32S_4~*(2) */
21189 { reserved_block , 0 , 0 , 32,
21190 0xfc00003f, 0xc000001c, 0 , 0,
21191 0x0 }, /* POOL32S_4~*(3) */
21192 { reserved_block , 0 , 0 , 32,
21193 0xfc00003f, 0xc0000024, 0 , 0,
21194 0x0 }, /* POOL32S_4~*(4) */
21195 { reserved_block , 0 , 0 , 32,
21196 0xfc00003f, 0xc000002c, 0 , 0,
21197 0x0 }, /* POOL32S_4~*(5) */
21198 { reserved_block , 0 , 0 , 32,
21199 0xfc00003f, 0xc0000034, 0 , 0,
21200 0x0 }, /* POOL32S_4~*(6) */
21201 { pool , POOL32Sxf , 8 , 32,
21202 0xfc00003f, 0xc000003c, 0 , 0,
21203 0x0 }, /* POOL32Sxf */
21204};
21205
21206
21207NMD::Pool NMD::POOL32S[8] = {
21208 { pool , POOL32S_0 , 64 , 32,
21209 0xfc000007, 0xc0000000, 0 , 0,
21210 0x0 }, /* POOL32S_0 */
21211 { reserved_block , 0 , 0 , 32,
21212 0xfc000007, 0xc0000001, 0 , 0,
21213 0x0 }, /* POOL32S~*(1) */
21214 { reserved_block , 0 , 0 , 32,
21215 0xfc000007, 0xc0000002, 0 , 0,
21216 0x0 }, /* POOL32S~*(2) */
21217 { reserved_block , 0 , 0 , 32,
21218 0xfc000007, 0xc0000003, 0 , 0,
21219 0x0 }, /* POOL32S~*(3) */
21220 { pool , POOL32S_4 , 8 , 32,
21221 0xfc000007, 0xc0000004, 0 , 0,
21222 0x0 }, /* POOL32S_4 */
21223 { reserved_block , 0 , 0 , 32,
21224 0xfc000007, 0xc0000005, 0 , 0,
21225 0x0 }, /* POOL32S~*(5) */
21226 { reserved_block , 0 , 0 , 32,
21227 0xfc000007, 0xc0000006, 0 , 0,
21228 0x0 }, /* POOL32S~*(6) */
21229 { reserved_block , 0 , 0 , 32,
21230 0xfc000007, 0xc0000007, 0 , 0,
21231 0x0 }, /* POOL32S~*(7) */
21232};
21233
21234
21235NMD::Pool NMD::P_LUI[2] = {
21236 { instruction , 0 , 0 , 32,
21237 0xfc000002, 0xe0000000, &NMD::LUI , 0,
21238 0x0 }, /* LUI */
21239 { instruction , 0 , 0 , 32,
21240 0xfc000002, 0xe0000002, &NMD::ALUIPC , 0,
21241 0x0 }, /* ALUIPC */
21242};
21243
21244
21245NMD::Pool NMD::P_GP_LH[2] = {
21246 { instruction , 0 , 0 , 32,
21247 0xfc1c0001, 0x44100000, &NMD::LH_GP_ , 0,
21248 0x0 }, /* LH[GP] */
21249 { instruction , 0 , 0 , 32,
21250 0xfc1c0001, 0x44100001, &NMD::LHU_GP_ , 0,
21251 0x0 }, /* LHU[GP] */
21252};
21253
21254
21255NMD::Pool NMD::P_GP_SH[2] = {
21256 { instruction , 0 , 0 , 32,
21257 0xfc1c0001, 0x44140000, &NMD::SH_GP_ , 0,
21258 0x0 }, /* SH[GP] */
21259 { reserved_block , 0 , 0 , 32,
21260 0xfc1c0001, 0x44140001, 0 , 0,
21261 0x0 }, /* P.GP.SH~*(1) */
21262};
21263
21264
21265NMD::Pool NMD::P_GP_CP1[4] = {
21266 { instruction , 0 , 0 , 32,
21267 0xfc1c0003, 0x44180000, &NMD::LWC1_GP_ , 0,
21268 CP1_ }, /* LWC1[GP] */
21269 { instruction , 0 , 0 , 32,
21270 0xfc1c0003, 0x44180001, &NMD::SWC1_GP_ , 0,
21271 CP1_ }, /* SWC1[GP] */
21272 { instruction , 0 , 0 , 32,
21273 0xfc1c0003, 0x44180002, &NMD::LDC1_GP_ , 0,
21274 CP1_ }, /* LDC1[GP] */
21275 { instruction , 0 , 0 , 32,
21276 0xfc1c0003, 0x44180003, &NMD::SDC1_GP_ , 0,
21277 CP1_ }, /* SDC1[GP] */
21278};
21279
21280
21281NMD::Pool NMD::P_GP_M64[4] = {
21282 { instruction , 0 , 0 , 32,
21283 0xfc1c0003, 0x441c0000, &NMD::LWU_GP_ , 0,
21284 MIPS64_ }, /* LWU[GP] */
21285 { reserved_block , 0 , 0 , 32,
21286 0xfc1c0003, 0x441c0001, 0 , 0,
21287 0x0 }, /* P.GP.M64~*(1) */
21288 { reserved_block , 0 , 0 , 32,
21289 0xfc1c0003, 0x441c0002, 0 , 0,
21290 0x0 }, /* P.GP.M64~*(2) */
21291 { reserved_block , 0 , 0 , 32,
21292 0xfc1c0003, 0x441c0003, 0 , 0,
21293 0x0 }, /* P.GP.M64~*(3) */
21294};
21295
21296
21297NMD::Pool NMD::P_GP_BH[8] = {
21298 { instruction , 0 , 0 , 32,
21299 0xfc1c0000, 0x44000000, &NMD::LB_GP_ , 0,
21300 0x0 }, /* LB[GP] */
21301 { instruction , 0 , 0 , 32,
21302 0xfc1c0000, 0x44040000, &NMD::SB_GP_ , 0,
21303 0x0 }, /* SB[GP] */
21304 { instruction , 0 , 0 , 32,
21305 0xfc1c0000, 0x44080000, &NMD::LBU_GP_ , 0,
21306 0x0 }, /* LBU[GP] */
21307 { instruction , 0 , 0 , 32,
21308 0xfc1c0000, 0x440c0000, &NMD::ADDIU_GP_B_ , 0,
21309 0x0 }, /* ADDIU[GP.B] */
21310 { pool , P_GP_LH , 2 , 32,
21311 0xfc1c0000, 0x44100000, 0 , 0,
21312 0x0 }, /* P.GP.LH */
21313 { pool , P_GP_SH , 2 , 32,
21314 0xfc1c0000, 0x44140000, 0 , 0,
21315 0x0 }, /* P.GP.SH */
21316 { pool , P_GP_CP1 , 4 , 32,
21317 0xfc1c0000, 0x44180000, 0 , 0,
21318 0x0 }, /* P.GP.CP1 */
21319 { pool , P_GP_M64 , 4 , 32,
21320 0xfc1c0000, 0x441c0000, 0 , 0,
21321 0x0 }, /* P.GP.M64 */
21322};
21323
21324
21325NMD::Pool NMD::P_LS_U12[16] = {
21326 { instruction , 0 , 0 , 32,
21327 0xfc00f000, 0x84000000, &NMD::LB_U12_ , 0,
21328 0x0 }, /* LB[U12] */
21329 { instruction , 0 , 0 , 32,
21330 0xfc00f000, 0x84001000, &NMD::SB_U12_ , 0,
21331 0x0 }, /* SB[U12] */
21332 { instruction , 0 , 0 , 32,
21333 0xfc00f000, 0x84002000, &NMD::LBU_U12_ , 0,
21334 0x0 }, /* LBU[U12] */
21335 { instruction , 0 , 0 , 32,
21336 0xfc00f000, 0x84003000, &NMD::PREF_U12_ , 0,
21337 0x0 }, /* PREF[U12] */
21338 { instruction , 0 , 0 , 32,
21339 0xfc00f000, 0x84004000, &NMD::LH_U12_ , 0,
21340 0x0 }, /* LH[U12] */
21341 { instruction , 0 , 0 , 32,
21342 0xfc00f000, 0x84005000, &NMD::SH_U12_ , 0,
21343 0x0 }, /* SH[U12] */
21344 { instruction , 0 , 0 , 32,
21345 0xfc00f000, 0x84006000, &NMD::LHU_U12_ , 0,
21346 0x0 }, /* LHU[U12] */
21347 { instruction , 0 , 0 , 32,
21348 0xfc00f000, 0x84007000, &NMD::LWU_U12_ , 0,
21349 MIPS64_ }, /* LWU[U12] */
21350 { instruction , 0 , 0 , 32,
21351 0xfc00f000, 0x84008000, &NMD::LW_U12_ , 0,
21352 0x0 }, /* LW[U12] */
21353 { instruction , 0 , 0 , 32,
21354 0xfc00f000, 0x84009000, &NMD::SW_U12_ , 0,
21355 0x0 }, /* SW[U12] */
21356 { instruction , 0 , 0 , 32,
21357 0xfc00f000, 0x8400a000, &NMD::LWC1_U12_ , 0,
21358 CP1_ }, /* LWC1[U12] */
21359 { instruction , 0 , 0 , 32,
21360 0xfc00f000, 0x8400b000, &NMD::SWC1_U12_ , 0,
21361 CP1_ }, /* SWC1[U12] */
21362 { instruction , 0 , 0 , 32,
21363 0xfc00f000, 0x8400c000, &NMD::LD_U12_ , 0,
21364 MIPS64_ }, /* LD[U12] */
21365 { instruction , 0 , 0 , 32,
21366 0xfc00f000, 0x8400d000, &NMD::SD_U12_ , 0,
21367 MIPS64_ }, /* SD[U12] */
21368 { instruction , 0 , 0 , 32,
21369 0xfc00f000, 0x8400e000, &NMD::LDC1_U12_ , 0,
21370 CP1_ }, /* LDC1[U12] */
21371 { instruction , 0 , 0 , 32,
21372 0xfc00f000, 0x8400f000, &NMD::SDC1_U12_ , 0,
21373 CP1_ }, /* SDC1[U12] */
21374};
21375
21376
21377NMD::Pool NMD::P_PREF_S9_[2] = {
21378 { instruction , 0 , 0 , 32,
21379 0xffe07f00, 0xa7e01800, &NMD::SYNCI , 0,
21380 0x0 }, /* SYNCI */
21381 { instruction , 0 , 0 , 32,
21382 0xfc007f00, 0xa4001800, &NMD::PREF_S9_ , &NMD::PREF_S9__cond ,
21383 0x0 }, /* PREF[S9] */
21384};
21385
21386
21387NMD::Pool NMD::P_LS_S0[16] = {
21388 { instruction , 0 , 0 , 32,
21389 0xfc007f00, 0xa4000000, &NMD::LB_S9_ , 0,
21390 0x0 }, /* LB[S9] */
21391 { instruction , 0 , 0 , 32,
21392 0xfc007f00, 0xa4000800, &NMD::SB_S9_ , 0,
21393 0x0 }, /* SB[S9] */
21394 { instruction , 0 , 0 , 32,
21395 0xfc007f00, 0xa4001000, &NMD::LBU_S9_ , 0,
21396 0x0 }, /* LBU[S9] */
21397 { pool , P_PREF_S9_ , 2 , 32,
21398 0xfc007f00, 0xa4001800, 0 , 0,
21399 0x0 }, /* P.PREF[S9] */
21400 { instruction , 0 , 0 , 32,
21401 0xfc007f00, 0xa4002000, &NMD::LH_S9_ , 0,
21402 0x0 }, /* LH[S9] */
21403 { instruction , 0 , 0 , 32,
21404 0xfc007f00, 0xa4002800, &NMD::SH_S9_ , 0,
21405 0x0 }, /* SH[S9] */
21406 { instruction , 0 , 0 , 32,
21407 0xfc007f00, 0xa4003000, &NMD::LHU_S9_ , 0,
21408 0x0 }, /* LHU[S9] */
21409 { instruction , 0 , 0 , 32,
21410 0xfc007f00, 0xa4003800, &NMD::LWU_S9_ , 0,
21411 MIPS64_ }, /* LWU[S9] */
21412 { instruction , 0 , 0 , 32,
21413 0xfc007f00, 0xa4004000, &NMD::LW_S9_ , 0,
21414 0x0 }, /* LW[S9] */
21415 { instruction , 0 , 0 , 32,
21416 0xfc007f00, 0xa4004800, &NMD::SW_S9_ , 0,
21417 0x0 }, /* SW[S9] */
21418 { instruction , 0 , 0 , 32,
21419 0xfc007f00, 0xa4005000, &NMD::LWC1_S9_ , 0,
21420 CP1_ }, /* LWC1[S9] */
21421 { instruction , 0 , 0 , 32,
21422 0xfc007f00, 0xa4005800, &NMD::SWC1_S9_ , 0,
21423 CP1_ }, /* SWC1[S9] */
21424 { instruction , 0 , 0 , 32,
21425 0xfc007f00, 0xa4006000, &NMD::LD_S9_ , 0,
21426 MIPS64_ }, /* LD[S9] */
21427 { instruction , 0 , 0 , 32,
21428 0xfc007f00, 0xa4006800, &NMD::SD_S9_ , 0,
21429 MIPS64_ }, /* SD[S9] */
21430 { instruction , 0 , 0 , 32,
21431 0xfc007f00, 0xa4007000, &NMD::LDC1_S9_ , 0,
21432 CP1_ }, /* LDC1[S9] */
21433 { instruction , 0 , 0 , 32,
21434 0xfc007f00, 0xa4007800, &NMD::SDC1_S9_ , 0,
21435 CP1_ }, /* SDC1[S9] */
21436};
21437
21438
21439NMD::Pool NMD::ASET_ACLR[2] = {
21440 { instruction , 0 , 0 , 32,
21441 0xfe007f00, 0xa4001100, &NMD::ASET , 0,
21442 MCU_ }, /* ASET */
21443 { instruction , 0 , 0 , 32,
21444 0xfe007f00, 0xa6001100, &NMD::ACLR , 0,
21445 MCU_ }, /* ACLR */
21446};
21447
21448
21449NMD::Pool NMD::P_LL[4] = {
21450 { instruction , 0 , 0 , 32,
21451 0xfc007f03, 0xa4005100, &NMD::LL , 0,
21452 0x0 }, /* LL */
21453 { instruction , 0 , 0 , 32,
21454 0xfc007f03, 0xa4005101, &NMD::LLWP , 0,
21455 XNP_ }, /* LLWP */
21456 { reserved_block , 0 , 0 , 32,
21457 0xfc007f03, 0xa4005102, 0 , 0,
21458 0x0 }, /* P.LL~*(2) */
21459 { reserved_block , 0 , 0 , 32,
21460 0xfc007f03, 0xa4005103, 0 , 0,
21461 0x0 }, /* P.LL~*(3) */
21462};
21463
21464
21465NMD::Pool NMD::P_SC[4] = {
21466 { instruction , 0 , 0 , 32,
21467 0xfc007f03, 0xa4005900, &NMD::SC , 0,
21468 0x0 }, /* SC */
21469 { instruction , 0 , 0 , 32,
21470 0xfc007f03, 0xa4005901, &NMD::SCWP , 0,
21471 XNP_ }, /* SCWP */
21472 { reserved_block , 0 , 0 , 32,
21473 0xfc007f03, 0xa4005902, 0 , 0,
21474 0x0 }, /* P.SC~*(2) */
21475 { reserved_block , 0 , 0 , 32,
21476 0xfc007f03, 0xa4005903, 0 , 0,
21477 0x0 }, /* P.SC~*(3) */
21478};
21479
21480
21481NMD::Pool NMD::P_LLD[8] = {
21482 { instruction , 0 , 0 , 32,
21483 0xfc007f07, 0xa4007100, &NMD::LLD , 0,
21484 MIPS64_ }, /* LLD */
21485 { instruction , 0 , 0 , 32,
21486 0xfc007f07, 0xa4007101, &NMD::LLDP , 0,
21487 MIPS64_ }, /* LLDP */
21488 { reserved_block , 0 , 0 , 32,
21489 0xfc007f07, 0xa4007102, 0 , 0,
21490 0x0 }, /* P.LLD~*(2) */
21491 { reserved_block , 0 , 0 , 32,
21492 0xfc007f07, 0xa4007103, 0 , 0,
21493 0x0 }, /* P.LLD~*(3) */
21494 { reserved_block , 0 , 0 , 32,
21495 0xfc007f07, 0xa4007104, 0 , 0,
21496 0x0 }, /* P.LLD~*(4) */
21497 { reserved_block , 0 , 0 , 32,
21498 0xfc007f07, 0xa4007105, 0 , 0,
21499 0x0 }, /* P.LLD~*(5) */
21500 { reserved_block , 0 , 0 , 32,
21501 0xfc007f07, 0xa4007106, 0 , 0,
21502 0x0 }, /* P.LLD~*(6) */
21503 { reserved_block , 0 , 0 , 32,
21504 0xfc007f07, 0xa4007107, 0 , 0,
21505 0x0 }, /* P.LLD~*(7) */
21506};
21507
21508
21509NMD::Pool NMD::P_SCD[8] = {
21510 { instruction , 0 , 0 , 32,
21511 0xfc007f07, 0xa4007900, &NMD::SCD , 0,
21512 MIPS64_ }, /* SCD */
21513 { instruction , 0 , 0 , 32,
21514 0xfc007f07, 0xa4007901, &NMD::SCDP , 0,
21515 MIPS64_ }, /* SCDP */
21516 { reserved_block , 0 , 0 , 32,
21517 0xfc007f07, 0xa4007902, 0 , 0,
21518 0x0 }, /* P.SCD~*(2) */
21519 { reserved_block , 0 , 0 , 32,
21520 0xfc007f07, 0xa4007903, 0 , 0,
21521 0x0 }, /* P.SCD~*(3) */
21522 { reserved_block , 0 , 0 , 32,
21523 0xfc007f07, 0xa4007904, 0 , 0,
21524 0x0 }, /* P.SCD~*(4) */
21525 { reserved_block , 0 , 0 , 32,
21526 0xfc007f07, 0xa4007905, 0 , 0,
21527 0x0 }, /* P.SCD~*(5) */
21528 { reserved_block , 0 , 0 , 32,
21529 0xfc007f07, 0xa4007906, 0 , 0,
21530 0x0 }, /* P.SCD~*(6) */
21531 { reserved_block , 0 , 0 , 32,
21532 0xfc007f07, 0xa4007907, 0 , 0,
21533 0x0 }, /* P.SCD~*(7) */
21534};
21535
21536
21537NMD::Pool NMD::P_LS_S1[16] = {
21538 { reserved_block , 0 , 0 , 32,
21539 0xfc007f00, 0xa4000100, 0 , 0,
21540 0x0 }, /* P.LS.S1~*(0) */
21541 { reserved_block , 0 , 0 , 32,
21542 0xfc007f00, 0xa4000900, 0 , 0,
21543 0x0 }, /* P.LS.S1~*(1) */
21544 { pool , ASET_ACLR , 2 , 32,
21545 0xfc007f00, 0xa4001100, 0 , 0,
21546 0x0 }, /* ASET_ACLR */
21547 { reserved_block , 0 , 0 , 32,
21548 0xfc007f00, 0xa4001900, 0 , 0,
21549 0x0 }, /* P.LS.S1~*(3) */
21550 { instruction , 0 , 0 , 32,
21551 0xfc007f00, 0xa4002100, &NMD::UALH , 0,
21552 XMMS_ }, /* UALH */
21553 { instruction , 0 , 0 , 32,
21554 0xfc007f00, 0xa4002900, &NMD::UASH , 0,
21555 XMMS_ }, /* UASH */
21556 { reserved_block , 0 , 0 , 32,
21557 0xfc007f00, 0xa4003100, 0 , 0,
21558 0x0 }, /* P.LS.S1~*(6) */
21559 { instruction , 0 , 0 , 32,
21560 0xfc007f00, 0xa4003900, &NMD::CACHE , 0,
21561 CP0_ }, /* CACHE */
21562 { instruction , 0 , 0 , 32,
21563 0xfc007f00, 0xa4004100, &NMD::LWC2 , 0,
21564 CP2_ }, /* LWC2 */
21565 { instruction , 0 , 0 , 32,
21566 0xfc007f00, 0xa4004900, &NMD::SWC2 , 0,
21567 CP2_ }, /* SWC2 */
21568 { pool , P_LL , 4 , 32,
21569 0xfc007f00, 0xa4005100, 0 , 0,
21570 0x0 }, /* P.LL */
21571 { pool , P_SC , 4 , 32,
21572 0xfc007f00, 0xa4005900, 0 , 0,
21573 0x0 }, /* P.SC */
21574 { instruction , 0 , 0 , 32,
21575 0xfc007f00, 0xa4006100, &NMD::LDC2 , 0,
21576 CP2_ }, /* LDC2 */
21577 { instruction , 0 , 0 , 32,
21578 0xfc007f00, 0xa4006900, &NMD::SDC2 , 0,
21579 CP2_ }, /* SDC2 */
21580 { pool , P_LLD , 8 , 32,
21581 0xfc007f00, 0xa4007100, 0 , 0,
21582 0x0 }, /* P.LLD */
21583 { pool , P_SCD , 8 , 32,
21584 0xfc007f00, 0xa4007900, 0 , 0,
21585 0x0 }, /* P.SCD */
21586};
21587
21588
21589NMD::Pool NMD::P_PREFE[2] = {
21590 { instruction , 0 , 0 , 32,
21591 0xffe07f00, 0xa7e01a00, &NMD::SYNCIE , 0,
21592 CP0_ | EVA_ }, /* SYNCIE */
21593 { instruction , 0 , 0 , 32,
21594 0xfc007f00, 0xa4001a00, &NMD::PREFE , &NMD::PREFE_cond ,
21595 CP0_ | EVA_ }, /* PREFE */
21596};
21597
21598
21599NMD::Pool NMD::P_LLE[4] = {
21600 { instruction , 0 , 0 , 32,
21601 0xfc007f03, 0xa4005200, &NMD::LLE , 0,
21602 CP0_ | EVA_ }, /* LLE */
21603 { instruction , 0 , 0 , 32,
21604 0xfc007f03, 0xa4005201, &NMD::LLWPE , 0,
21605 CP0_ | EVA_ }, /* LLWPE */
21606 { reserved_block , 0 , 0 , 32,
21607 0xfc007f03, 0xa4005202, 0 , 0,
21608 0x0 }, /* P.LLE~*(2) */
21609 { reserved_block , 0 , 0 , 32,
21610 0xfc007f03, 0xa4005203, 0 , 0,
21611 0x0 }, /* P.LLE~*(3) */
21612};
21613
21614
21615NMD::Pool NMD::P_SCE[4] = {
21616 { instruction , 0 , 0 , 32,
21617 0xfc007f03, 0xa4005a00, &NMD::SCE , 0,
21618 CP0_ | EVA_ }, /* SCE */
21619 { instruction , 0 , 0 , 32,
21620 0xfc007f03, 0xa4005a01, &NMD::SCWPE , 0,
21621 CP0_ | EVA_ }, /* SCWPE */
21622 { reserved_block , 0 , 0 , 32,
21623 0xfc007f03, 0xa4005a02, 0 , 0,
21624 0x0 }, /* P.SCE~*(2) */
21625 { reserved_block , 0 , 0 , 32,
21626 0xfc007f03, 0xa4005a03, 0 , 0,
21627 0x0 }, /* P.SCE~*(3) */
21628};
21629
21630
21631NMD::Pool NMD::P_LS_E0[16] = {
21632 { instruction , 0 , 0 , 32,
21633 0xfc007f00, 0xa4000200, &NMD::LBE , 0,
21634 CP0_ | EVA_ }, /* LBE */
21635 { instruction , 0 , 0 , 32,
21636 0xfc007f00, 0xa4000a00, &NMD::SBE , 0,
21637 CP0_ | EVA_ }, /* SBE */
21638 { instruction , 0 , 0 , 32,
21639 0xfc007f00, 0xa4001200, &NMD::LBUE , 0,
21640 CP0_ | EVA_ }, /* LBUE */
21641 { pool , P_PREFE , 2 , 32,
21642 0xfc007f00, 0xa4001a00, 0 , 0,
21643 0x0 }, /* P.PREFE */
21644 { instruction , 0 , 0 , 32,
21645 0xfc007f00, 0xa4002200, &NMD::LHE , 0,
21646 CP0_ | EVA_ }, /* LHE */
21647 { instruction , 0 , 0 , 32,
21648 0xfc007f00, 0xa4002a00, &NMD::SHE , 0,
21649 CP0_ | EVA_ }, /* SHE */
21650 { instruction , 0 , 0 , 32,
21651 0xfc007f00, 0xa4003200, &NMD::LHUE , 0,
21652 CP0_ | EVA_ }, /* LHUE */
21653 { instruction , 0 , 0 , 32,
21654 0xfc007f00, 0xa4003a00, &NMD::CACHEE , 0,
21655 CP0_ | EVA_ }, /* CACHEE */
21656 { instruction , 0 , 0 , 32,
21657 0xfc007f00, 0xa4004200, &NMD::LWE , 0,
21658 CP0_ | EVA_ }, /* LWE */
21659 { instruction , 0 , 0 , 32,
21660 0xfc007f00, 0xa4004a00, &NMD::SWE , 0,
21661 CP0_ | EVA_ }, /* SWE */
21662 { pool , P_LLE , 4 , 32,
21663 0xfc007f00, 0xa4005200, 0 , 0,
21664 0x0 }, /* P.LLE */
21665 { pool , P_SCE , 4 , 32,
21666 0xfc007f00, 0xa4005a00, 0 , 0,
21667 0x0 }, /* P.SCE */
21668 { reserved_block , 0 , 0 , 32,
21669 0xfc007f00, 0xa4006200, 0 , 0,
21670 0x0 }, /* P.LS.E0~*(12) */
21671 { reserved_block , 0 , 0 , 32,
21672 0xfc007f00, 0xa4006a00, 0 , 0,
21673 0x0 }, /* P.LS.E0~*(13) */
21674 { reserved_block , 0 , 0 , 32,
21675 0xfc007f00, 0xa4007200, 0 , 0,
21676 0x0 }, /* P.LS.E0~*(14) */
21677 { reserved_block , 0 , 0 , 32,
21678 0xfc007f00, 0xa4007a00, 0 , 0,
21679 0x0 }, /* P.LS.E0~*(15) */
21680};
21681
21682
21683NMD::Pool NMD::P_LS_WM[2] = {
21684 { instruction , 0 , 0 , 32,
21685 0xfc000f00, 0xa4000400, &NMD::LWM , 0,
21686 XMMS_ }, /* LWM */
21687 { instruction , 0 , 0 , 32,
21688 0xfc000f00, 0xa4000c00, &NMD::SWM , 0,
21689 XMMS_ }, /* SWM */
21690};
21691
21692
21693NMD::Pool NMD::P_LS_UAWM[2] = {
21694 { instruction , 0 , 0 , 32,
21695 0xfc000f00, 0xa4000500, &NMD::UALWM , 0,
21696 XMMS_ }, /* UALWM */
21697 { instruction , 0 , 0 , 32,
21698 0xfc000f00, 0xa4000d00, &NMD::UASWM , 0,
21699 XMMS_ }, /* UASWM */
21700};
21701
21702
21703NMD::Pool NMD::P_LS_DM[2] = {
21704 { instruction , 0 , 0 , 32,
21705 0xfc000f00, 0xa4000600, &NMD::LDM , 0,
21706 MIPS64_ }, /* LDM */
21707 { instruction , 0 , 0 , 32,
21708 0xfc000f00, 0xa4000e00, &NMD::SDM , 0,
21709 MIPS64_ }, /* SDM */
21710};
21711
21712
21713NMD::Pool NMD::P_LS_UADM[2] = {
21714 { instruction , 0 , 0 , 32,
21715 0xfc000f00, 0xa4000700, &NMD::UALDM , 0,
21716 MIPS64_ }, /* UALDM */
21717 { instruction , 0 , 0 , 32,
21718 0xfc000f00, 0xa4000f00, &NMD::UASDM , 0,
21719 MIPS64_ }, /* UASDM */
21720};
21721
21722
21723NMD::Pool NMD::P_LS_S9[8] = {
21724 { pool , P_LS_S0 , 16 , 32,
21725 0xfc000700, 0xa4000000, 0 , 0,
21726 0x0 }, /* P.LS.S0 */
21727 { pool , P_LS_S1 , 16 , 32,
21728 0xfc000700, 0xa4000100, 0 , 0,
21729 0x0 }, /* P.LS.S1 */
21730 { pool , P_LS_E0 , 16 , 32,
21731 0xfc000700, 0xa4000200, 0 , 0,
21732 0x0 }, /* P.LS.E0 */
21733 { reserved_block , 0 , 0 , 32,
21734 0xfc000700, 0xa4000300, 0 , 0,
21735 0x0 }, /* P.LS.S9~*(3) */
21736 { pool , P_LS_WM , 2 , 32,
21737 0xfc000700, 0xa4000400, 0 , 0,
21738 0x0 }, /* P.LS.WM */
21739 { pool , P_LS_UAWM , 2 , 32,
21740 0xfc000700, 0xa4000500, 0 , 0,
21741 0x0 }, /* P.LS.UAWM */
21742 { pool , P_LS_DM , 2 , 32,
21743 0xfc000700, 0xa4000600, 0 , 0,
21744 0x0 }, /* P.LS.DM */
21745 { pool , P_LS_UADM , 2 , 32,
21746 0xfc000700, 0xa4000700, 0 , 0,
21747 0x0 }, /* P.LS.UADM */
21748};
21749
21750
21751NMD::Pool NMD::P_BAL[2] = {
21752 { branch_instruction , 0 , 0 , 32,
21753 0xfe000000, 0x28000000, &NMD::BC_32_ , 0,
21754 0x0 }, /* BC[32] */
21755 { call_instruction , 0 , 0 , 32,
21756 0xfe000000, 0x2a000000, &NMD::BALC_32_ , 0,
21757 0x0 }, /* BALC[32] */
21758};
21759
21760
21761NMD::Pool NMD::P_BALRSC[2] = {
21762 { branch_instruction , 0 , 0 , 32,
21763 0xffe0f000, 0x48008000, &NMD::BRSC , 0,
21764 0x0 }, /* BRSC */
21765 { call_instruction , 0 , 0 , 32,
21766 0xfc00f000, 0x48008000, &NMD::BALRSC , &NMD::BALRSC_cond ,
21767 0x0 }, /* BALRSC */
21768};
21769
21770
21771NMD::Pool NMD::P_J[16] = {
21772 { call_instruction , 0 , 0 , 32,
21773 0xfc00f000, 0x48000000, &NMD::JALRC_32_ , 0,
21774 0x0 }, /* JALRC[32] */
21775 { call_instruction , 0 , 0 , 32,
21776 0xfc00f000, 0x48001000, &NMD::JALRC_HB , 0,
21777 0x0 }, /* JALRC.HB */
21778 { reserved_block , 0 , 0 , 32,
21779 0xfc00f000, 0x48002000, 0 , 0,
21780 0x0 }, /* P.J~*(2) */
21781 { reserved_block , 0 , 0 , 32,
21782 0xfc00f000, 0x48003000, 0 , 0,
21783 0x0 }, /* P.J~*(3) */
21784 { reserved_block , 0 , 0 , 32,
21785 0xfc00f000, 0x48004000, 0 , 0,
21786 0x0 }, /* P.J~*(4) */
21787 { reserved_block , 0 , 0 , 32,
21788 0xfc00f000, 0x48005000, 0 , 0,
21789 0x0 }, /* P.J~*(5) */
21790 { reserved_block , 0 , 0 , 32,
21791 0xfc00f000, 0x48006000, 0 , 0,
21792 0x0 }, /* P.J~*(6) */
21793 { reserved_block , 0 , 0 , 32,
21794 0xfc00f000, 0x48007000, 0 , 0,
21795 0x0 }, /* P.J~*(7) */
21796 { pool , P_BALRSC , 2 , 32,
21797 0xfc00f000, 0x48008000, 0 , 0,
21798 0x0 }, /* P.BALRSC */
21799 { reserved_block , 0 , 0 , 32,
21800 0xfc00f000, 0x48009000, 0 , 0,
21801 0x0 }, /* P.J~*(9) */
21802 { reserved_block , 0 , 0 , 32,
21803 0xfc00f000, 0x4800a000, 0 , 0,
21804 0x0 }, /* P.J~*(10) */
21805 { reserved_block , 0 , 0 , 32,
21806 0xfc00f000, 0x4800b000, 0 , 0,
21807 0x0 }, /* P.J~*(11) */
21808 { reserved_block , 0 , 0 , 32,
21809 0xfc00f000, 0x4800c000, 0 , 0,
21810 0x0 }, /* P.J~*(12) */
21811 { reserved_block , 0 , 0 , 32,
21812 0xfc00f000, 0x4800d000, 0 , 0,
21813 0x0 }, /* P.J~*(13) */
21814 { reserved_block , 0 , 0 , 32,
21815 0xfc00f000, 0x4800e000, 0 , 0,
21816 0x0 }, /* P.J~*(14) */
21817 { reserved_block , 0 , 0 , 32,
21818 0xfc00f000, 0x4800f000, 0 , 0,
21819 0x0 }, /* P.J~*(15) */
21820};
21821
21822
21823NMD::Pool NMD::P_BR3A[32] = {
21824 { branch_instruction , 0 , 0 , 32,
21825 0xfc1fc000, 0x88004000, &NMD::BC1EQZC , 0,
21826 CP1_ }, /* BC1EQZC */
21827 { branch_instruction , 0 , 0 , 32,
21828 0xfc1fc000, 0x88014000, &NMD::BC1NEZC , 0,
21829 CP1_ }, /* BC1NEZC */
21830 { branch_instruction , 0 , 0 , 32,
21831 0xfc1fc000, 0x88024000, &NMD::BC2EQZC , 0,
21832 CP2_ }, /* BC2EQZC */
21833 { branch_instruction , 0 , 0 , 32,
21834 0xfc1fc000, 0x88034000, &NMD::BC2NEZC , 0,
21835 CP2_ }, /* BC2NEZC */
21836 { branch_instruction , 0 , 0 , 32,
21837 0xfc1fc000, 0x88044000, &NMD::BPOSGE32C , 0,
21838 DSP_ }, /* BPOSGE32C */
21839 { reserved_block , 0 , 0 , 32,
21840 0xfc1fc000, 0x88054000, 0 , 0,
21841 0x0 }, /* P.BR3A~*(5) */
21842 { reserved_block , 0 , 0 , 32,
21843 0xfc1fc000, 0x88064000, 0 , 0,
21844 0x0 }, /* P.BR3A~*(6) */
21845 { reserved_block , 0 , 0 , 32,
21846 0xfc1fc000, 0x88074000, 0 , 0,
21847 0x0 }, /* P.BR3A~*(7) */
21848 { reserved_block , 0 , 0 , 32,
21849 0xfc1fc000, 0x88084000, 0 , 0,
21850 0x0 }, /* P.BR3A~*(8) */
21851 { reserved_block , 0 , 0 , 32,
21852 0xfc1fc000, 0x88094000, 0 , 0,
21853 0x0 }, /* P.BR3A~*(9) */
21854 { reserved_block , 0 , 0 , 32,
21855 0xfc1fc000, 0x880a4000, 0 , 0,
21856 0x0 }, /* P.BR3A~*(10) */
21857 { reserved_block , 0 , 0 , 32,
21858 0xfc1fc000, 0x880b4000, 0 , 0,
21859 0x0 }, /* P.BR3A~*(11) */
21860 { reserved_block , 0 , 0 , 32,
21861 0xfc1fc000, 0x880c4000, 0 , 0,
21862 0x0 }, /* P.BR3A~*(12) */
21863 { reserved_block , 0 , 0 , 32,
21864 0xfc1fc000, 0x880d4000, 0 , 0,
21865 0x0 }, /* P.BR3A~*(13) */
21866 { reserved_block , 0 , 0 , 32,
21867 0xfc1fc000, 0x880e4000, 0 , 0,
21868 0x0 }, /* P.BR3A~*(14) */
21869 { reserved_block , 0 , 0 , 32,
21870 0xfc1fc000, 0x880f4000, 0 , 0,
21871 0x0 }, /* P.BR3A~*(15) */
21872 { reserved_block , 0 , 0 , 32,
21873 0xfc1fc000, 0x88104000, 0 , 0,
21874 0x0 }, /* P.BR3A~*(16) */
21875 { reserved_block , 0 , 0 , 32,
21876 0xfc1fc000, 0x88114000, 0 , 0,
21877 0x0 }, /* P.BR3A~*(17) */
21878 { reserved_block , 0 , 0 , 32,
21879 0xfc1fc000, 0x88124000, 0 , 0,
21880 0x0 }, /* P.BR3A~*(18) */
21881 { reserved_block , 0 , 0 , 32,
21882 0xfc1fc000, 0x88134000, 0 , 0,
21883 0x0 }, /* P.BR3A~*(19) */
21884 { reserved_block , 0 , 0 , 32,
21885 0xfc1fc000, 0x88144000, 0 , 0,
21886 0x0 }, /* P.BR3A~*(20) */
21887 { reserved_block , 0 , 0 , 32,
21888 0xfc1fc000, 0x88154000, 0 , 0,
21889 0x0 }, /* P.BR3A~*(21) */
21890 { reserved_block , 0 , 0 , 32,
21891 0xfc1fc000, 0x88164000, 0 , 0,
21892 0x0 }, /* P.BR3A~*(22) */
21893 { reserved_block , 0 , 0 , 32,
21894 0xfc1fc000, 0x88174000, 0 , 0,
21895 0x0 }, /* P.BR3A~*(23) */
21896 { reserved_block , 0 , 0 , 32,
21897 0xfc1fc000, 0x88184000, 0 , 0,
21898 0x0 }, /* P.BR3A~*(24) */
21899 { reserved_block , 0 , 0 , 32,
21900 0xfc1fc000, 0x88194000, 0 , 0,
21901 0x0 }, /* P.BR3A~*(25) */
21902 { reserved_block , 0 , 0 , 32,
21903 0xfc1fc000, 0x881a4000, 0 , 0,
21904 0x0 }, /* P.BR3A~*(26) */
21905 { reserved_block , 0 , 0 , 32,
21906 0xfc1fc000, 0x881b4000, 0 , 0,
21907 0x0 }, /* P.BR3A~*(27) */
21908 { reserved_block , 0 , 0 , 32,
21909 0xfc1fc000, 0x881c4000, 0 , 0,
21910 0x0 }, /* P.BR3A~*(28) */
21911 { reserved_block , 0 , 0 , 32,
21912 0xfc1fc000, 0x881d4000, 0 , 0,
21913 0x0 }, /* P.BR3A~*(29) */
21914 { reserved_block , 0 , 0 , 32,
21915 0xfc1fc000, 0x881e4000, 0 , 0,
21916 0x0 }, /* P.BR3A~*(30) */
21917 { reserved_block , 0 , 0 , 32,
21918 0xfc1fc000, 0x881f4000, 0 , 0,
21919 0x0 }, /* P.BR3A~*(31) */
21920};
21921
21922
21923NMD::Pool NMD::P_BR1[4] = {
21924 { branch_instruction , 0 , 0 , 32,
21925 0xfc00c000, 0x88000000, &NMD::BEQC_32_ , 0,
21926 0x0 }, /* BEQC[32] */
21927 { pool , P_BR3A , 32 , 32,
21928 0xfc00c000, 0x88004000, 0 , 0,
21929 0x0 }, /* P.BR3A */
21930 { branch_instruction , 0 , 0 , 32,
21931 0xfc00c000, 0x88008000, &NMD::BGEC , 0,
21932 0x0 }, /* BGEC */
21933 { branch_instruction , 0 , 0 , 32,
21934 0xfc00c000, 0x8800c000, &NMD::BGEUC , 0,
21935 0x0 }, /* BGEUC */
21936};
21937
21938
21939NMD::Pool NMD::P_BR2[4] = {
21940 { branch_instruction , 0 , 0 , 32,
21941 0xfc00c000, 0xa8000000, &NMD::BNEC_32_ , 0,
21942 0x0 }, /* BNEC[32] */
21943 { reserved_block , 0 , 0 , 32,
21944 0xfc00c000, 0xa8004000, 0 , 0,
21945 0x0 }, /* P.BR2~*(1) */
21946 { branch_instruction , 0 , 0 , 32,
21947 0xfc00c000, 0xa8008000, &NMD::BLTC , 0,
21948 0x0 }, /* BLTC */
21949 { branch_instruction , 0 , 0 , 32,
21950 0xfc00c000, 0xa800c000, &NMD::BLTUC , 0,
21951 0x0 }, /* BLTUC */
21952};
21953
21954
21955NMD::Pool NMD::P_BRI[8] = {
21956 { branch_instruction , 0 , 0 , 32,
21957 0xfc1c0000, 0xc8000000, &NMD::BEQIC , 0,
21958 0x0 }, /* BEQIC */
21959 { branch_instruction , 0 , 0 , 32,
21960 0xfc1c0000, 0xc8040000, &NMD::BBEQZC , 0,
21961 XMMS_ }, /* BBEQZC */
21962 { branch_instruction , 0 , 0 , 32,
21963 0xfc1c0000, 0xc8080000, &NMD::BGEIC , 0,
21964 0x0 }, /* BGEIC */
21965 { branch_instruction , 0 , 0 , 32,
21966 0xfc1c0000, 0xc80c0000, &NMD::BGEIUC , 0,
21967 0x0 }, /* BGEIUC */
21968 { branch_instruction , 0 , 0 , 32,
21969 0xfc1c0000, 0xc8100000, &NMD::BNEIC , 0,
21970 0x0 }, /* BNEIC */
21971 { branch_instruction , 0 , 0 , 32,
21972 0xfc1c0000, 0xc8140000, &NMD::BBNEZC , 0,
21973 XMMS_ }, /* BBNEZC */
21974 { branch_instruction , 0 , 0 , 32,
21975 0xfc1c0000, 0xc8180000, &NMD::BLTIC , 0,
21976 0x0 }, /* BLTIC */
21977 { branch_instruction , 0 , 0 , 32,
21978 0xfc1c0000, 0xc81c0000, &NMD::BLTIUC , 0,
21979 0x0 }, /* BLTIUC */
21980};
21981
21982
21983NMD::Pool NMD::P32[32] = {
21984 { pool , P_ADDIU , 2 , 32,
21985 0xfc000000, 0x00000000, 0 , 0,
21986 0x0 }, /* P.ADDIU */
21987 { pool , P32A , 8 , 32,
21988 0xfc000000, 0x20000000, 0 , 0,
21989 0x0 }, /* P32A */
21990 { pool , P_GP_W , 4 , 32,
21991 0xfc000000, 0x40000000, 0 , 0,
21992 0x0 }, /* P.GP.W */
21993 { pool , POOL48I , 32 , 48,
21994 0xfc0000000000ull, 0x600000000000ull, 0 , 0,
21995 0x0 }, /* POOL48I */
21996 { pool , P_U12 , 16 , 32,
21997 0xfc000000, 0x80000000, 0 , 0,
21998 0x0 }, /* P.U12 */
21999 { pool , POOL32F , 8 , 32,
22000 0xfc000000, 0xa0000000, 0 , 0,
22001 CP1_ }, /* POOL32F */
22002 { pool , POOL32S , 8 , 32,
22003 0xfc000000, 0xc0000000, 0 , 0,
22004 0x0 }, /* POOL32S */
22005 { pool , P_LUI , 2 , 32,
22006 0xfc000000, 0xe0000000, 0 , 0,
22007 0x0 }, /* P.LUI */
22008 { instruction , 0 , 0 , 32,
22009 0xfc000000, 0x04000000, &NMD::ADDIUPC_32_ , 0,
22010 0x0 }, /* ADDIUPC[32] */
22011 { reserved_block , 0 , 0 , 32,
22012 0xfc000000, 0x24000000, 0 , 0,
22013 0x0 }, /* P32~*(5) */
22014 { pool , P_GP_BH , 8 , 32,
22015 0xfc000000, 0x44000000, 0 , 0,
22016 0x0 }, /* P.GP.BH */
22017 { reserved_block , 0 , 0 , 32,
22018 0xfc000000, 0x64000000, 0 , 0,
22019 0x0 }, /* P32~*(13) */
22020 { pool , P_LS_U12 , 16 , 32,
22021 0xfc000000, 0x84000000, 0 , 0,
22022 0x0 }, /* P.LS.U12 */
22023 { pool , P_LS_S9 , 8 , 32,
22024 0xfc000000, 0xa4000000, 0 , 0,
22025 0x0 }, /* P.LS.S9 */
22026 { reserved_block , 0 , 0 , 32,
22027 0xfc000000, 0xc4000000, 0 , 0,
22028 0x0 }, /* P32~*(25) */
22029 { reserved_block , 0 , 0 , 32,
22030 0xfc000000, 0xe4000000, 0 , 0,
22031 0x0 }, /* P32~*(29) */
22032 { call_instruction , 0 , 0 , 32,
22033 0xfc000000, 0x08000000, &NMD::MOVE_BALC , 0,
22034 XMMS_ }, /* MOVE.BALC */
22035 { pool , P_BAL , 2 , 32,
22036 0xfc000000, 0x28000000, 0 , 0,
22037 0x0 }, /* P.BAL */
22038 { pool , P_J , 16 , 32,
22039 0xfc000000, 0x48000000, 0 , 0,
22040 0x0 }, /* P.J */
22041 { reserved_block , 0 , 0 , 32,
22042 0xfc000000, 0x68000000, 0 , 0,
22043 0x0 }, /* P32~*(14) */
22044 { pool , P_BR1 , 4 , 32,
22045 0xfc000000, 0x88000000, 0 , 0,
22046 0x0 }, /* P.BR1 */
22047 { pool , P_BR2 , 4 , 32,
22048 0xfc000000, 0xa8000000, 0 , 0,
22049 0x0 }, /* P.BR2 */
22050 { pool , P_BRI , 8 , 32,
22051 0xfc000000, 0xc8000000, 0 , 0,
22052 0x0 }, /* P.BRI */
22053 { reserved_block , 0 , 0 , 32,
22054 0xfc000000, 0xe8000000, 0 , 0,
22055 0x0 }, /* P32~*(30) */
22056 { reserved_block , 0 , 0 , 32,
22057 0xfc000000, 0x0c000000, 0 , 0,
22058 0x0 }, /* P32~*(3) */
22059 { reserved_block , 0 , 0 , 32,
22060 0xfc000000, 0x2c000000, 0 , 0,
22061 0x0 }, /* P32~*(7) */
22062 { reserved_block , 0 , 0 , 32,
22063 0xfc000000, 0x4c000000, 0 , 0,
22064 0x0 }, /* P32~*(11) */
22065 { reserved_block , 0 , 0 , 32,
22066 0xfc000000, 0x6c000000, 0 , 0,
22067 0x0 }, /* P32~*(15) */
22068 { reserved_block , 0 , 0 , 32,
22069 0xfc000000, 0x8c000000, 0 , 0,
22070 0x0 }, /* P32~*(19) */
22071 { reserved_block , 0 , 0 , 32,
22072 0xfc000000, 0xac000000, 0 , 0,
22073 0x0 }, /* P32~*(23) */
22074 { reserved_block , 0 , 0 , 32,
22075 0xfc000000, 0xcc000000, 0 , 0,
22076 0x0 }, /* P32~*(27) */
22077 { reserved_block , 0 , 0 , 32,
22078 0xfc000000, 0xec000000, 0 , 0,
22079 0x0 }, /* P32~*(31) */
22080};
22081
22082
22083NMD::Pool NMD::P16_SYSCALL[2] = {
22084 { instruction , 0 , 0 , 16,
22085 0xfffc , 0x1008 , &NMD::SYSCALL_16_ , 0,
22086 0x0 }, /* SYSCALL[16] */
22087 { instruction , 0 , 0 , 16,
22088 0xfffc , 0x100c , &NMD::HYPCALL_16_ , 0,
22089 CP0_ | VZ_ }, /* HYPCALL[16] */
22090};
22091
22092
22093NMD::Pool NMD::P16_RI[4] = {
22094 { reserved_block , 0 , 0 , 16,
22095 0xfff8 , 0x1000 , 0 , 0,
22096 0x0 }, /* P16.RI~*(0) */
22097 { pool , P16_SYSCALL , 2 , 16,
22098 0xfff8 , 0x1008 , 0 , 0,
22099 0x0 }, /* P16.SYSCALL */
22100 { instruction , 0 , 0 , 16,
22101 0xfff8 , 0x1010 , &NMD::BREAK_16_ , 0,
22102 0x0 }, /* BREAK[16] */
22103 { instruction , 0 , 0 , 16,
22104 0xfff8 , 0x1018 , &NMD::SDBBP_16_ , 0,
22105 EJTAG_ }, /* SDBBP[16] */
22106};
22107
22108
22109NMD::Pool NMD::P16_MV[2] = {
22110 { pool , P16_RI , 4 , 16,
22111 0xffe0 , 0x1000 , 0 , 0,
22112 0x0 }, /* P16.RI */
22113 { instruction , 0 , 0 , 16,
22114 0xfc00 , 0x1000 , &NMD::MOVE , &NMD::MOVE_cond ,
22115 0x0 }, /* MOVE */
22116};
22117
22118
22119NMD::Pool NMD::P16_SHIFT[2] = {
22120 { instruction , 0 , 0 , 16,
22121 0xfc08 , 0x3000 , &NMD::SLL_16_ , 0,
22122 0x0 }, /* SLL[16] */
22123 { instruction , 0 , 0 , 16,
22124 0xfc08 , 0x3008 , &NMD::SRL_16_ , 0,
22125 0x0 }, /* SRL[16] */
22126};
22127
22128
22129NMD::Pool NMD::POOL16C_00[4] = {
22130 { instruction , 0 , 0 , 16,
22131 0xfc0f , 0x5000 , &NMD::NOT_16_ , 0,
22132 0x0 }, /* NOT[16] */
22133 { instruction , 0 , 0 , 16,
22134 0xfc0f , 0x5004 , &NMD::XOR_16_ , 0,
22135 0x0 }, /* XOR[16] */
22136 { instruction , 0 , 0 , 16,
22137 0xfc0f , 0x5008 , &NMD::AND_16_ , 0,
22138 0x0 }, /* AND[16] */
22139 { instruction , 0 , 0 , 16,
22140 0xfc0f , 0x500c , &NMD::OR_16_ , 0,
22141 0x0 }, /* OR[16] */
22142};
22143
22144
22145NMD::Pool NMD::POOL16C_0[2] = {
22146 { pool , POOL16C_00 , 4 , 16,
22147 0xfc03 , 0x5000 , 0 , 0,
22148 0x0 }, /* POOL16C_00 */
22149 { reserved_block , 0 , 0 , 16,
22150 0xfc03 , 0x5002 , 0 , 0,
22151 0x0 }, /* POOL16C_0~*(1) */
22152};
22153
22154
22155NMD::Pool NMD::P16C[2] = {
22156 { pool , POOL16C_0 , 2 , 16,
22157 0xfc01 , 0x5000 , 0 , 0,
22158 0x0 }, /* POOL16C_0 */
22159 { instruction , 0 , 0 , 16,
22160 0xfc01 , 0x5001 , &NMD::LWXS_16_ , 0,
22161 0x0 }, /* LWXS[16] */
22162};
22163
22164
22165NMD::Pool NMD::P16_A1[2] = {
22166 { reserved_block , 0 , 0 , 16,
22167 0xfc40 , 0x7000 , 0 , 0,
22168 0x0 }, /* P16.A1~*(0) */
22169 { instruction , 0 , 0 , 16,
22170 0xfc40 , 0x7040 , &NMD::ADDIU_R1_SP_ , 0,
22171 0x0 }, /* ADDIU[R1.SP] */
22172};
22173
22174
22175NMD::Pool NMD::P_ADDIU_RS5_[2] = {
22176 { instruction , 0 , 0 , 16,
22177 0xffe8 , 0x9008 , &NMD::NOP_16_ , 0,
22178 0x0 }, /* NOP[16] */
22179 { instruction , 0 , 0 , 16,
22180 0xfc08 , 0x9008 , &NMD::ADDIU_RS5_ , &NMD::ADDIU_RS5__cond ,
22181 0x0 }, /* ADDIU[RS5] */
22182};
22183
22184
22185NMD::Pool NMD::P16_A2[2] = {
22186 { instruction , 0 , 0 , 16,
22187 0xfc08 , 0x9000 , &NMD::ADDIU_R2_ , 0,
22188 0x0 }, /* ADDIU[R2] */
22189 { pool , P_ADDIU_RS5_ , 2 , 16,
22190 0xfc08 , 0x9008 , 0 , 0,
22191 0x0 }, /* P.ADDIU[RS5] */
22192};
22193
22194
22195NMD::Pool NMD::P16_ADDU[2] = {
22196 { instruction , 0 , 0 , 16,
22197 0xfc01 , 0xb000 , &NMD::ADDU_16_ , 0,
22198 0x0 }, /* ADDU[16] */
22199 { instruction , 0 , 0 , 16,
22200 0xfc01 , 0xb001 , &NMD::SUBU_16_ , 0,
22201 0x0 }, /* SUBU[16] */
22202};
22203
22204
22205NMD::Pool NMD::P16_JRC[2] = {
22206 { branch_instruction , 0 , 0 , 16,
22207 0xfc1f , 0xd800 , &NMD::JRC , 0,
22208 0x0 }, /* JRC */
22209 { call_instruction , 0 , 0 , 16,
22210 0xfc1f , 0xd810 , &NMD::JALRC_16_ , 0,
22211 0x0 }, /* JALRC[16] */
22212};
22213
22214
22215NMD::Pool NMD::P16_BR1[2] = {
22216 { branch_instruction , 0 , 0 , 16,
22217 0xfc00 , 0xd800 , &NMD::BEQC_16_ , &NMD::BEQC_16__cond ,
22218 XMMS_ }, /* BEQC[16] */
22219 { branch_instruction , 0 , 0 , 16,
22220 0xfc00 , 0xd800 , &NMD::BNEC_16_ , &NMD::BNEC_16__cond ,
22221 XMMS_ }, /* BNEC[16] */
22222};
22223
22224
22225NMD::Pool NMD::P16_BR[2] = {
22226 { pool , P16_JRC , 2 , 16,
22227 0xfc0f , 0xd800 , 0 , 0,
22228 0x0 }, /* P16.JRC */
22229 { pool , P16_BR1 , 2 , 16,
22230 0xfc00 , 0xd800 , 0 , &NMD::P16_BR1_cond ,
22231 0x0 }, /* P16.BR1 */
22232};
22233
22234
22235NMD::Pool NMD::P16_SR[2] = {
22236 { instruction , 0 , 0 , 16,
22237 0xfd00 , 0x1c00 , &NMD::SAVE_16_ , 0,
22238 0x0 }, /* SAVE[16] */
22239 { return_instruction , 0 , 0 , 16,
22240 0xfd00 , 0x1d00 , &NMD::RESTORE_JRC_16_ , 0,
22241 0x0 }, /* RESTORE.JRC[16] */
22242};
22243
22244
22245NMD::Pool NMD::P16_4X4[4] = {
22246 { instruction , 0 , 0 , 16,
22247 0xfd08 , 0x3c00 , &NMD::ADDU_4X4_ , 0,
22248 XMMS_ }, /* ADDU[4X4] */
22249 { instruction , 0 , 0 , 16,
22250 0xfd08 , 0x3c08 , &NMD::MUL_4X4_ , 0,
22251 XMMS_ }, /* MUL[4X4] */
22252 { reserved_block , 0 , 0 , 16,
22253 0xfd08 , 0x3d00 , 0 , 0,
22254 0x0 }, /* P16.4X4~*(2) */
22255 { reserved_block , 0 , 0 , 16,
22256 0xfd08 , 0x3d08 , 0 , 0,
22257 0x0 }, /* P16.4X4~*(3) */
22258};
22259
22260
22261NMD::Pool NMD::P16_LB[4] = {
22262 { instruction , 0 , 0 , 16,
22263 0xfc0c , 0x5c00 , &NMD::LB_16_ , 0,
22264 0x0 }, /* LB[16] */
22265 { instruction , 0 , 0 , 16,
22266 0xfc0c , 0x5c04 , &NMD::SB_16_ , 0,
22267 0x0 }, /* SB[16] */
22268 { instruction , 0 , 0 , 16,
22269 0xfc0c , 0x5c08 , &NMD::LBU_16_ , 0,
22270 0x0 }, /* LBU[16] */
22271 { reserved_block , 0 , 0 , 16,
22272 0xfc0c , 0x5c0c , 0 , 0,
22273 0x0 }, /* P16.LB~*(3) */
22274};
22275
22276
22277NMD::Pool NMD::P16_LH[4] = {
22278 { instruction , 0 , 0 , 16,
22279 0xfc09 , 0x7c00 , &NMD::LH_16_ , 0,
22280 0x0 }, /* LH[16] */
22281 { instruction , 0 , 0 , 16,
22282 0xfc09 , 0x7c01 , &NMD::SH_16_ , 0,
22283 0x0 }, /* SH[16] */
22284 { instruction , 0 , 0 , 16,
22285 0xfc09 , 0x7c08 , &NMD::LHU_16_ , 0,
22286 0x0 }, /* LHU[16] */
22287 { reserved_block , 0 , 0 , 16,
22288 0xfc09 , 0x7c09 , 0 , 0,
22289 0x0 }, /* P16.LH~*(3) */
22290};
22291
22292
22293NMD::Pool NMD::P16[32] = {
22294 { pool , P16_MV , 2 , 16,
22295 0xfc00 , 0x1000 , 0 , 0,
22296 0x0 }, /* P16.MV */
22297 { pool , P16_SHIFT , 2 , 16,
22298 0xfc00 , 0x3000 , 0 , 0,
22299 0x0 }, /* P16.SHIFT */
22300 { pool , P16C , 2 , 16,
22301 0xfc00 , 0x5000 , 0 , 0,
22302 0x0 }, /* P16C */
22303 { pool , P16_A1 , 2 , 16,
22304 0xfc00 , 0x7000 , 0 , 0,
22305 0x0 }, /* P16.A1 */
22306 { pool , P16_A2 , 2 , 16,
22307 0xfc00 , 0x9000 , 0 , 0,
22308 0x0 }, /* P16.A2 */
22309 { pool , P16_ADDU , 2 , 16,
22310 0xfc00 , 0xb000 , 0 , 0,
22311 0x0 }, /* P16.ADDU */
22312 { instruction , 0 , 0 , 16,
22313 0xfc00 , 0xd000 , &NMD::LI_16_ , 0,
22314 0x0 }, /* LI[16] */
22315 { instruction , 0 , 0 , 16,
22316 0xfc00 , 0xf000 , &NMD::ANDI_16_ , 0,
22317 0x0 }, /* ANDI[16] */
22318 { instruction , 0 , 0 , 16,
22319 0xfc00 , 0x1400 , &NMD::LW_16_ , 0,
22320 0x0 }, /* LW[16] */
22321 { instruction , 0 , 0 , 16,
22322 0xfc00 , 0x3400 , &NMD::LW_SP_ , 0,
22323 0x0 }, /* LW[SP] */
22324 { instruction , 0 , 0 , 16,
22325 0xfc00 , 0x5400 , &NMD::LW_GP16_ , 0,
22326 0x0 }, /* LW[GP16] */
22327 { instruction , 0 , 0 , 16,
22328 0xfc00 , 0x7400 , &NMD::LW_4X4_ , 0,
22329 XMMS_ }, /* LW[4X4] */
22330 { instruction , 0 , 0 , 16,
22331 0xfc00 , 0x9400 , &NMD::SW_16_ , 0,
22332 0x0 }, /* SW[16] */
22333 { instruction , 0 , 0 , 16,
22334 0xfc00 , 0xb400 , &NMD::SW_SP_ , 0,
22335 0x0 }, /* SW[SP] */
22336 { instruction , 0 , 0 , 16,
22337 0xfc00 , 0xd400 , &NMD::SW_GP16_ , 0,
22338 0x0 }, /* SW[GP16] */
22339 { instruction , 0 , 0 , 16,
22340 0xfc00 , 0xf400 , &NMD::SW_4X4_ , 0,
22341 XMMS_ }, /* SW[4X4] */
22342 { branch_instruction , 0 , 0 , 16,
22343 0xfc00 , 0x1800 , &NMD::BC_16_ , 0,
22344 0x0 }, /* BC[16] */
22345 { call_instruction , 0 , 0 , 16,
22346 0xfc00 , 0x3800 , &NMD::BALC_16_ , 0,
22347 0x0 }, /* BALC[16] */
22348 { reserved_block , 0 , 0 , 16,
22349 0xfc00 , 0x5800 , 0 , 0,
22350 0x0 }, /* P16~*(10) */
22351 { reserved_block , 0 , 0 , 16,
22352 0xfc00 , 0x7800 , 0 , 0,
22353 0x0 }, /* P16~*(14) */
22354 { branch_instruction , 0 , 0 , 16,
22355 0xfc00 , 0x9800 , &NMD::BEQZC_16_ , 0,
22356 0x0 }, /* BEQZC[16] */
22357 { branch_instruction , 0 , 0 , 16,
22358 0xfc00 , 0xb800 , &NMD::BNEZC_16_ , 0,
22359 0x0 }, /* BNEZC[16] */
22360 { pool , P16_BR , 2 , 16,
22361 0xfc00 , 0xd800 , 0 , 0,
22362 0x0 }, /* P16.BR */
22363 { reserved_block , 0 , 0 , 16,
22364 0xfc00 , 0xf800 , 0 , 0,
22365 0x0 }, /* P16~*(30) */
22366 { pool , P16_SR , 2 , 16,
22367 0xfc00 , 0x1c00 , 0 , 0,
22368 0x0 }, /* P16.SR */
22369 { pool , P16_4X4 , 4 , 16,
22370 0xfc00 , 0x3c00 , 0 , 0,
22371 0x0 }, /* P16.4X4 */
22372 { pool , P16_LB , 4 , 16,
22373 0xfc00 , 0x5c00 , 0 , 0,
22374 0x0 }, /* P16.LB */
22375 { pool , P16_LH , 4 , 16,
22376 0xfc00 , 0x7c00 , 0 , 0,
22377 0x0 }, /* P16.LH */
22378 { reserved_block , 0 , 0 , 16,
22379 0xfc00 , 0x9c00 , 0 , 0,
22380 0x0 }, /* P16~*(19) */
22381 { instruction , 0 , 0 , 16,
22382 0xfc00 , 0xbc00 , &NMD::MOVEP , 0,
22383 XMMS_ }, /* MOVEP */
22384 { reserved_block , 0 , 0 , 16,
22385 0xfc00 , 0xdc00 , 0 , 0,
22386 0x0 }, /* P16~*(27) */
22387 { instruction , 0 , 0 , 16,
22388 0xfc00 , 0xfc00 , &NMD::MOVEP_REV_ , 0,
22389 XMMS_ }, /* MOVEP[REV] */
22390};
22391
22392
22393NMD::Pool NMD::MAJOR[2] = {
22394 { pool , P32 , 32 , 32,
22395 0x10000000, 0x00000000, 0 , 0,
22396 0x0 }, /* P32 */
22397 { pool , P16 , 32 , 16,
22398 0x1000 , 0x1000 , 0 , 0,
22399 0x0 }, /* P16 */
22400};
22401