]> git.proxmox.com Git - mirror_qemu.git/blob - disas/nanomips.cpp
Merge tag 'pull-nbd-2021-11-16' of https://repo.or.cz/qemu/ericb into staging
[mirror_qemu.git] / disas / nanomips.cpp
1 /*
2 * Source file for nanoMIPS disassembler component of QEMU
3 *
4 * Copyright (C) 2018 Wave Computing, Inc.
5 * Copyright (C) 2018 Matthew Fortune <matthew.fortune@mips.com>
6 * Copyright (C) 2018 Aleksandar Markovic <amarkovic@wavecomp.com>
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20 *
21 */
22
23 /*
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
30 #include "qemu/osdep.h"
31 #include "disas/dis-asm.h"
32
33 #include <cstring>
34 #include <stdexcept>
35 #include <sstream>
36 #include <stdio.h>
37 #include <stdarg.h>
38
39 #include "nanomips.h"
40
41 #define IMGASSERTONCE(test)
42
43
44 int nanomips_dis(char *buf,
45 unsigned address,
46 unsigned short one,
47 unsigned short two,
48 unsigned short three)
49 {
50 std::string disasm;
51 uint16 bits[3] = {one, two, three};
52
53 NMD::TABLE_ENTRY_TYPE type;
54 NMD d(address, NMD::ALL_ATTRIBUTES);
55 int size = d.Disassemble(bits, disasm, type);
56
57 strcpy(buf, disasm.c_str());
58 return size;
59 }
60
61 int print_insn_nanomips(bfd_vma memaddr, struct disassemble_info *info)
62 {
63 int status;
64 bfd_byte buffer[2];
65 uint16_t insn1 = 0, insn2 = 0, insn3 = 0;
66 char buf[200];
67
68 info->bytes_per_chunk = 2;
69 info->display_endian = info->endian;
70 info->insn_info_valid = 1;
71 info->branch_delay_insns = 0;
72 info->data_size = 0;
73 info->insn_type = dis_nonbranch;
74 info->target = 0;
75 info->target2 = 0;
76
77 status = (*info->read_memory_func)(memaddr, buffer, 2, info);
78 if (status != 0) {
79 (*info->memory_error_func)(status, memaddr, info);
80 return -1;
81 }
82
83 if (info->endian == BFD_ENDIAN_BIG) {
84 insn1 = bfd_getb16(buffer);
85 } else {
86 insn1 = bfd_getl16(buffer);
87 }
88 (*info->fprintf_func)(info->stream, "%04x ", insn1);
89
90 /* Handle 32-bit opcodes. */
91 if ((insn1 & 0x1000) == 0) {
92 status = (*info->read_memory_func)(memaddr + 2, buffer, 2, info);
93 if (status != 0) {
94 (*info->memory_error_func)(status, memaddr + 2, info);
95 return -1;
96 }
97
98 if (info->endian == BFD_ENDIAN_BIG) {
99 insn2 = bfd_getb16(buffer);
100 } else {
101 insn2 = bfd_getl16(buffer);
102 }
103 (*info->fprintf_func)(info->stream, "%04x ", insn2);
104 } else {
105 (*info->fprintf_func)(info->stream, " ");
106 }
107 /* Handle 48-bit opcodes. */
108 if ((insn1 >> 10) == 0x18) {
109 status = (*info->read_memory_func)(memaddr + 4, buffer, 2, info);
110 if (status != 0) {
111 (*info->memory_error_func)(status, memaddr + 4, info);
112 return -1;
113 }
114
115 if (info->endian == BFD_ENDIAN_BIG) {
116 insn3 = bfd_getb16(buffer);
117 } else {
118 insn3 = bfd_getl16(buffer);
119 }
120 (*info->fprintf_func)(info->stream, "%04x ", insn3);
121 } else {
122 (*info->fprintf_func)(info->stream, " ");
123 }
124
125 int length = nanomips_dis(buf, memaddr, insn1, insn2, insn3);
126
127 /* FIXME: Should probably use a hash table on the major opcode here. */
128
129 (*info->fprintf_func) (info->stream, "%s", buf);
130 if (length > 0) {
131 return length / 8;
132 }
133
134 info->insn_type = dis_noninsn;
135
136 return insn3 ? 6 : insn2 ? 4 : 2;
137 }
138
139
140 namespace img
141 {
142 address addr32(address a)
143 {
144 return a;
145 }
146
147 std::string format(const char *format, ...)
148 {
149 char buffer[256];
150 va_list args;
151 va_start(args, format);
152 int err = vsprintf(buffer, format, args);
153 if (err < 0) {
154 perror(buffer);
155 }
156 va_end(args);
157 return buffer;
158 }
159
160 std::string format(const char *format,
161 std::string s)
162 {
163 char buffer[256];
164
165 sprintf(buffer, format, s.c_str());
166
167 return buffer;
168 }
169
170 std::string format(const char *format,
171 std::string s1,
172 std::string s2)
173 {
174 char buffer[256];
175
176 sprintf(buffer, format, s1.c_str(), s2.c_str());
177
178 return buffer;
179 }
180
181 std::string format(const char *format,
182 std::string s1,
183 std::string s2,
184 std::string s3)
185 {
186 char buffer[256];
187
188 sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str());
189
190 return buffer;
191 }
192
193 std::string format(const char *format,
194 std::string s1,
195 std::string s2,
196 std::string s3,
197 std::string s4)
198 {
199 char buffer[256];
200
201 sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str(),
202 s4.c_str());
203
204 return buffer;
205 }
206
207 std::string format(const char *format,
208 std::string s1,
209 std::string s2,
210 std::string s3,
211 std::string s4,
212 std::string s5)
213 {
214 char buffer[256];
215
216 sprintf(buffer, format, s1.c_str(), s2.c_str(), s3.c_str(),
217 s4.c_str(), s5.c_str());
218
219 return buffer;
220 }
221
222 std::string format(const char *format,
223 uint64 d,
224 std::string s2)
225 {
226 char buffer[256];
227
228 sprintf(buffer, format, d, s2.c_str());
229
230 return buffer;
231 }
232
233 std::string format(const char *format,
234 std::string s1,
235 uint64 d,
236 std::string s2)
237 {
238 char buffer[256];
239
240 sprintf(buffer, format, s1.c_str(), d, s2.c_str());
241
242 return buffer;
243 }
244
245 std::string format(const char *format,
246 std::string s1,
247 std::string s2,
248 uint64 d)
249 {
250 char buffer[256];
251
252 sprintf(buffer, format, s1.c_str(), s2.c_str(), d);
253
254 return buffer;
255 }
256
257 char as_char(int c)
258 {
259 return static_cast<char>(c);
260 }
261 };
262
263
264 std::string to_string(img::address a)
265 {
266 char buffer[256];
267 sprintf(buffer, "0x%" PRIx64, a);
268 return buffer;
269 }
270
271
272 uint64 extract_bits(uint64 data, uint32 bit_offset, uint32 bit_size)
273 {
274 return (data << (64 - (bit_size + bit_offset))) >> (64 - bit_size);
275 }
276
277
278 int64 sign_extend(int64 data, int msb)
279 {
280 uint64 shift = 63 - msb;
281 return (data << shift) >> shift;
282 }
283
284
285 uint64 NMD::renumber_registers(uint64 index, uint64 *register_list,
286 size_t register_list_size)
287 {
288 if (index < register_list_size) {
289 return register_list[index];
290 }
291
292 throw std::runtime_error(img::format(
293 "Invalid register mapping index %" PRIu64
294 ", size of list = %zu",
295 index, register_list_size));
296 }
297
298
299 /*
300 * NMD::decode_gpr_gpr4() - decoder for 'gpr4' gpr encoding type
301 *
302 * Map a 4-bit code to the 5-bit register space according to this pattern:
303 *
304 * 1 0
305 * 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
306 * | | | | | | | | | | | | | | | |
307 * | | | | | | | | | | | | | | | |
308 * | | | | | | | | | | | ā””---------------ā”
309 * | | | | | | | | | | ā””---------------ā” |
310 * | | | | | | | | | ā””---------------ā” | |
311 * | | | | | | | | ā””---------------ā” | | |
312 * | | | | | | | | | | | | | | | |
313 * | | | | | | | | | | | | | | | |
314 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
315 * 3 2 1 0
316 *
317 * Used in handling following instructions:
318 *
319 * - ADDU[4X4]
320 * - LW[4X4]
321 * - MOVEP[REV]
322 * - MUL[4X4]
323 * - SW[4X4]
324 */
325 uint64 NMD::decode_gpr_gpr4(uint64 d)
326 {
327 static uint64 register_list[] = { 8, 9, 10, 11, 4, 5, 6, 7,
328 16, 17, 18, 19, 20, 21, 22, 23 };
329 return renumber_registers(d, register_list,
330 sizeof(register_list) / sizeof(register_list[0]));
331 }
332
333
334 /*
335 * NMD::decode_gpr_gpr4_zero() - decoder for 'gpr4.zero' gpr encoding type
336 *
337 * Map a 4-bit code to the 5-bit register space according to this pattern:
338 *
339 * 1 0
340 * 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
341 * | | | | | | | | | | | | | | | |
342 * | | | | | | | | | | | | ā””---------------------ā”
343 * | | | | | | | | | | | ā””---------------ā” |
344 * | | | | | | | | | | ā””---------------ā” | |
345 * | | | | | | | | | ā””---------------ā” | | |
346 * | | | | | | | | ā””---------------ā” | | | |
347 * | | | | | | | | | | | | | | | |
348 * | | | | | | | | | | | | | | | |
349 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
350 * 3 2 1 0
351 *
352 * This pattern is the same one used for 'gpr4' gpr encoding type, except for
353 * the input value 3, that is mapped to the output value 0 instead of 11.
354 *
355 * Used in handling following instructions:
356 *
357 * - MOVE.BALC
358 * - MOVEP
359 * - SW[4X4]
360 */
361 uint64 NMD::decode_gpr_gpr4_zero(uint64 d)
362 {
363 static uint64 register_list[] = { 8, 9, 10, 0, 4, 5, 6, 7,
364 16, 17, 18, 19, 20, 21, 22, 23 };
365 return renumber_registers(d, register_list,
366 sizeof(register_list) / sizeof(register_list[0]));
367 }
368
369
370 /*
371 * NMD::decode_gpr_gpr3() - decoder for 'gpr3' gpr encoding type
372 *
373 * Map a 3-bit code to the 5-bit register space according to this pattern:
374 *
375 * 7 6 5 4 3 2 1 0
376 * | | | | | | | |
377 * | | | | | | | |
378 * | | | ā””-----------------------ā”
379 * | | ā””-----------------------ā” |
380 * | ā””-----------------------ā” | |
381 * ā””-----------------------ā” | | |
382 * | | | | | | | |
383 * ā”Œ-------ā”˜ | | | | | | |
384 * | ā”Œ-------ā”˜ | | | | | |
385 * | | ā”Œ-------ā”˜ | | | | |
386 * | | | ā”Œ-------ā”˜ | | | |
387 * | | | | | | | |
388 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
389 * 3 2 1 0
390 *
391 * Used in handling following instructions:
392 *
393 * - ADDIU[R1.SP]
394 * - ADDIU[R2]
395 * - ADDU[16]
396 * - AND[16]
397 * - ANDI[16]
398 * - BEQC[16]
399 * - BEQZC[16]
400 * - BNEC[16]
401 * - BNEZC[16]
402 * - LB[16]
403 * - LBU[16]
404 * - LH[16]
405 * - LHU[16]
406 * - LI[16]
407 * - LW[16]
408 * - LW[GP16]
409 * - LWXS[16]
410 * - NOT[16]
411 * - OR[16]
412 * - SB[16]
413 * - SH[16]
414 * - SLL[16]
415 * - SRL[16]
416 * - SUBU[16]
417 * - SW[16]
418 * - XOR[16]
419 */
420 uint64 NMD::decode_gpr_gpr3(uint64 d)
421 {
422 static uint64 register_list[] = { 16, 17, 18, 19, 4, 5, 6, 7 };
423 return renumber_registers(d, register_list,
424 sizeof(register_list) / sizeof(register_list[0]));
425 }
426
427
428 /*
429 * NMD::decode_gpr_gpr3_src_store() - decoder for 'gpr3.src.store' gpr encoding
430 * type
431 *
432 * Map a 3-bit code to the 5-bit register space according to this pattern:
433 *
434 * 7 6 5 4 3 2 1 0
435 * | | | | | | | |
436 * | | | | | | | ā””-----------------------ā”
437 * | | | ā””-----------------------ā” |
438 * | | ā””-----------------------ā” | |
439 * | ā””-----------------------ā” | | |
440 * ā””-----------------------ā” | | | |
441 * | | | | | | | |
442 * ā”Œ-------ā”˜ | | | | | | |
443 * | ā”Œ-------ā”˜ | | | | | |
444 * | | ā”Œ-------ā”˜ | | | | |
445 * | | | | | | | |
446 * | | | | | | | |
447 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
448 * 3 2 1 0
449 *
450 * This pattern is the same one used for 'gpr3' gpr encoding type, except for
451 * the input value 0, that is mapped to the output value 0 instead of 16.
452 *
453 * Used in handling following instructions:
454 *
455 * - SB[16]
456 * - SH[16]
457 * - SW[16]
458 * - SW[GP16]
459 */
460 uint64 NMD::decode_gpr_gpr3_src_store(uint64 d)
461 {
462 static uint64 register_list[] = { 0, 17, 18, 19, 4, 5, 6, 7 };
463 return renumber_registers(d, register_list,
464 sizeof(register_list) / sizeof(register_list[0]));
465 }
466
467
468 /*
469 * NMD::decode_gpr_gpr2_reg1() - decoder for 'gpr2.reg1' gpr encoding type
470 *
471 * Map a 2-bit code to the 5-bit register space according to this pattern:
472 *
473 * 3 2 1 0
474 * | | | |
475 * | | | |
476 * | | | ā””-------------------ā”
477 * | | ā””-------------------ā” |
478 * | ā””-------------------ā” | |
479 * ā””-------------------ā” | | |
480 * | | | |
481 * | | | |
482 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
483 * 3 2 1 0
484 *
485 * Used in handling following instructions:
486 *
487 * - MOVEP
488 * - MOVEP[REV]
489 */
490 uint64 NMD::decode_gpr_gpr2_reg1(uint64 d)
491 {
492 static uint64 register_list[] = { 4, 5, 6, 7 };
493 return renumber_registers(d, register_list,
494 sizeof(register_list) / sizeof(register_list[0]));
495 }
496
497
498 /*
499 * NMD::decode_gpr_gpr2_reg2() - decoder for 'gpr2.reg2' gpr encoding type
500 *
501 * Map a 2-bit code to the 5-bit register space according to this pattern:
502 *
503 * 3 2 1 0
504 * | | | |
505 * | | | |
506 * | | | ā””-----------------ā”
507 * | | ā””-----------------ā” |
508 * | ā””-----------------ā” | |
509 * ā””-----------------ā” | | |
510 * | | | |
511 * | | | |
512 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
513 * 3 2 1 0
514 *
515 * Used in handling following instructions:
516 *
517 * - MOVEP
518 * - MOVEP[REV]
519 */
520 uint64 NMD::decode_gpr_gpr2_reg2(uint64 d)
521 {
522 static uint64 register_list[] = { 5, 6, 7, 8 };
523 return renumber_registers(d, register_list,
524 sizeof(register_list) / sizeof(register_list[0]));
525 }
526
527
528 /*
529 * NMD::decode_gpr_gpr1() - decoder for 'gpr1' gpr encoding type
530 *
531 * Map a 1-bit code to the 5-bit register space according to this pattern:
532 *
533 * 1 0
534 * | |
535 * | |
536 * | ā””---------------------ā”
537 * ā””---------------------ā” |
538 * | |
539 * | |
540 * | |
541 * | |
542 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
543 * 3 2 1 0
544 *
545 * Used in handling following instruction:
546 *
547 * - MOVE.BALC
548 */
549 uint64 NMD::decode_gpr_gpr1(uint64 d)
550 {
551 static uint64 register_list[] = { 4, 5 };
552 return renumber_registers(d, register_list,
553 sizeof(register_list) / sizeof(register_list[0]));
554 }
555
556
557 uint64 NMD::copy(uint64 d)
558 {
559 return d;
560 }
561
562
563 int64 NMD::copy(int64 d)
564 {
565 return d;
566 }
567
568
569 int64 NMD::neg_copy(uint64 d)
570 {
571 return 0ll - d;
572 }
573
574
575 int64 NMD::neg_copy(int64 d)
576 {
577 return -d;
578 }
579
580
581 /* strange wrapper around gpr3 */
582 uint64 NMD::encode_rs3_and_check_rs3_ge_rt3(uint64 d)
583 {
584 return decode_gpr_gpr3(d);
585 }
586
587
588 /* strange wrapper around gpr3 */
589 uint64 NMD::encode_rs3_and_check_rs3_lt_rt3(uint64 d)
590 {
591 return decode_gpr_gpr3(d);
592 }
593
594
595 /* nop - done by extraction function */
596 uint64 NMD::encode_s_from_address(uint64 d)
597 {
598 return d;
599 }
600
601
602 /* nop - done by extraction function */
603 uint64 NMD::encode_u_from_address(uint64 d)
604 {
605 return d;
606 }
607
608
609 /* nop - done by extraction function */
610 uint64 NMD::encode_s_from_s_hi(uint64 d)
611 {
612 return d;
613 }
614
615
616 uint64 NMD::encode_count3_from_count(uint64 d)
617 {
618 IMGASSERTONCE(d < 8);
619 return d == 0ull ? 8ull : d;
620 }
621
622
623 uint64 NMD::encode_shift3_from_shift(uint64 d)
624 {
625 IMGASSERTONCE(d < 8);
626 return d == 0ull ? 8ull : d;
627 }
628
629
630 /* special value for load literal */
631 int64 NMD::encode_eu_from_s_li16(uint64 d)
632 {
633 IMGASSERTONCE(d < 128);
634 return d == 127 ? -1 : (int64)d;
635 }
636
637
638 uint64 NMD::encode_msbd_from_size(uint64 d)
639 {
640 IMGASSERTONCE(d < 32);
641 return d + 1;
642 }
643
644
645 uint64 NMD::encode_eu_from_u_andi16(uint64 d)
646 {
647 IMGASSERTONCE(d < 16);
648 if (d == 12) {
649 return 0x00ffull;
650 }
651 if (d == 13) {
652 return 0xffffull;
653 }
654 return d;
655 }
656
657
658 uint64 NMD::encode_msbd_from_pos_and_size(uint64 d)
659 {
660 IMGASSERTONCE(0);
661 return d;
662 }
663
664
665 /* save16 / restore16 ???? */
666 uint64 NMD::encode_rt1_from_rt(uint64 d)
667 {
668 return d ? 31 : 30;
669 }
670
671
672 /* ? */
673 uint64 NMD::encode_lsb_from_pos_and_size(uint64 d)
674 {
675 return d;
676 }
677
678
679 std::string NMD::save_restore_list(uint64 rt, uint64 count, uint64 gp)
680 {
681 std::string str;
682
683 for (uint64 counter = 0; counter != count; counter++) {
684 bool use_gp = gp && (counter == count - 1);
685 uint64 this_rt = use_gp ? 28 : ((rt & 0x10) | (rt + counter)) & 0x1f;
686 str += img::format(",%s", GPR(this_rt));
687 }
688
689 return str;
690 }
691
692
693 std::string NMD::GPR(uint64 reg)
694 {
695 static const char *gpr_reg[32] = {
696 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
697 "a4", "a5", "a6", "a7", "r12", "r13", "r14", "r15",
698 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
699 "r24", "r25", "k0", "k1", "gp", "sp", "fp", "ra"
700 };
701
702 if (reg < 32) {
703 return gpr_reg[reg];
704 }
705
706 throw std::runtime_error(img::format("Invalid GPR register index %" PRIu64,
707 reg));
708 }
709
710
711 std::string NMD::FPR(uint64 reg)
712 {
713 static const char *fpr_reg[32] = {
714 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
715 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
716 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
717 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
718 };
719
720 if (reg < 32) {
721 return fpr_reg[reg];
722 }
723
724 throw std::runtime_error(img::format("Invalid FPR register index %" PRIu64,
725 reg));
726 }
727
728
729 std::string NMD::AC(uint64 reg)
730 {
731 static const char *ac_reg[4] = {
732 "ac0", "ac1", "ac2", "ac3"
733 };
734
735 if (reg < 4) {
736 return ac_reg[reg];
737 }
738
739 throw std::runtime_error(img::format("Invalid AC register index %" PRIu64,
740 reg));
741 }
742
743
744 std::string NMD::IMMEDIATE(uint64 value)
745 {
746 return img::format("0x%" PRIx64, value);
747 }
748
749
750 std::string NMD::IMMEDIATE(int64 value)
751 {
752 return img::format("%" PRId64, value);
753 }
754
755
756 std::string NMD::CPR(uint64 reg)
757 {
758 /* needs more work */
759 return img::format("CP%" PRIu64, reg);
760 }
761
762
763 std::string NMD::ADDRESS(uint64 value, int instruction_size)
764 {
765 /* token for string replace */
766 /* const char TOKEN_REPLACE = (char)0xa2; */
767 img::address address = m_pc + value + instruction_size;
768 /* symbol replacement */
769 /* return img::as_char(TOKEN_REPLACE) + to_string(address); */
770 return to_string(address);
771 }
772
773
774 uint64 NMD::extract_op_code_value(const uint16 * data, int size)
775 {
776 switch (size) {
777 case 16:
778 return data[0];
779 case 32:
780 return ((uint64)data[0] << 16) | data[1];
781 case 48:
782 return ((uint64)data[0] << 32) | ((uint64)data[1] << 16) | data[2];
783 default:
784 return data[0];
785 }
786 }
787
788
789 int NMD::Disassemble(const uint16 * data, std::string & dis,
790 NMD::TABLE_ENTRY_TYPE & type)
791 {
792 return Disassemble(data, dis, type, MAJOR, 2);
793 }
794
795
796 /*
797 * Recurse through tables until the instruction is found then return
798 * the string and size
799 *
800 * inputs:
801 * pointer to a word stream,
802 * disassember table and size
803 * returns:
804 * instruction size - negative is error
805 * disassembly string - on error will constain error string
806 */
807 int NMD::Disassemble(const uint16 * data, std::string & dis,
808 NMD::TABLE_ENTRY_TYPE & type, const Pool *table,
809 int table_size)
810 {
811 try
812 {
813 for (int i = 0; i < table_size; i++) {
814 uint64 op_code = extract_op_code_value(data,
815 table[i].instructions_size);
816 if ((op_code & table[i].mask) == table[i].value) {
817 /* possible match */
818 conditional_function cond = table[i].condition;
819 if ((cond == 0) || (this->*cond)(op_code)) {
820 try
821 {
822 if (table[i].type == pool) {
823 return Disassemble(data, dis, type,
824 table[i].next_table,
825 table[i].next_table_size);
826 } else if ((table[i].type == instruction) ||
827 (table[i].type == call_instruction) ||
828 (table[i].type == branch_instruction) ||
829 (table[i].type == return_instruction)) {
830 if ((table[i].attributes != 0) &&
831 (m_requested_instruction_categories &
832 table[i].attributes) == 0) {
833 /*
834 * failed due to instruction having
835 * an ASE attribute and the requested version
836 * not having that attribute
837 */
838 dis = "ASE attribute mismatch";
839 return -5;
840 }
841 disassembly_function dis_fn = table[i].disassembly;
842 if (dis_fn == 0) {
843 dis = "disassembler failure - bad table entry";
844 return -6;
845 }
846 type = table[i].type;
847 dis = (this->*dis_fn)(op_code);
848 return table[i].instructions_size;
849 } else {
850 dis = "reserved instruction";
851 return -2;
852 }
853 }
854 catch (std::runtime_error & e)
855 {
856 dis = e.what();
857 return -3; /* runtime error */
858 }
859 }
860 }
861 }
862 }
863 catch (std::exception & e)
864 {
865 dis = e.what();
866 return -4; /* runtime error */
867 }
868
869 dis = "failed to disassemble";
870 return -1; /* failed to disassemble */
871 }
872
873
874 uint64 NMD::extract_code_18_to_0(uint64 instruction)
875 {
876 uint64 value = 0;
877 value |= extract_bits(instruction, 0, 19);
878 return value;
879 }
880
881
882 uint64 NMD::extract_shift3_2_1_0(uint64 instruction)
883 {
884 uint64 value = 0;
885 value |= extract_bits(instruction, 0, 3);
886 return value;
887 }
888
889
890 uint64 NMD::extract_u_11_10_9_8_7_6_5_4_3__s3(uint64 instruction)
891 {
892 uint64 value = 0;
893 value |= extract_bits(instruction, 3, 9) << 3;
894 return value;
895 }
896
897
898 uint64 NMD::extract_count_3_2_1_0(uint64 instruction)
899 {
900 uint64 value = 0;
901 value |= extract_bits(instruction, 0, 4);
902 return value;
903 }
904
905
906 uint64 NMD::extract_rtz3_9_8_7(uint64 instruction)
907 {
908 uint64 value = 0;
909 value |= extract_bits(instruction, 7, 3);
910 return value;
911 }
912
913
914 uint64 NMD::extract_u_17_to_1__s1(uint64 instruction)
915 {
916 uint64 value = 0;
917 value |= extract_bits(instruction, 1, 17) << 1;
918 return value;
919 }
920
921
922 int64 NMD::extract_s__se9_20_19_18_17_16_15_14_13_12_11(uint64 instruction)
923 {
924 int64 value = 0;
925 value |= extract_bits(instruction, 11, 10);
926 value = sign_extend(value, 9);
927 return value;
928 }
929
930
931 int64 NMD::extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(uint64 instruction)
932 {
933 int64 value = 0;
934 value |= extract_bits(instruction, 0, 1) << 11;
935 value |= extract_bits(instruction, 1, 10) << 1;
936 value = sign_extend(value, 11);
937 return value;
938 }
939
940
941 uint64 NMD::extract_u_10(uint64 instruction)
942 {
943 uint64 value = 0;
944 value |= extract_bits(instruction, 10, 1);
945 return value;
946 }
947
948
949 uint64 NMD::extract_rtz4_27_26_25_23_22_21(uint64 instruction)
950 {
951 uint64 value = 0;
952 value |= extract_bits(instruction, 21, 3);
953 value |= extract_bits(instruction, 25, 1) << 3;
954 return value;
955 }
956
957
958 uint64 NMD::extract_sa_15_14_13_12_11(uint64 instruction)
959 {
960 uint64 value = 0;
961 value |= extract_bits(instruction, 11, 5);
962 return value;
963 }
964
965
966 uint64 NMD::extract_shift_4_3_2_1_0(uint64 instruction)
967 {
968 uint64 value = 0;
969 value |= extract_bits(instruction, 0, 5);
970 return value;
971 }
972
973
974 uint64 NMD::extract_shiftx_10_9_8_7__s1(uint64 instruction)
975 {
976 uint64 value = 0;
977 value |= extract_bits(instruction, 7, 4) << 1;
978 return value;
979 }
980
981
982 uint64 NMD::extract_hint_25_24_23_22_21(uint64 instruction)
983 {
984 uint64 value = 0;
985 value |= extract_bits(instruction, 21, 5);
986 return value;
987 }
988
989
990 uint64 NMD::extract_count3_14_13_12(uint64 instruction)
991 {
992 uint64 value = 0;
993 value |= extract_bits(instruction, 12, 3);
994 return value;
995 }
996
997
998 int64 NMD::extract_s__se31_0_11_to_2_20_to_12_s12(uint64 instruction)
999 {
1000 int64 value = 0;
1001 value |= extract_bits(instruction, 0, 1) << 31;
1002 value |= extract_bits(instruction, 2, 10) << 21;
1003 value |= extract_bits(instruction, 12, 9) << 12;
1004 value = sign_extend(value, 31);
1005 return value;
1006 }
1007
1008
1009 int64 NMD::extract_s__se7_0_6_5_4_3_2_1_s1(uint64 instruction)
1010 {
1011 int64 value = 0;
1012 value |= extract_bits(instruction, 0, 1) << 7;
1013 value |= extract_bits(instruction, 1, 6) << 1;
1014 value = sign_extend(value, 7);
1015 return value;
1016 }
1017
1018
1019 uint64 NMD::extract_u2_10_9(uint64 instruction)
1020 {
1021 uint64 value = 0;
1022 value |= extract_bits(instruction, 9, 2);
1023 return value;
1024 }
1025
1026
1027 uint64 NMD::extract_code_25_24_23_22_21_20_19_18_17_16(uint64 instruction)
1028 {
1029 uint64 value = 0;
1030 value |= extract_bits(instruction, 16, 10);
1031 return value;
1032 }
1033
1034
1035 uint64 NMD::extract_rs_20_19_18_17_16(uint64 instruction)
1036 {
1037 uint64 value = 0;
1038 value |= extract_bits(instruction, 16, 5);
1039 return value;
1040 }
1041
1042
1043 uint64 NMD::extract_u_2_1__s1(uint64 instruction)
1044 {
1045 uint64 value = 0;
1046 value |= extract_bits(instruction, 1, 2) << 1;
1047 return value;
1048 }
1049
1050
1051 uint64 NMD::extract_stripe_6(uint64 instruction)
1052 {
1053 uint64 value = 0;
1054 value |= extract_bits(instruction, 6, 1);
1055 return value;
1056 }
1057
1058
1059 uint64 NMD::extract_ac_15_14(uint64 instruction)
1060 {
1061 uint64 value = 0;
1062 value |= extract_bits(instruction, 14, 2);
1063 return value;
1064 }
1065
1066
1067 uint64 NMD::extract_shift_20_19_18_17_16(uint64 instruction)
1068 {
1069 uint64 value = 0;
1070 value |= extract_bits(instruction, 16, 5);
1071 return value;
1072 }
1073
1074
1075 uint64 NMD::extract_rdl_25_24(uint64 instruction)
1076 {
1077 uint64 value = 0;
1078 value |= extract_bits(instruction, 24, 1);
1079 return value;
1080 }
1081
1082
1083 int64 NMD::extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(uint64 instruction)
1084 {
1085 int64 value = 0;
1086 value |= extract_bits(instruction, 0, 1) << 10;
1087 value |= extract_bits(instruction, 1, 9) << 1;
1088 value = sign_extend(value, 10);
1089 return value;
1090 }
1091
1092
1093 uint64 NMD::extract_eu_6_5_4_3_2_1_0(uint64 instruction)
1094 {
1095 uint64 value = 0;
1096 value |= extract_bits(instruction, 0, 7);
1097 return value;
1098 }
1099
1100
1101 uint64 NMD::extract_shift_5_4_3_2_1_0(uint64 instruction)
1102 {
1103 uint64 value = 0;
1104 value |= extract_bits(instruction, 0, 6);
1105 return value;
1106 }
1107
1108
1109 uint64 NMD::extract_count_19_18_17_16(uint64 instruction)
1110 {
1111 uint64 value = 0;
1112 value |= extract_bits(instruction, 16, 4);
1113 return value;
1114 }
1115
1116
1117 uint64 NMD::extract_code_2_1_0(uint64 instruction)
1118 {
1119 uint64 value = 0;
1120 value |= extract_bits(instruction, 0, 3);
1121 return value;
1122 }
1123
1124
1125 uint64 NMD::extract_u_11_10_9_8_7_6_5_4_3_2_1_0(uint64 instruction)
1126 {
1127 uint64 value = 0;
1128 value |= extract_bits(instruction, 0, 12);
1129 return value;
1130 }
1131
1132
1133 uint64 NMD::extract_rs_4_3_2_1_0(uint64 instruction)
1134 {
1135 uint64 value = 0;
1136 value |= extract_bits(instruction, 0, 5);
1137 return value;
1138 }
1139
1140
1141 uint64 NMD::extract_u_20_to_3__s3(uint64 instruction)
1142 {
1143 uint64 value = 0;
1144 value |= extract_bits(instruction, 3, 18) << 3;
1145 return value;
1146 }
1147
1148
1149 uint64 NMD::extract_u_3_2_1_0__s2(uint64 instruction)
1150 {
1151 uint64 value = 0;
1152 value |= extract_bits(instruction, 0, 4) << 2;
1153 return value;
1154 }
1155
1156
1157 uint64 NMD::extract_cofun_25_24_23(uint64 instruction)
1158 {
1159 uint64 value = 0;
1160 value |= extract_bits(instruction, 3, 23);
1161 return value;
1162 }
1163
1164
1165 uint64 NMD::extract_u_2_1_0__s2(uint64 instruction)
1166 {
1167 uint64 value = 0;
1168 value |= extract_bits(instruction, 0, 3) << 2;
1169 return value;
1170 }
1171
1172
1173 uint64 NMD::extract_rd3_3_2_1(uint64 instruction)
1174 {
1175 uint64 value = 0;
1176 value |= extract_bits(instruction, 1, 3);
1177 return value;
1178 }
1179
1180
1181 uint64 NMD::extract_sa_15_14_13_12(uint64 instruction)
1182 {
1183 uint64 value = 0;
1184 value |= extract_bits(instruction, 12, 4);
1185 return value;
1186 }
1187
1188
1189 uint64 NMD::extract_rt_25_24_23_22_21(uint64 instruction)
1190 {
1191 uint64 value = 0;
1192 value |= extract_bits(instruction, 21, 5);
1193 return value;
1194 }
1195
1196
1197 uint64 NMD::extract_ru_7_6_5_4_3(uint64 instruction)
1198 {
1199 uint64 value = 0;
1200 value |= extract_bits(instruction, 3, 5);
1201 return value;
1202 }
1203
1204
1205 uint64 NMD::extract_u_17_to_0(uint64 instruction)
1206 {
1207 uint64 value = 0;
1208 value |= extract_bits(instruction, 0, 18);
1209 return value;
1210 }
1211
1212
1213 uint64 NMD::extract_rsz4_4_2_1_0(uint64 instruction)
1214 {
1215 uint64 value = 0;
1216 value |= extract_bits(instruction, 0, 3);
1217 value |= extract_bits(instruction, 4, 1) << 3;
1218 return value;
1219 }
1220
1221
1222 int64 NMD::extract_s__se21_0_20_to_1_s1(uint64 instruction)
1223 {
1224 int64 value = 0;
1225 value |= extract_bits(instruction, 0, 1) << 21;
1226 value |= extract_bits(instruction, 1, 20) << 1;
1227 value = sign_extend(value, 21);
1228 return value;
1229 }
1230
1231
1232 uint64 NMD::extract_op_25_to_3(uint64 instruction)
1233 {
1234 uint64 value = 0;
1235 value |= extract_bits(instruction, 3, 23);
1236 return value;
1237 }
1238
1239
1240 uint64 NMD::extract_rs4_4_2_1_0(uint64 instruction)
1241 {
1242 uint64 value = 0;
1243 value |= extract_bits(instruction, 0, 3);
1244 value |= extract_bits(instruction, 4, 1) << 3;
1245 return value;
1246 }
1247
1248
1249 uint64 NMD::extract_bit_23_22_21(uint64 instruction)
1250 {
1251 uint64 value = 0;
1252 value |= extract_bits(instruction, 21, 3);
1253 return value;
1254 }
1255
1256
1257 uint64 NMD::extract_rt_41_40_39_38_37(uint64 instruction)
1258 {
1259 uint64 value = 0;
1260 value |= extract_bits(instruction, 37, 5);
1261 return value;
1262 }
1263
1264
1265 int64 NMD::extract_shift__se5_21_20_19_18_17_16(uint64 instruction)
1266 {
1267 int64 value = 0;
1268 value |= extract_bits(instruction, 16, 6);
1269 value = sign_extend(value, 5);
1270 return value;
1271 }
1272
1273
1274 uint64 NMD::extract_rd2_3_8(uint64 instruction)
1275 {
1276 uint64 value = 0;
1277 value |= extract_bits(instruction, 3, 1) << 1;
1278 value |= extract_bits(instruction, 8, 1);
1279 return value;
1280 }
1281
1282
1283 uint64 NMD::extract_code_17_to_0(uint64 instruction)
1284 {
1285 uint64 value = 0;
1286 value |= extract_bits(instruction, 0, 18);
1287 return value;
1288 }
1289
1290
1291 uint64 NMD::extract_size_20_19_18_17_16(uint64 instruction)
1292 {
1293 uint64 value = 0;
1294 value |= extract_bits(instruction, 16, 5);
1295 return value;
1296 }
1297
1298
1299 int64 NMD::extract_s__se8_15_7_6_5_4_3_2_s2(uint64 instruction)
1300 {
1301 int64 value = 0;
1302 value |= extract_bits(instruction, 2, 6) << 2;
1303 value |= extract_bits(instruction, 15, 1) << 8;
1304 value = sign_extend(value, 8);
1305 return value;
1306 }
1307
1308
1309 uint64 NMD::extract_u_15_to_0(uint64 instruction)
1310 {
1311 uint64 value = 0;
1312 value |= extract_bits(instruction, 0, 16);
1313 return value;
1314 }
1315
1316
1317 uint64 NMD::extract_fs_20_19_18_17_16(uint64 instruction)
1318 {
1319 uint64 value = 0;
1320 value |= extract_bits(instruction, 16, 5);
1321 return value;
1322 }
1323
1324
1325 int64 NMD::extract_s__se8_15_7_6_5_4_3_2_1_0(uint64 instruction)
1326 {
1327 int64 value = 0;
1328 value |= extract_bits(instruction, 0, 8);
1329 value |= extract_bits(instruction, 15, 1) << 8;
1330 value = sign_extend(value, 8);
1331 return value;
1332 }
1333
1334
1335 uint64 NMD::extract_stype_20_19_18_17_16(uint64 instruction)
1336 {
1337 uint64 value = 0;
1338 value |= extract_bits(instruction, 16, 5);
1339 return value;
1340 }
1341
1342
1343 uint64 NMD::extract_rtl_11(uint64 instruction)
1344 {
1345 uint64 value = 0;
1346 value |= extract_bits(instruction, 9, 1);
1347 return value;
1348 }
1349
1350
1351 uint64 NMD::extract_hs_20_19_18_17_16(uint64 instruction)
1352 {
1353 uint64 value = 0;
1354 value |= extract_bits(instruction, 16, 5);
1355 return value;
1356 }
1357
1358
1359 uint64 NMD::extract_sel_13_12_11(uint64 instruction)
1360 {
1361 uint64 value = 0;
1362 value |= extract_bits(instruction, 11, 3);
1363 return value;
1364 }
1365
1366
1367 uint64 NMD::extract_lsb_4_3_2_1_0(uint64 instruction)
1368 {
1369 uint64 value = 0;
1370 value |= extract_bits(instruction, 0, 5);
1371 return value;
1372 }
1373
1374
1375 uint64 NMD::extract_gp_2(uint64 instruction)
1376 {
1377 uint64 value = 0;
1378 value |= extract_bits(instruction, 2, 1);
1379 return value;
1380 }
1381
1382
1383 uint64 NMD::extract_rt3_9_8_7(uint64 instruction)
1384 {
1385 uint64 value = 0;
1386 value |= extract_bits(instruction, 7, 3);
1387 return value;
1388 }
1389
1390
1391 uint64 NMD::extract_ft_25_24_23_22_21(uint64 instruction)
1392 {
1393 uint64 value = 0;
1394 value |= extract_bits(instruction, 21, 5);
1395 return value;
1396 }
1397
1398
1399 uint64 NMD::extract_u_17_16_15_14_13_12_11(uint64 instruction)
1400 {
1401 uint64 value = 0;
1402 value |= extract_bits(instruction, 11, 7);
1403 return value;
1404 }
1405
1406
1407 uint64 NMD::extract_cs_20_19_18_17_16(uint64 instruction)
1408 {
1409 uint64 value = 0;
1410 value |= extract_bits(instruction, 16, 5);
1411 return value;
1412 }
1413
1414
1415 uint64 NMD::extract_rt4_9_7_6_5(uint64 instruction)
1416 {
1417 uint64 value = 0;
1418 value |= extract_bits(instruction, 5, 3);
1419 value |= extract_bits(instruction, 9, 1) << 3;
1420 return value;
1421 }
1422
1423
1424 uint64 NMD::extract_msbt_10_9_8_7_6(uint64 instruction)
1425 {
1426 uint64 value = 0;
1427 value |= extract_bits(instruction, 6, 5);
1428 return value;
1429 }
1430
1431
1432 uint64 NMD::extract_u_5_4_3_2_1_0__s2(uint64 instruction)
1433 {
1434 uint64 value = 0;
1435 value |= extract_bits(instruction, 0, 6) << 2;
1436 return value;
1437 }
1438
1439
1440 uint64 NMD::extract_sa_15_14_13(uint64 instruction)
1441 {
1442 uint64 value = 0;
1443 value |= extract_bits(instruction, 13, 3);
1444 return value;
1445 }
1446
1447
1448 int64 NMD::extract_s__se14_0_13_to_1_s1(uint64 instruction)
1449 {
1450 int64 value = 0;
1451 value |= extract_bits(instruction, 0, 1) << 14;
1452 value |= extract_bits(instruction, 1, 13) << 1;
1453 value = sign_extend(value, 14);
1454 return value;
1455 }
1456
1457
1458 uint64 NMD::extract_rs3_6_5_4(uint64 instruction)
1459 {
1460 uint64 value = 0;
1461 value |= extract_bits(instruction, 4, 3);
1462 return value;
1463 }
1464
1465
1466 uint64 NMD::extract_u_31_to_0__s32(uint64 instruction)
1467 {
1468 uint64 value = 0;
1469 value |= extract_bits(instruction, 0, 32) << 32;
1470 return value;
1471 }
1472
1473
1474 uint64 NMD::extract_shift_10_9_8_7_6(uint64 instruction)
1475 {
1476 uint64 value = 0;
1477 value |= extract_bits(instruction, 6, 5);
1478 return value;
1479 }
1480
1481
1482 uint64 NMD::extract_cs_25_24_23_22_21(uint64 instruction)
1483 {
1484 uint64 value = 0;
1485 value |= extract_bits(instruction, 21, 5);
1486 return value;
1487 }
1488
1489
1490 uint64 NMD::extract_shiftx_11_10_9_8_7_6(uint64 instruction)
1491 {
1492 uint64 value = 0;
1493 value |= extract_bits(instruction, 6, 6);
1494 return value;
1495 }
1496
1497
1498 uint64 NMD::extract_rt_9_8_7_6_5(uint64 instruction)
1499 {
1500 uint64 value = 0;
1501 value |= extract_bits(instruction, 5, 5);
1502 return value;
1503 }
1504
1505
1506 uint64 NMD::extract_op_25_24_23_22_21(uint64 instruction)
1507 {
1508 uint64 value = 0;
1509 value |= extract_bits(instruction, 21, 5);
1510 return value;
1511 }
1512
1513
1514 uint64 NMD::extract_u_6_5_4_3_2_1_0__s2(uint64 instruction)
1515 {
1516 uint64 value = 0;
1517 value |= extract_bits(instruction, 0, 7) << 2;
1518 return value;
1519 }
1520
1521
1522 uint64 NMD::extract_bit_16_15_14_13_12_11(uint64 instruction)
1523 {
1524 uint64 value = 0;
1525 value |= extract_bits(instruction, 11, 6);
1526 return value;
1527 }
1528
1529
1530 uint64 NMD::extract_mask_20_19_18_17_16_15_14(uint64 instruction)
1531 {
1532 uint64 value = 0;
1533 value |= extract_bits(instruction, 14, 7);
1534 return value;
1535 }
1536
1537
1538 uint64 NMD::extract_eu_3_2_1_0(uint64 instruction)
1539 {
1540 uint64 value = 0;
1541 value |= extract_bits(instruction, 0, 4);
1542 return value;
1543 }
1544
1545
1546 uint64 NMD::extract_u_7_6_5_4__s4(uint64 instruction)
1547 {
1548 uint64 value = 0;
1549 value |= extract_bits(instruction, 4, 4) << 4;
1550 return value;
1551 }
1552
1553
1554 int64 NMD::extract_s__se8_15_7_6_5_4_3_s3(uint64 instruction)
1555 {
1556 int64 value = 0;
1557 value |= extract_bits(instruction, 3, 5) << 3;
1558 value |= extract_bits(instruction, 15, 1) << 8;
1559 value = sign_extend(value, 8);
1560 return value;
1561 }
1562
1563
1564 uint64 NMD::extract_ft_15_14_13_12_11(uint64 instruction)
1565 {
1566 uint64 value = 0;
1567 value |= extract_bits(instruction, 11, 5);
1568 return value;
1569 }
1570
1571
1572 int64 NMD::extract_s__se31_15_to_0_31_to_16(uint64 instruction)
1573 {
1574 int64 value = 0;
1575 value |= extract_bits(instruction, 0, 16) << 16;
1576 value |= extract_bits(instruction, 16, 16);
1577 value = sign_extend(value, 31);
1578 return value;
1579 }
1580
1581
1582 uint64 NMD::extract_u_20_19_18_17_16_15_14_13(uint64 instruction)
1583 {
1584 uint64 value = 0;
1585 value |= extract_bits(instruction, 13, 8);
1586 return value;
1587 }
1588
1589
1590 uint64 NMD::extract_u_17_to_2__s2(uint64 instruction)
1591 {
1592 uint64 value = 0;
1593 value |= extract_bits(instruction, 2, 16) << 2;
1594 return value;
1595 }
1596
1597
1598 uint64 NMD::extract_rd_15_14_13_12_11(uint64 instruction)
1599 {
1600 uint64 value = 0;
1601 value |= extract_bits(instruction, 11, 5);
1602 return value;
1603 }
1604
1605
1606 uint64 NMD::extract_c0s_20_19_18_17_16(uint64 instruction)
1607 {
1608 uint64 value = 0;
1609 value |= extract_bits(instruction, 16, 5);
1610 return value;
1611 }
1612
1613
1614 uint64 NMD::extract_code_1_0(uint64 instruction)
1615 {
1616 uint64 value = 0;
1617 value |= extract_bits(instruction, 0, 2);
1618 return value;
1619 }
1620
1621
1622 int64 NMD::extract_s__se25_0_24_to_1_s1(uint64 instruction)
1623 {
1624 int64 value = 0;
1625 value |= extract_bits(instruction, 0, 1) << 25;
1626 value |= extract_bits(instruction, 1, 24) << 1;
1627 value = sign_extend(value, 25);
1628 return value;
1629 }
1630
1631
1632 uint64 NMD::extract_u_1_0(uint64 instruction)
1633 {
1634 uint64 value = 0;
1635 value |= extract_bits(instruction, 0, 2);
1636 return value;
1637 }
1638
1639
1640 uint64 NMD::extract_u_3_8__s2(uint64 instruction)
1641 {
1642 uint64 value = 0;
1643 value |= extract_bits(instruction, 3, 1) << 3;
1644 value |= extract_bits(instruction, 8, 1) << 2;
1645 return value;
1646 }
1647
1648
1649 uint64 NMD::extract_fd_15_14_13_12_11(uint64 instruction)
1650 {
1651 uint64 value = 0;
1652 value |= extract_bits(instruction, 11, 5);
1653 return value;
1654 }
1655
1656
1657 uint64 NMD::extract_u_4_3_2_1_0__s2(uint64 instruction)
1658 {
1659 uint64 value = 0;
1660 value |= extract_bits(instruction, 0, 5) << 2;
1661 return value;
1662 }
1663
1664
1665 uint64 NMD::extract_rtz4_9_7_6_5(uint64 instruction)
1666 {
1667 uint64 value = 0;
1668 value |= extract_bits(instruction, 5, 3);
1669 value |= extract_bits(instruction, 9, 1) << 3;
1670 return value;
1671 }
1672
1673
1674 uint64 NMD::extract_sel_15_14_13_12_11(uint64 instruction)
1675 {
1676 uint64 value = 0;
1677 value |= extract_bits(instruction, 11, 5);
1678 return value;
1679 }
1680
1681
1682 uint64 NMD::extract_ct_25_24_23_22_21(uint64 instruction)
1683 {
1684 uint64 value = 0;
1685 value |= extract_bits(instruction, 21, 5);
1686 return value;
1687 }
1688
1689
1690 uint64 NMD::extract_u_20_to_2__s2(uint64 instruction)
1691 {
1692 uint64 value = 0;
1693 value |= extract_bits(instruction, 2, 19) << 2;
1694 return value;
1695 }
1696
1697
1698 int64 NMD::extract_s__se3_4_2_1_0(uint64 instruction)
1699 {
1700 int64 value = 0;
1701 value |= extract_bits(instruction, 0, 3);
1702 value |= extract_bits(instruction, 4, 1) << 3;
1703 value = sign_extend(value, 3);
1704 return value;
1705 }
1706
1707
1708 uint64 NMD::extract_u_3_2_1_0__s1(uint64 instruction)
1709 {
1710 uint64 value = 0;
1711 value |= extract_bits(instruction, 0, 4) << 1;
1712 return value;
1713 }
1714
1715
1716
1717 bool NMD::ADDIU_32__cond(uint64 instruction)
1718 {
1719 uint64 rt = extract_rt_25_24_23_22_21(instruction);
1720 return rt != 0;
1721 }
1722
1723
1724 bool NMD::ADDIU_RS5__cond(uint64 instruction)
1725 {
1726 uint64 rt = extract_rt_9_8_7_6_5(instruction);
1727 return rt != 0;
1728 }
1729
1730
1731 bool NMD::BALRSC_cond(uint64 instruction)
1732 {
1733 uint64 rt = extract_rt_25_24_23_22_21(instruction);
1734 return rt != 0;
1735 }
1736
1737
1738 bool NMD::BEQC_16__cond(uint64 instruction)
1739 {
1740 uint64 rs3 = extract_rs3_6_5_4(instruction);
1741 uint64 rt3 = extract_rt3_9_8_7(instruction);
1742 uint64 u = extract_u_3_2_1_0__s1(instruction);
1743 return rs3 < rt3 && u != 0;
1744 }
1745
1746
1747 bool NMD::BNEC_16__cond(uint64 instruction)
1748 {
1749 uint64 rs3 = extract_rs3_6_5_4(instruction);
1750 uint64 rt3 = extract_rt3_9_8_7(instruction);
1751 uint64 u = extract_u_3_2_1_0__s1(instruction);
1752 return rs3 >= rt3 && u != 0;
1753 }
1754
1755
1756 bool NMD::MOVE_cond(uint64 instruction)
1757 {
1758 uint64 rt = extract_rt_9_8_7_6_5(instruction);
1759 return rt != 0;
1760 }
1761
1762
1763 bool NMD::P16_BR1_cond(uint64 instruction)
1764 {
1765 uint64 u = extract_u_3_2_1_0__s1(instruction);
1766 return u != 0;
1767 }
1768
1769
1770 bool NMD::PREF_S9__cond(uint64 instruction)
1771 {
1772 uint64 hint = extract_hint_25_24_23_22_21(instruction);
1773 return hint != 31;
1774 }
1775
1776
1777 bool NMD::PREFE_cond(uint64 instruction)
1778 {
1779 uint64 hint = extract_hint_25_24_23_22_21(instruction);
1780 return hint != 31;
1781 }
1782
1783
1784 bool NMD::SLTU_cond(uint64 instruction)
1785 {
1786 uint64 rd = extract_rd_15_14_13_12_11(instruction);
1787 return rd != 0;
1788 }
1789
1790
1791
1792 /*
1793 * ABS.D fd, fs - Floating Point Absolute Value
1794 *
1795 * 3 2 1
1796 * 10987654321098765432109876543210
1797 * 010001 00000 000101
1798 * fmt -----
1799 * fs -----
1800 * fd -----
1801 */
1802 std::string NMD::ABS_D(uint64 instruction)
1803 {
1804 uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1805 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1806
1807 std::string fs = FPR(copy(fs_value));
1808 std::string fd = FPR(copy(fd_value));
1809
1810 return img::format("ABS.D %s, %s", fd, fs);
1811 }
1812
1813
1814 /*
1815 * ABS.S fd, fs - Floating Point Absolute Value
1816 *
1817 * 3 2 1
1818 * 10987654321098765432109876543210
1819 * 010001 00000 000101
1820 * fmt -----
1821 * fd -----
1822 * fs -----
1823 */
1824 std::string NMD::ABS_S(uint64 instruction)
1825 {
1826 uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1827 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1828
1829 std::string fs = FPR(copy(fs_value));
1830 std::string fd = FPR(copy(fd_value));
1831
1832 return img::format("ABS.S %s, %s", fd, fs);
1833 }
1834
1835
1836 /*
1837 * [DSP] ABSQ_S.PH rt, rs - Find absolute value of two fractional halfwords
1838 * with 16-bit saturation
1839 *
1840 * 3 2 1
1841 * 10987654321098765432109876543210
1842 * 001000 0001000100111111
1843 * rt -----
1844 * rs -----
1845 */
1846 std::string NMD::ABSQ_S_PH(uint64 instruction)
1847 {
1848 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1849 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1850
1851 std::string rt = GPR(copy(rt_value));
1852 std::string rs = GPR(copy(rs_value));
1853
1854 return img::format("ABSQ_S.PH %s, %s", rt, rs);
1855 }
1856
1857
1858 /*
1859 * [DSP] ABSQ_S.QB rt, rs - Find absolute value of four fractional byte values
1860 * with 8-bit saturation
1861 *
1862 * 3 2 1
1863 * 10987654321098765432109876543210
1864 * 001000 0000000100111111
1865 * rt -----
1866 * rs -----
1867 */
1868 std::string NMD::ABSQ_S_QB(uint64 instruction)
1869 {
1870 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1871 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1872
1873 std::string rt = GPR(copy(rt_value));
1874 std::string rs = GPR(copy(rs_value));
1875
1876 return img::format("ABSQ_S.QB %s, %s", rt, rs);
1877 }
1878
1879
1880 /*
1881 * [DSP] ABSQ_S.W rt, rs - Find absolute value of fractional word with 32-bit
1882 * saturation
1883 *
1884 * 3 2 1
1885 * 10987654321098765432109876543210
1886 * 001000 0010000100111111
1887 * rt -----
1888 * rs -----
1889 */
1890 std::string NMD::ABSQ_S_W(uint64 instruction)
1891 {
1892 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1893 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1894
1895 std::string rt = GPR(copy(rt_value));
1896 std::string rs = GPR(copy(rs_value));
1897
1898 return img::format("ABSQ_S.W %s, %s", rt, rs);
1899 }
1900
1901
1902 /*
1903 *
1904 *
1905 * 3 2 1
1906 * 10987654321098765432109876543210
1907 * 001000 0010000100111111
1908 * rt -----
1909 * rs -----
1910 */
1911 std::string NMD::ACLR(uint64 instruction)
1912 {
1913 uint64 bit_value = extract_bit_23_22_21(instruction);
1914 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1915 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
1916
1917 std::string bit = IMMEDIATE(copy(bit_value));
1918 std::string s = IMMEDIATE(copy(s_value));
1919 std::string rs = GPR(copy(rs_value));
1920
1921 return img::format("ACLR %s, %s(%s)", bit, s, rs);
1922 }
1923
1924
1925 /*
1926 *
1927 *
1928 * 3 2 1
1929 * 10987654321098765432109876543210
1930 * 001000 0010000100111111
1931 * rt -----
1932 * rs -----
1933 */
1934 std::string NMD::ADD(uint64 instruction)
1935 {
1936 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1937 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1938 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1939
1940 std::string rd = GPR(copy(rd_value));
1941 std::string rs = GPR(copy(rs_value));
1942 std::string rt = GPR(copy(rt_value));
1943
1944 return img::format("ADD %s, %s, %s", rd, rs, rt);
1945 }
1946
1947
1948 /*
1949 * ADD.D fd, fs, ft - Floating Point Add
1950 *
1951 * 3 2 1
1952 * 10987654321098765432109876543210
1953 * 010001 000101
1954 * fmt -----
1955 * ft -----
1956 * fs -----
1957 * fd -----
1958 */
1959 std::string NMD::ADD_D(uint64 instruction)
1960 {
1961 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1962 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1963 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1964
1965 std::string ft = FPR(copy(ft_value));
1966 std::string fs = FPR(copy(fs_value));
1967 std::string fd = FPR(copy(fd_value));
1968
1969 return img::format("ADD.D %s, %s, %s", fd, fs, ft);
1970 }
1971
1972
1973 /*
1974 * ADD.S fd, fs, ft - Floating Point Add
1975 *
1976 * 3 2 1
1977 * 10987654321098765432109876543210
1978 * 010001 000101
1979 * fmt -----
1980 * ft -----
1981 * fs -----
1982 * fd -----
1983 */
1984 std::string NMD::ADD_S(uint64 instruction)
1985 {
1986 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1987 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1988 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1989
1990 std::string ft = FPR(copy(ft_value));
1991 std::string fs = FPR(copy(fs_value));
1992 std::string fd = FPR(copy(fd_value));
1993
1994 return img::format("ADD.S %s, %s, %s", fd, fs, ft);
1995 }
1996
1997
1998 /*
1999 *
2000 *
2001 * 3 2 1
2002 * 10987654321098765432109876543210
2003 * 001000 0010000100111111
2004 * rt -----
2005 * rs -----
2006 */
2007 std::string NMD::ADDIU_32_(uint64 instruction)
2008 {
2009 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2010 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2011 uint64 u_value = extract_u_15_to_0(instruction);
2012
2013 std::string rt = GPR(copy(rt_value));
2014 std::string rs = GPR(copy(rs_value));
2015 std::string u = IMMEDIATE(copy(u_value));
2016
2017 return img::format("ADDIU %s, %s, %s", rt, rs, u);
2018 }
2019
2020
2021 /*
2022 *
2023 *
2024 * 3 2 1
2025 * 10987654321098765432109876543210
2026 * 001000 0010000100111111
2027 * rt -----
2028 * rs -----
2029 */
2030 std::string NMD::ADDIU_48_(uint64 instruction)
2031 {
2032 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
2033 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
2034
2035 std::string rt = GPR(copy(rt_value));
2036 std::string s = IMMEDIATE(copy(s_value));
2037
2038 return img::format("ADDIU %s, %s", rt, s);
2039 }
2040
2041
2042 /*
2043 *
2044 *
2045 * 3 2 1
2046 * 10987654321098765432109876543210
2047 * 001000 0010000100111111
2048 * rt -----
2049 * rs -----
2050 */
2051 std::string NMD::ADDIU_GP48_(uint64 instruction)
2052 {
2053 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
2054 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
2055
2056 std::string rt = GPR(copy(rt_value));
2057 std::string s = IMMEDIATE(copy(s_value));
2058
2059 return img::format("ADDIU %s, $%d, %s", rt, 28, s);
2060 }
2061
2062
2063 /*
2064 *
2065 *
2066 * 3 2 1
2067 * 10987654321098765432109876543210
2068 * 001000 0010000100111111
2069 * rt -----
2070 * rs -----
2071 */
2072 std::string NMD::ADDIU_GP_B_(uint64 instruction)
2073 {
2074 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2075 uint64 u_value = extract_u_17_to_0(instruction);
2076
2077 std::string rt = GPR(copy(rt_value));
2078 std::string u = IMMEDIATE(copy(u_value));
2079
2080 return img::format("ADDIU %s, $%d, %s", rt, 28, u);
2081 }
2082
2083
2084 /*
2085 *
2086 *
2087 * 3 2 1
2088 * 10987654321098765432109876543210
2089 * 001000 0010000100111111
2090 * rt -----
2091 * rs -----
2092 */
2093 std::string NMD::ADDIU_GP_W_(uint64 instruction)
2094 {
2095 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2096 uint64 u_value = extract_u_20_to_2__s2(instruction);
2097
2098 std::string rt = GPR(copy(rt_value));
2099 std::string u = IMMEDIATE(copy(u_value));
2100
2101 return img::format("ADDIU %s, $%d, %s", rt, 28, u);
2102 }
2103
2104
2105 /*
2106 *
2107 *
2108 * 3 2 1
2109 * 10987654321098765432109876543210
2110 * 001000 0010000100111111
2111 * rt -----
2112 * rs -----
2113 */
2114 std::string NMD::ADDIU_NEG_(uint64 instruction)
2115 {
2116 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2117 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2118 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
2119
2120 std::string rt = GPR(copy(rt_value));
2121 std::string rs = GPR(copy(rs_value));
2122 std::string u = IMMEDIATE(neg_copy(u_value));
2123
2124 return img::format("ADDIU %s, %s, %s", rt, rs, u);
2125 }
2126
2127
2128 /*
2129 *
2130 *
2131 * 3 2 1
2132 * 10987654321098765432109876543210
2133 * 001000 0010000100111111
2134 * rt -----
2135 * rs -----
2136 */
2137 std::string NMD::ADDIU_R1_SP_(uint64 instruction)
2138 {
2139 uint64 u_value = extract_u_5_4_3_2_1_0__s2(instruction);
2140 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2141
2142 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2143 std::string u = IMMEDIATE(copy(u_value));
2144
2145 return img::format("ADDIU %s, $%d, %s", rt3, 29, u);
2146 }
2147
2148
2149 /*
2150 *
2151 *
2152 * 3 2 1
2153 * 10987654321098765432109876543210
2154 * 001000 0010000100111111
2155 * rt -----
2156 * rs -----
2157 */
2158 std::string NMD::ADDIU_R2_(uint64 instruction)
2159 {
2160 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2161 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2162 uint64 u_value = extract_u_2_1_0__s2(instruction);
2163
2164 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2165 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
2166 std::string u = IMMEDIATE(copy(u_value));
2167
2168 return img::format("ADDIU %s, %s, %s", rt3, rs3, u);
2169 }
2170
2171
2172 /*
2173 * ADDIU[RS5] rt, s5 - Add Signed Word and Set Carry Bit
2174 *
2175 * 5432109876543210
2176 * 100100 1
2177 * rt -----
2178 * s - ---
2179 */
2180 std::string NMD::ADDIU_RS5_(uint64 instruction)
2181 {
2182 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
2183 int64 s_value = extract_s__se3_4_2_1_0(instruction);
2184
2185 std::string rt = GPR(copy(rt_value));
2186 std::string s = IMMEDIATE(copy(s_value));
2187
2188 return img::format("ADDIU %s, %s", rt, s);
2189 }
2190
2191
2192 /*
2193 *
2194 *
2195 * 3 2 1
2196 * 10987654321098765432109876543210
2197 * 001000 x1110000101
2198 * rt -----
2199 * rs -----
2200 * rd -----
2201 */
2202 std::string NMD::ADDIUPC_32_(uint64 instruction)
2203 {
2204 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2205 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
2206
2207 std::string rt = GPR(copy(rt_value));
2208 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2209
2210 return img::format("ADDIUPC %s, %s", rt, s);
2211 }
2212
2213
2214 /*
2215 *
2216 *
2217 * 3 2 1
2218 * 10987654321098765432109876543210
2219 * 001000 x1110000101
2220 * rt -----
2221 * rs -----
2222 * rd -----
2223 */
2224 std::string NMD::ADDIUPC_48_(uint64 instruction)
2225 {
2226 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
2227 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
2228
2229 std::string rt = GPR(copy(rt_value));
2230 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
2231
2232 return img::format("ADDIUPC %s, %s", rt, s);
2233 }
2234
2235
2236 /*
2237 * [DSP] ADDQ.PH rd, rt, rs - Add fractional halfword vectors
2238 *
2239 * 3 2 1
2240 * 10987654321098765432109876543210
2241 * 001000 00000001101
2242 * rt -----
2243 * rs -----
2244 * rd -----
2245 */
2246 std::string NMD::ADDQ_PH(uint64 instruction)
2247 {
2248 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2249 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2250 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2251
2252 std::string rd = GPR(copy(rd_value));
2253 std::string rs = GPR(copy(rs_value));
2254 std::string rt = GPR(copy(rt_value));
2255
2256 return img::format("ADDQ.PH %s, %s, %s", rd, rs, rt);
2257 }
2258
2259
2260 /*
2261 * [DSP] ADDQ_S.PH rd, rt, rs - Add fractional halfword vectors with 16-bit
2262 * saturation
2263 *
2264 * 3 2 1
2265 * 10987654321098765432109876543210
2266 * 001000 10000001101
2267 * rt -----
2268 * rs -----
2269 * rd -----
2270 */
2271 std::string NMD::ADDQ_S_PH(uint64 instruction)
2272 {
2273 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2274 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2275 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2276
2277 std::string rd = GPR(copy(rd_value));
2278 std::string rs = GPR(copy(rs_value));
2279 std::string rt = GPR(copy(rt_value));
2280
2281 return img::format("ADDQ_S.PH %s, %s, %s", rd, rs, rt);
2282 }
2283
2284
2285 /*
2286 * [DSP] ADDQ_S.W rd, rt, rs - Add fractional words with 32-bit saturation
2287 *
2288 * 3 2 1
2289 * 10987654321098765432109876543210
2290 * 001000 x1100000101
2291 * rt -----
2292 * rs -----
2293 * rd -----
2294 */
2295 std::string NMD::ADDQ_S_W(uint64 instruction)
2296 {
2297 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2298 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2299 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2300
2301 std::string rd = GPR(copy(rd_value));
2302 std::string rs = GPR(copy(rs_value));
2303 std::string rt = GPR(copy(rt_value));
2304
2305 return img::format("ADDQ_S.W %s, %s, %s", rd, rs, rt);
2306 }
2307
2308
2309 /*
2310 * [DSP] ADDQH.PH rd, rt, rs - Add fractional halfword vectors and shift
2311 * right to halve results
2312 *
2313 * 3 2 1
2314 * 10987654321098765432109876543210
2315 * 001000 00001001101
2316 * rt -----
2317 * rs -----
2318 * rd -----
2319 */
2320 std::string NMD::ADDQH_PH(uint64 instruction)
2321 {
2322 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2323 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2324 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2325
2326 std::string rd = GPR(copy(rd_value));
2327 std::string rs = GPR(copy(rs_value));
2328 std::string rt = GPR(copy(rt_value));
2329
2330 return img::format("ADDQH.PH %s, %s, %s", rd, rs, rt);
2331 }
2332
2333
2334 /*
2335 * [DSP] ADDQH_R.PH rd, rt, rs - Add fractional halfword vectors and shift
2336 * right to halve results with rounding
2337 *
2338 * 3 2 1
2339 * 10987654321098765432109876543210
2340 * 001000 10001001101
2341 * rt -----
2342 * rs -----
2343 * rd -----
2344 */
2345 std::string NMD::ADDQH_R_PH(uint64 instruction)
2346 {
2347 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2348 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2349 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2350
2351 std::string rd = GPR(copy(rd_value));
2352 std::string rs = GPR(copy(rs_value));
2353 std::string rt = GPR(copy(rt_value));
2354
2355 return img::format("ADDQH_R.PH %s, %s, %s", rd, rs, rt);
2356 }
2357
2358
2359 /*
2360 * [DSP] ADDQH_R.W rd, rt, rs - Add fractional words and shift right to halve
2361 * results with rounding
2362 *
2363 * 3 2 1
2364 * 10987654321098765432109876543210
2365 * 001000 00010001101
2366 * rt -----
2367 * rs -----
2368 * rd -----
2369 */
2370 std::string NMD::ADDQH_R_W(uint64 instruction)
2371 {
2372 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2373 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2374 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2375
2376 std::string rd = GPR(copy(rd_value));
2377 std::string rs = GPR(copy(rs_value));
2378 std::string rt = GPR(copy(rt_value));
2379
2380 return img::format("ADDQH_R.W %s, %s, %s", rd, rs, rt);
2381 }
2382
2383
2384 /*
2385 * [DSP] ADDQH.W rd, rt, rs - Add fractional words and shift right to halve
2386 * results
2387 *
2388 * 3 2 1
2389 * 10987654321098765432109876543210
2390 * 001000 10010001101
2391 * rt -----
2392 * rs -----
2393 * rd -----
2394 */
2395 std::string NMD::ADDQH_W(uint64 instruction)
2396 {
2397 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2398 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2399 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2400
2401 std::string rd = GPR(copy(rd_value));
2402 std::string rs = GPR(copy(rs_value));
2403 std::string rt = GPR(copy(rt_value));
2404
2405 return img::format("ADDQH.W %s, %s, %s", rd, rs, rt);
2406 }
2407
2408
2409 /*
2410 * [DSP] ADDSC rd, rt, rs - Add two signed words and set carry bit
2411 *
2412 * 3 2 1
2413 * 10987654321098765432109876543210
2414 * 001000 x1110000101
2415 * rt -----
2416 * rs -----
2417 * rd -----
2418 */
2419 std::string NMD::ADDSC(uint64 instruction)
2420 {
2421 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2422 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2423 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2424
2425 std::string rd = GPR(copy(rd_value));
2426 std::string rs = GPR(copy(rs_value));
2427 std::string rt = GPR(copy(rt_value));
2428
2429 return img::format("ADDSC %s, %s, %s", rd, rs, rt);
2430 }
2431
2432
2433 /*
2434 * ADDU[16] rd3, rs3, rt3 -
2435 *
2436 * 5432109876543210
2437 * 101100 0
2438 * rt3 ---
2439 * rs3 ---
2440 * rd3 ---
2441 */
2442 std::string NMD::ADDU_16_(uint64 instruction)
2443 {
2444 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2445 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2446 uint64 rd3_value = extract_rd3_3_2_1(instruction);
2447
2448 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2449 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
2450 std::string rd3 = GPR(decode_gpr_gpr3(rd3_value));
2451
2452 return img::format("ADDU %s, %s, %s", rd3, rs3, rt3);
2453 }
2454
2455
2456 /*
2457 *
2458 *
2459 * 3 2 1
2460 * 10987654321098765432109876543210
2461 * 001000 x1110000101
2462 * rt -----
2463 * rs -----
2464 * rd -----
2465 */
2466 std::string NMD::ADDU_32_(uint64 instruction)
2467 {
2468 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2469 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2470 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2471
2472 std::string rd = GPR(copy(rd_value));
2473 std::string rs = GPR(copy(rs_value));
2474 std::string rt = GPR(copy(rt_value));
2475
2476 return img::format("ADDU %s, %s, %s", rd, rs, rt);
2477 }
2478
2479
2480 /*
2481 *
2482 *
2483 * 3 2 1
2484 * 10987654321098765432109876543210
2485 * 001000 x1110000101
2486 * rt -----
2487 * rs -----
2488 * rd -----
2489 */
2490 std::string NMD::ADDU_4X4_(uint64 instruction)
2491 {
2492 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
2493 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
2494
2495 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
2496 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
2497
2498 return img::format("ADDU %s, %s", rs4, rt4);
2499 }
2500
2501
2502 /*
2503 * [DSP] ADDU.PH rd, rt, rs - Add two pairs of unsigned halfwords
2504 *
2505 * 3 2 1
2506 * 10987654321098765432109876543210
2507 * 001000 00100001101
2508 * rt -----
2509 * rs -----
2510 * rd -----
2511 */
2512 std::string NMD::ADDU_PH(uint64 instruction)
2513 {
2514 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2515 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2516 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2517
2518 std::string rd = GPR(copy(rd_value));
2519 std::string rs = GPR(copy(rs_value));
2520 std::string rt = GPR(copy(rt_value));
2521
2522 return img::format("ADDU.PH %s, %s, %s", rd, rs, rt);
2523 }
2524
2525
2526 /*
2527 * ADDU.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2528 *
2529 * 3 2 1
2530 * 10987654321098765432109876543210
2531 * 001000 00011001101
2532 * rt -----
2533 * rs -----
2534 * rd -----
2535 */
2536 std::string NMD::ADDU_QB(uint64 instruction)
2537 {
2538 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2539 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2540 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2541
2542 std::string rd = GPR(copy(rd_value));
2543 std::string rs = GPR(copy(rs_value));
2544 std::string rt = GPR(copy(rt_value));
2545
2546 return img::format("ADDU.QB %s, %s, %s", rd, rs, rt);
2547 }
2548
2549
2550 /*
2551 * [DSP] ADDU_S.PH rd, rt, rs - Add two pairs of unsigned halfwords with 16-bit
2552 * saturation
2553 *
2554 * 3 2 1
2555 * 10987654321098765432109876543210
2556 * 001000 10100001101
2557 * rt -----
2558 * rs -----
2559 * rd -----
2560 */
2561 std::string NMD::ADDU_S_PH(uint64 instruction)
2562 {
2563 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2564 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2565 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2566
2567 std::string rd = GPR(copy(rd_value));
2568 std::string rs = GPR(copy(rs_value));
2569 std::string rt = GPR(copy(rt_value));
2570
2571 return img::format("ADDU_S.PH %s, %s, %s", rd, rs, rt);
2572 }
2573
2574
2575 /*
2576 * ADDU_S.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2577 *
2578 * 3 2 1
2579 * 10987654321098765432109876543210
2580 * 001000 10011001101
2581 * rt -----
2582 * rs -----
2583 * rd -----
2584 */
2585 std::string NMD::ADDU_S_QB(uint64 instruction)
2586 {
2587 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2588 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2589 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2590
2591 std::string rd = GPR(copy(rd_value));
2592 std::string rs = GPR(copy(rs_value));
2593 std::string rt = GPR(copy(rt_value));
2594
2595 return img::format("ADDU_S.QB %s, %s, %s", rd, rs, rt);
2596 }
2597
2598
2599 /*
2600 * ADDUH.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2601 * to Halve Results
2602 *
2603 * 3 2 1
2604 * 10987654321098765432109876543210
2605 * 001000 00101001101
2606 * rt -----
2607 * rs -----
2608 * rd -----
2609 */
2610 std::string NMD::ADDUH_QB(uint64 instruction)
2611 {
2612 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2613 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2614 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2615
2616 std::string rd = GPR(copy(rd_value));
2617 std::string rs = GPR(copy(rs_value));
2618 std::string rt = GPR(copy(rt_value));
2619
2620 return img::format("ADDUH.QB %s, %s, %s", rd, rs, rt);
2621 }
2622
2623
2624 /*
2625 * ADDUH_R.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2626 * to Halve Results
2627 *
2628 * 3 2 1
2629 * 10987654321098765432109876543210
2630 * 001000 10101001101
2631 * rt -----
2632 * rs -----
2633 * rd -----
2634 */
2635 std::string NMD::ADDUH_R_QB(uint64 instruction)
2636 {
2637 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2638 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2639 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2640
2641 std::string rd = GPR(copy(rd_value));
2642 std::string rs = GPR(copy(rs_value));
2643 std::string rt = GPR(copy(rt_value));
2644
2645 return img::format("ADDUH_R.QB %s, %s, %s", rd, rs, rt);
2646 }
2647
2648 /*
2649 * ADDWC rd, rt, rs - Add Word with Carry Bit
2650 *
2651 * 3 2 1
2652 * 10987654321098765432109876543210
2653 * 001000 x1111000101
2654 * rt -----
2655 * rs -----
2656 * rd -----
2657 */
2658 std::string NMD::ADDWC(uint64 instruction)
2659 {
2660 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2661 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2662 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2663
2664 std::string rd = GPR(copy(rd_value));
2665 std::string rs = GPR(copy(rs_value));
2666 std::string rt = GPR(copy(rt_value));
2667
2668 return img::format("ADDWC %s, %s, %s", rd, rs, rt);
2669 }
2670
2671
2672 /*
2673 *
2674 *
2675 * 3 2 1
2676 * 10987654321098765432109876543210
2677 * 001000 x1110000101
2678 * rt -----
2679 * rs -----
2680 * rd -----
2681 */
2682 std::string NMD::ALUIPC(uint64 instruction)
2683 {
2684 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2685 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
2686
2687 std::string rt = GPR(copy(rt_value));
2688 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2689
2690 return img::format("ALUIPC %s, %%pcrel_hi(%s)", rt, s);
2691 }
2692
2693
2694 /*
2695 * AND[16] rt3, rs3 -
2696 *
2697 * 5432109876543210
2698 * 101100
2699 * rt3 ---
2700 * rs3 ---
2701 * eu ----
2702 */
2703 std::string NMD::AND_16_(uint64 instruction)
2704 {
2705 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2706 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2707
2708 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2709 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
2710
2711 return img::format("AND %s, %s", rs3, rt3);
2712 }
2713
2714
2715 /*
2716 *
2717 *
2718 * 3 2 1
2719 * 10987654321098765432109876543210
2720 * 001000 x1110000101
2721 * rt -----
2722 * rs -----
2723 * rd -----
2724 */
2725 std::string NMD::AND_32_(uint64 instruction)
2726 {
2727 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2728 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2729 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2730
2731 std::string rd = GPR(copy(rd_value));
2732 std::string rs = GPR(copy(rs_value));
2733 std::string rt = GPR(copy(rt_value));
2734
2735 return img::format("AND %s, %s, %s", rd, rs, rt);
2736 }
2737
2738
2739 /*
2740 * ANDI rt, rs, u -
2741 *
2742 * 5432109876543210
2743 * 101100
2744 * rt3 ---
2745 * rs3 ---
2746 * eu ----
2747 */
2748 std::string NMD::ANDI_16_(uint64 instruction)
2749 {
2750 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2751 uint64 rs3_value = extract_rs3_6_5_4(instruction);
2752 uint64 eu_value = extract_eu_3_2_1_0(instruction);
2753
2754 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2755 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
2756 std::string eu = IMMEDIATE(encode_eu_from_u_andi16(eu_value));
2757
2758 return img::format("ANDI %s, %s, %s", rt3, rs3, eu);
2759 }
2760
2761
2762 /*
2763 *
2764 *
2765 * 3 2 1
2766 * 10987654321098765432109876543210
2767 * 001000 x1110000101
2768 * rt -----
2769 * rs -----
2770 * rd -----
2771 */
2772 std::string NMD::ANDI_32_(uint64 instruction)
2773 {
2774 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2775 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2776 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
2777
2778 std::string rt = GPR(copy(rt_value));
2779 std::string rs = GPR(copy(rs_value));
2780 std::string u = IMMEDIATE(copy(u_value));
2781
2782 return img::format("ANDI %s, %s, %s", rt, rs, u);
2783 }
2784
2785
2786 /*
2787 *
2788 *
2789 * 3 2 1
2790 * 10987654321098765432109876543210
2791 * 001000 x1110000101
2792 * rt -----
2793 * rs -----
2794 * rd -----
2795 */
2796 std::string NMD::APPEND(uint64 instruction)
2797 {
2798 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2799 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2800 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
2801
2802 std::string rt = GPR(copy(rt_value));
2803 std::string rs = GPR(copy(rs_value));
2804 std::string sa = IMMEDIATE(copy(sa_value));
2805
2806 return img::format("APPEND %s, %s, %s", rt, rs, sa);
2807 }
2808
2809
2810 /*
2811 *
2812 *
2813 * 3 2 1
2814 * 10987654321098765432109876543210
2815 * 001000 x1110000101
2816 * rt -----
2817 * rs -----
2818 * rd -----
2819 */
2820 std::string NMD::ASET(uint64 instruction)
2821 {
2822 uint64 bit_value = extract_bit_23_22_21(instruction);
2823 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2824 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
2825
2826 std::string bit = IMMEDIATE(copy(bit_value));
2827 std::string s = IMMEDIATE(copy(s_value));
2828 std::string rs = GPR(copy(rs_value));
2829
2830 return img::format("ASET %s, %s(%s)", bit, s, rs);
2831 }
2832
2833
2834 /*
2835 *
2836 *
2837 * 3 2 1
2838 * 10987654321098765432109876543210
2839 * 001000 x1110000101
2840 * rt -----
2841 * rs -----
2842 * rd -----
2843 */
2844 std::string NMD::BALC_16_(uint64 instruction)
2845 {
2846 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2847
2848 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
2849
2850 return img::format("BALC %s", s);
2851 }
2852
2853
2854 /*
2855 *
2856 *
2857 * 3 2 1
2858 * 10987654321098765432109876543210
2859 * 001000 x1110000101
2860 * rt -----
2861 * rs -----
2862 * rd -----
2863 */
2864 std::string NMD::BALC_32_(uint64 instruction)
2865 {
2866 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2867
2868 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2869
2870 return img::format("BALC %s", s);
2871 }
2872
2873
2874 /*
2875 *
2876 *
2877 * 3 2 1
2878 * 10987654321098765432109876543210
2879 * 001000 x1110000101
2880 * rt -----
2881 * rs -----
2882 * rd -----
2883 */
2884 std::string NMD::BALRSC(uint64 instruction)
2885 {
2886 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2887 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2888
2889 std::string rt = GPR(copy(rt_value));
2890 std::string rs = GPR(copy(rs_value));
2891
2892 return img::format("BALRSC %s, %s", rt, rs);
2893 }
2894
2895
2896 /*
2897 *
2898 *
2899 * 3 2 1
2900 * 10987654321098765432109876543210
2901 * 001000 x1110000101
2902 * rt -----
2903 * rs -----
2904 * rd -----
2905 */
2906 std::string NMD::BBEQZC(uint64 instruction)
2907 {
2908 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2909 uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2910 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2911
2912 std::string rt = GPR(copy(rt_value));
2913 std::string bit = IMMEDIATE(copy(bit_value));
2914 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2915
2916 return img::format("BBEQZC %s, %s, %s", rt, bit, s);
2917 }
2918
2919
2920 /*
2921 *
2922 *
2923 * 3 2 1
2924 * 10987654321098765432109876543210
2925 * 001000 x1110000101
2926 * rt -----
2927 * rs -----
2928 * rd -----
2929 */
2930 std::string NMD::BBNEZC(uint64 instruction)
2931 {
2932 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2933 uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2934 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2935
2936 std::string rt = GPR(copy(rt_value));
2937 std::string bit = IMMEDIATE(copy(bit_value));
2938 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2939
2940 return img::format("BBNEZC %s, %s, %s", rt, bit, s);
2941 }
2942
2943
2944 /*
2945 *
2946 *
2947 * 3 2 1
2948 * 10987654321098765432109876543210
2949 * 001000 x1110000101
2950 * rt -----
2951 * rs -----
2952 * rd -----
2953 */
2954 std::string NMD::BC_16_(uint64 instruction)
2955 {
2956 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2957
2958 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
2959
2960 return img::format("BC %s", s);
2961 }
2962
2963
2964 /*
2965 *
2966 *
2967 * 3 2 1
2968 * 10987654321098765432109876543210
2969 * 001000 x1110000101
2970 * rt -----
2971 * rs -----
2972 * rd -----
2973 */
2974 std::string NMD::BC_32_(uint64 instruction)
2975 {
2976 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2977
2978 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
2979
2980 return img::format("BC %s", s);
2981 }
2982
2983
2984 /*
2985 *
2986 *
2987 * 3 2 1
2988 * 10987654321098765432109876543210
2989 * 001000 x1110000101
2990 * rt -----
2991 * rs -----
2992 * rd -----
2993 */
2994 std::string NMD::BC1EQZC(uint64 instruction)
2995 {
2996 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
2997 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2998
2999 std::string ft = FPR(copy(ft_value));
3000 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3001
3002 return img::format("BC1EQZC %s, %s", ft, s);
3003 }
3004
3005
3006 /*
3007 *
3008 *
3009 * 3 2 1
3010 * 10987654321098765432109876543210
3011 * 001000 x1110000101
3012 * rt -----
3013 * rs -----
3014 * rd -----
3015 */
3016 std::string NMD::BC1NEZC(uint64 instruction)
3017 {
3018 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3019 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3020
3021 std::string ft = FPR(copy(ft_value));
3022 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3023
3024 return img::format("BC1NEZC %s, %s", ft, s);
3025 }
3026
3027
3028 /*
3029 *
3030 *
3031 * 3 2 1
3032 * 10987654321098765432109876543210
3033 * 001000 x1110000101
3034 * rt -----
3035 * rs -----
3036 * rd -----
3037 */
3038 std::string NMD::BC2EQZC(uint64 instruction)
3039 {
3040 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
3041 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3042
3043 std::string ct = CPR(copy(ct_value));
3044 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3045
3046 return img::format("BC2EQZC %s, %s", ct, s);
3047 }
3048
3049
3050 /*
3051 *
3052 *
3053 * 3 2 1
3054 * 10987654321098765432109876543210
3055 * 001000 x1110000101
3056 * rt -----
3057 * rs -----
3058 * rd -----
3059 */
3060 std::string NMD::BC2NEZC(uint64 instruction)
3061 {
3062 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
3063 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3064
3065 std::string ct = CPR(copy(ct_value));
3066 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3067
3068 return img::format("BC2NEZC %s, %s", ct, s);
3069 }
3070
3071
3072 /*
3073 *
3074 *
3075 * 3 2 1
3076 * 10987654321098765432109876543210
3077 * 001000 x1110000101
3078 * rt -----
3079 * rs -----
3080 * rd -----
3081 */
3082 std::string NMD::BEQC_16_(uint64 instruction)
3083 {
3084 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3085 uint64 rs3_value = extract_rs3_6_5_4(instruction);
3086 uint64 u_value = extract_u_3_2_1_0__s1(instruction);
3087
3088 std::string rs3 = GPR(encode_rs3_and_check_rs3_lt_rt3(rs3_value));
3089 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
3090 std::string u = ADDRESS(encode_u_from_address(u_value), 2);
3091
3092 return img::format("BEQC %s, %s, %s", rs3, rt3, u);
3093 }
3094
3095
3096 /*
3097 *
3098 *
3099 * 3 2 1
3100 * 10987654321098765432109876543210
3101 * 001000 x1110000101
3102 * rt -----
3103 * rs -----
3104 * rd -----
3105 */
3106 std::string NMD::BEQC_32_(uint64 instruction)
3107 {
3108 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3109 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3110 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3111
3112 std::string rs = GPR(copy(rs_value));
3113 std::string rt = GPR(copy(rt_value));
3114 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3115
3116 return img::format("BEQC %s, %s, %s", rs, rt, s);
3117 }
3118
3119
3120 /*
3121 *
3122 *
3123 * 3 2 1
3124 * 10987654321098765432109876543210
3125 * 001000 x1110000101
3126 * rt -----
3127 * rs -----
3128 * rd -----
3129 */
3130 std::string NMD::BEQIC(uint64 instruction)
3131 {
3132 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3133 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3134 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3135
3136 std::string rt = GPR(copy(rt_value));
3137 std::string u = IMMEDIATE(copy(u_value));
3138 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3139
3140 return img::format("BEQIC %s, %s, %s", rt, u, s);
3141 }
3142
3143
3144 /*
3145 *
3146 *
3147 * 3 2 1
3148 * 10987654321098765432109876543210
3149 * 001000 x1110000101
3150 * rt -----
3151 * rs -----
3152 * rd -----
3153 */
3154 std::string NMD::BEQZC_16_(uint64 instruction)
3155 {
3156 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3157 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
3158
3159 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
3160 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
3161
3162 return img::format("BEQZC %s, %s", rt3, s);
3163 }
3164
3165
3166 /*
3167 *
3168 *
3169 * 3 2 1
3170 * 10987654321098765432109876543210
3171 * 001000 x1110000101
3172 * rt -----
3173 * rs -----
3174 * rd -----
3175 */
3176 std::string NMD::BGEC(uint64 instruction)
3177 {
3178 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3179 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3180 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3181
3182 std::string rs = GPR(copy(rs_value));
3183 std::string rt = GPR(copy(rt_value));
3184 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3185
3186 return img::format("BGEC %s, %s, %s", rs, rt, s);
3187 }
3188
3189
3190 /*
3191 *
3192 *
3193 * 3 2 1
3194 * 10987654321098765432109876543210
3195 * 001000 x1110000101
3196 * rt -----
3197 * rs -----
3198 * rd -----
3199 */
3200 std::string NMD::BGEIC(uint64 instruction)
3201 {
3202 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3203 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3204 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3205
3206 std::string rt = GPR(copy(rt_value));
3207 std::string u = IMMEDIATE(copy(u_value));
3208 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3209
3210 return img::format("BGEIC %s, %s, %s", rt, u, s);
3211 }
3212
3213
3214 /*
3215 *
3216 *
3217 * 3 2 1
3218 * 10987654321098765432109876543210
3219 * 001000 x1110000101
3220 * rt -----
3221 * rs -----
3222 * rd -----
3223 */
3224 std::string NMD::BGEIUC(uint64 instruction)
3225 {
3226 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3227 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3228 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3229
3230 std::string rt = GPR(copy(rt_value));
3231 std::string u = IMMEDIATE(copy(u_value));
3232 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3233
3234 return img::format("BGEIUC %s, %s, %s", rt, u, s);
3235 }
3236
3237
3238 /*
3239 *
3240 *
3241 * 3 2 1
3242 * 10987654321098765432109876543210
3243 * 001000 x1110000101
3244 * rt -----
3245 * rs -----
3246 * rd -----
3247 */
3248 std::string NMD::BGEUC(uint64 instruction)
3249 {
3250 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3251 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3252 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3253
3254 std::string rs = GPR(copy(rs_value));
3255 std::string rt = GPR(copy(rt_value));
3256 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3257
3258 return img::format("BGEUC %s, %s, %s", rs, rt, s);
3259 }
3260
3261
3262 /*
3263 *
3264 *
3265 * 3 2 1
3266 * 10987654321098765432109876543210
3267 * 001000 x1110000101
3268 * rt -----
3269 * rs -----
3270 * rd -----
3271 */
3272 std::string NMD::BLTC(uint64 instruction)
3273 {
3274 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3275 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3276 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3277
3278 std::string rs = GPR(copy(rs_value));
3279 std::string rt = GPR(copy(rt_value));
3280 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3281
3282 return img::format("BLTC %s, %s, %s", rs, rt, s);
3283 }
3284
3285
3286 /*
3287 *
3288 *
3289 * 3 2 1
3290 * 10987654321098765432109876543210
3291 * 001000 x1110000101
3292 * rt -----
3293 * rs -----
3294 * rd -----
3295 */
3296 std::string NMD::BLTIC(uint64 instruction)
3297 {
3298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3299 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3300 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3301
3302 std::string rt = GPR(copy(rt_value));
3303 std::string u = IMMEDIATE(copy(u_value));
3304 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3305
3306 return img::format("BLTIC %s, %s, %s", rt, u, s);
3307 }
3308
3309
3310 /*
3311 *
3312 *
3313 * 3 2 1
3314 * 10987654321098765432109876543210
3315 * 001000 x1110000101
3316 * rt -----
3317 * rs -----
3318 * rd -----
3319 */
3320 std::string NMD::BLTIUC(uint64 instruction)
3321 {
3322 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3323 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3324 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3325
3326 std::string rt = GPR(copy(rt_value));
3327 std::string u = IMMEDIATE(copy(u_value));
3328 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3329
3330 return img::format("BLTIUC %s, %s, %s", rt, u, s);
3331 }
3332
3333
3334 /*
3335 *
3336 *
3337 * 3 2 1
3338 * 10987654321098765432109876543210
3339 * 001000 x1110000101
3340 * rt -----
3341 * rs -----
3342 * rd -----
3343 */
3344 std::string NMD::BLTUC(uint64 instruction)
3345 {
3346 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3347 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3348 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3349
3350 std::string rs = GPR(copy(rs_value));
3351 std::string rt = GPR(copy(rt_value));
3352 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3353
3354 return img::format("BLTUC %s, %s, %s", rs, rt, s);
3355 }
3356
3357
3358 /*
3359 *
3360 *
3361 * 3 2 1
3362 * 10987654321098765432109876543210
3363 * 001000 x1110000101
3364 * rt -----
3365 * rs -----
3366 * rd -----
3367 */
3368 std::string NMD::BNEC_16_(uint64 instruction)
3369 {
3370 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3371 uint64 rs3_value = extract_rs3_6_5_4(instruction);
3372 uint64 u_value = extract_u_3_2_1_0__s1(instruction);
3373
3374 std::string rs3 = GPR(encode_rs3_and_check_rs3_ge_rt3(rs3_value));
3375 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
3376 std::string u = ADDRESS(encode_u_from_address(u_value), 2);
3377
3378 return img::format("BNEC %s, %s, %s", rs3, rt3, u);
3379 }
3380
3381
3382 /*
3383 *
3384 *
3385 * 3 2 1
3386 * 10987654321098765432109876543210
3387 * 001000 x1110000101
3388 * rt -----
3389 * rs -----
3390 * rd -----
3391 */
3392 std::string NMD::BNEC_32_(uint64 instruction)
3393 {
3394 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3395 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3396 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3397
3398 std::string rs = GPR(copy(rs_value));
3399 std::string rt = GPR(copy(rt_value));
3400 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3401
3402 return img::format("BNEC %s, %s, %s", rs, rt, s);
3403 }
3404
3405
3406 /*
3407 *
3408 *
3409 * 3 2 1
3410 * 10987654321098765432109876543210
3411 * 001000 x1110000101
3412 * rt -----
3413 * rs -----
3414 * rd -----
3415 */
3416 std::string NMD::BNEIC(uint64 instruction)
3417 {
3418 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3419 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3420 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3421
3422 std::string rt = GPR(copy(rt_value));
3423 std::string u = IMMEDIATE(copy(u_value));
3424 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3425
3426 return img::format("BNEIC %s, %s, %s", rt, u, s);
3427 }
3428
3429
3430 /*
3431 *
3432 *
3433 * 3 2 1
3434 * 10987654321098765432109876543210
3435 * 001000 x1110000101
3436 * rt -----
3437 * rs -----
3438 * rd -----
3439 */
3440 std::string NMD::BNEZC_16_(uint64 instruction)
3441 {
3442 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3443 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
3444
3445 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
3446 std::string s = ADDRESS(encode_s_from_address(s_value), 2);
3447
3448 return img::format("BNEZC %s, %s", rt3, s);
3449 }
3450
3451
3452 /*
3453 * [DSP] BPOSGE32C offset - Branch on greater than or equal to value 32 in
3454 * DSPControl Pos field
3455 *
3456 * 3 2 1
3457 * 10987654321098765432109876543210
3458 * 100010xxxxx0010001
3459 * s[13:1] -------------
3460 * s[14] -
3461 */
3462 std::string NMD::BPOSGE32C(uint64 instruction)
3463 {
3464 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3465
3466 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
3467
3468 return img::format("BPOSGE32C %s", s);
3469 }
3470
3471
3472 /*
3473 *
3474 *
3475 * 3 2 1
3476 * 10987654321098765432109876543210
3477 * 001000 x1110000101
3478 * rt -----
3479 * rs -----
3480 * rd -----
3481 */
3482 std::string NMD::BREAK_16_(uint64 instruction)
3483 {
3484 uint64 code_value = extract_code_2_1_0(instruction);
3485
3486 std::string code = IMMEDIATE(copy(code_value));
3487
3488 return img::format("BREAK %s", code);
3489 }
3490
3491
3492 /*
3493 * BREAK code - Break. Cause a Breakpoint exception
3494 *
3495 * 3 2 1
3496 * 10987654321098765432109876543210
3497 * 001000 x1110000101
3498 * rt -----
3499 * rs -----
3500 * rd -----
3501 */
3502 std::string NMD::BREAK_32_(uint64 instruction)
3503 {
3504 uint64 code_value = extract_code_18_to_0(instruction);
3505
3506 std::string code = IMMEDIATE(copy(code_value));
3507
3508 return img::format("BREAK %s", code);
3509 }
3510
3511
3512 /*
3513 *
3514 *
3515 * 3 2 1
3516 * 10987654321098765432109876543210
3517 * 001000 x1110000101
3518 * rt -----
3519 * rs -----
3520 * rd -----
3521 */
3522 std::string NMD::BRSC(uint64 instruction)
3523 {
3524 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3525
3526 std::string rs = GPR(copy(rs_value));
3527
3528 return img::format("BRSC %s", rs);
3529 }
3530
3531
3532 /*
3533 *
3534 *
3535 * 3 2 1
3536 * 10987654321098765432109876543210
3537 * 001000 x1110000101
3538 * rt -----
3539 * rs -----
3540 * rd -----
3541 */
3542 std::string NMD::CACHE(uint64 instruction)
3543 {
3544 uint64 op_value = extract_op_25_24_23_22_21(instruction);
3545 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3546 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3547
3548 std::string op = IMMEDIATE(copy(op_value));
3549 std::string s = IMMEDIATE(copy(s_value));
3550 std::string rs = GPR(copy(rs_value));
3551
3552 return img::format("CACHE %s, %s(%s)", op, s, rs);
3553 }
3554
3555
3556 /*
3557 *
3558 *
3559 * 3 2 1
3560 * 10987654321098765432109876543210
3561 * 001000 x1110000101
3562 * rt -----
3563 * rs -----
3564 * rd -----
3565 */
3566 std::string NMD::CACHEE(uint64 instruction)
3567 {
3568 uint64 op_value = extract_op_25_24_23_22_21(instruction);
3569 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3570 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3571
3572 std::string op = IMMEDIATE(copy(op_value));
3573 std::string s = IMMEDIATE(copy(s_value));
3574 std::string rs = GPR(copy(rs_value));
3575
3576 return img::format("CACHEE %s, %s(%s)", op, s, rs);
3577 }
3578
3579
3580 /*
3581 *
3582 *
3583 * 3 2 1
3584 * 10987654321098765432109876543210
3585 * 001000 x1110000101
3586 * rt -----
3587 * rs -----
3588 * rd -----
3589 */
3590 std::string NMD::CEIL_L_D(uint64 instruction)
3591 {
3592 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3593 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3594
3595 std::string ft = FPR(copy(ft_value));
3596 std::string fs = FPR(copy(fs_value));
3597
3598 return img::format("CEIL.L.D %s, %s", ft, fs);
3599 }
3600
3601
3602 /*
3603 *
3604 *
3605 * 3 2 1
3606 * 10987654321098765432109876543210
3607 * 001000 x1110000101
3608 * rt -----
3609 * rs -----
3610 * rd -----
3611 */
3612 std::string NMD::CEIL_L_S(uint64 instruction)
3613 {
3614 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3615 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3616
3617 std::string ft = FPR(copy(ft_value));
3618 std::string fs = FPR(copy(fs_value));
3619
3620 return img::format("CEIL.L.S %s, %s", ft, fs);
3621 }
3622
3623
3624 /*
3625 *
3626 *
3627 * 3 2 1
3628 * 10987654321098765432109876543210
3629 * 001000 x1110000101
3630 * rt -----
3631 * rs -----
3632 * rd -----
3633 */
3634 std::string NMD::CEIL_W_D(uint64 instruction)
3635 {
3636 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3637 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3638
3639 std::string ft = FPR(copy(ft_value));
3640 std::string fs = FPR(copy(fs_value));
3641
3642 return img::format("CEIL.W.D %s, %s", ft, fs);
3643 }
3644
3645
3646 /*
3647 *
3648 *
3649 * 3 2 1
3650 * 10987654321098765432109876543210
3651 * 001000 x1110000101
3652 * rt -----
3653 * rs -----
3654 * rd -----
3655 */
3656 std::string NMD::CEIL_W_S(uint64 instruction)
3657 {
3658 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3659 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3660
3661 std::string ft = FPR(copy(ft_value));
3662 std::string fs = FPR(copy(fs_value));
3663
3664 return img::format("CEIL.W.S %s, %s", ft, fs);
3665 }
3666
3667
3668 /*
3669 *
3670 *
3671 * 3 2 1
3672 * 10987654321098765432109876543210
3673 * 001000 x1110000101
3674 * rt -----
3675 * rs -----
3676 * rd -----
3677 */
3678 std::string NMD::CFC1(uint64 instruction)
3679 {
3680 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3681 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3682
3683 std::string rt = GPR(copy(rt_value));
3684 std::string cs = CPR(copy(cs_value));
3685
3686 return img::format("CFC1 %s, %s", rt, cs);
3687 }
3688
3689
3690 /*
3691 *
3692 *
3693 * 3 2 1
3694 * 10987654321098765432109876543210
3695 * 001000 x1110000101
3696 * rt -----
3697 * rs -----
3698 * rd -----
3699 */
3700 std::string NMD::CFC2(uint64 instruction)
3701 {
3702 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3703 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3704
3705 std::string rt = GPR(copy(rt_value));
3706 std::string cs = CPR(copy(cs_value));
3707
3708 return img::format("CFC2 %s, %s", rt, cs);
3709 }
3710
3711
3712 /*
3713 *
3714 *
3715 * 3 2 1
3716 * 10987654321098765432109876543210
3717 * 001000 x1110000101
3718 * rt -----
3719 * rs -----
3720 * rd -----
3721 */
3722 std::string NMD::CLASS_D(uint64 instruction)
3723 {
3724 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3725 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3726
3727 std::string ft = FPR(copy(ft_value));
3728 std::string fs = FPR(copy(fs_value));
3729
3730 return img::format("CLASS.D %s, %s", ft, fs);
3731 }
3732
3733
3734 /*
3735 *
3736 *
3737 * 3 2 1
3738 * 10987654321098765432109876543210
3739 * 001000 x1110000101
3740 * rt -----
3741 * rs -----
3742 * rd -----
3743 */
3744 std::string NMD::CLASS_S(uint64 instruction)
3745 {
3746 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3747 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3748
3749 std::string ft = FPR(copy(ft_value));
3750 std::string fs = FPR(copy(fs_value));
3751
3752 return img::format("CLASS.S %s, %s", ft, fs);
3753 }
3754
3755
3756 /*
3757 *
3758 *
3759 * 3 2 1
3760 * 10987654321098765432109876543210
3761 * 001000 x1110000101
3762 * rt -----
3763 * rs -----
3764 * rd -----
3765 */
3766 std::string NMD::CLO(uint64 instruction)
3767 {
3768 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3769 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3770
3771 std::string rt = GPR(copy(rt_value));
3772 std::string rs = GPR(copy(rs_value));
3773
3774 return img::format("CLO %s, %s", rt, rs);
3775 }
3776
3777
3778 /*
3779 *
3780 *
3781 * 3 2 1
3782 * 10987654321098765432109876543210
3783 * 001000 x1110000101
3784 * rt -----
3785 * rs -----
3786 * rd -----
3787 */
3788 std::string NMD::CLZ(uint64 instruction)
3789 {
3790 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3791 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3792
3793 std::string rt = GPR(copy(rt_value));
3794 std::string rs = GPR(copy(rs_value));
3795
3796 return img::format("CLZ %s, %s", rt, rs);
3797 }
3798
3799
3800 /*
3801 *
3802 *
3803 * 3 2 1
3804 * 10987654321098765432109876543210
3805 * 001000 x1110000101
3806 * rt -----
3807 * rs -----
3808 * rd -----
3809 */
3810 std::string NMD::CMP_AF_D(uint64 instruction)
3811 {
3812 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3813 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3814 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3815
3816 std::string fd = FPR(copy(fd_value));
3817 std::string fs = FPR(copy(fs_value));
3818 std::string ft = FPR(copy(ft_value));
3819
3820 return img::format("CMP.AF.D %s, %s, %s", fd, fs, ft);
3821 }
3822
3823
3824 /*
3825 *
3826 *
3827 * 3 2 1
3828 * 10987654321098765432109876543210
3829 * 001000 x1110000101
3830 * rt -----
3831 * rs -----
3832 * rd -----
3833 */
3834 std::string NMD::CMP_AF_S(uint64 instruction)
3835 {
3836 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3837 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3838 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3839
3840 std::string fd = FPR(copy(fd_value));
3841 std::string fs = FPR(copy(fs_value));
3842 std::string ft = FPR(copy(ft_value));
3843
3844 return img::format("CMP.AF.S %s, %s, %s", fd, fs, ft);
3845 }
3846
3847
3848 /*
3849 *
3850 *
3851 * 3 2 1
3852 * 10987654321098765432109876543210
3853 * 001000 x1110000101
3854 * rt -----
3855 * rs -----
3856 * rd -----
3857 */
3858 std::string NMD::CMP_EQ_D(uint64 instruction)
3859 {
3860 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3861 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3862 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3863
3864 std::string fd = FPR(copy(fd_value));
3865 std::string fs = FPR(copy(fs_value));
3866 std::string ft = FPR(copy(ft_value));
3867
3868 return img::format("CMP.EQ.D %s, %s, %s", fd, fs, ft);
3869 }
3870
3871
3872 /*
3873 * [DSP] CMP.EQ.PH rs, rt - Compare vectors of signed integer halfword values
3874 *
3875 * 3 2 1
3876 * 10987654321098765432109876543210
3877 * 001000 xxxxxx0000000101
3878 * rt -----
3879 * rs -----
3880 */
3881 std::string NMD::CMP_EQ_PH(uint64 instruction)
3882 {
3883 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3884 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3885
3886 std::string rs = GPR(copy(rs_value));
3887 std::string rt = GPR(copy(rt_value));
3888
3889 return img::format("CMP.EQ.PH %s, %s", rs, rt);
3890 }
3891
3892
3893 /*
3894 *
3895 *
3896 * 3 2 1
3897 * 10987654321098765432109876543210
3898 * 001000 x1110000101
3899 * rt -----
3900 * rs -----
3901 * rd -----
3902 */
3903 std::string NMD::CMP_EQ_S(uint64 instruction)
3904 {
3905 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3906 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3907 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3908
3909 std::string fd = FPR(copy(fd_value));
3910 std::string fs = FPR(copy(fs_value));
3911 std::string ft = FPR(copy(ft_value));
3912
3913 return img::format("CMP.EQ.S %s, %s, %s", fd, fs, ft);
3914 }
3915
3916
3917 /*
3918 *
3919 *
3920 * 3 2 1
3921 * 10987654321098765432109876543210
3922 * 001000 x1110000101
3923 * rt -----
3924 * rs -----
3925 * rd -----
3926 */
3927 std::string NMD::CMP_LE_D(uint64 instruction)
3928 {
3929 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3930 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3931 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3932
3933 std::string fd = FPR(copy(fd_value));
3934 std::string fs = FPR(copy(fs_value));
3935 std::string ft = FPR(copy(ft_value));
3936
3937 return img::format("CMP.LE.D %s, %s, %s", fd, fs, ft);
3938 }
3939
3940
3941 /*
3942 * [DSP] CMP.LE.PH rs, rt - Compare vectors of signed integer halfword values
3943 *
3944 * 3 2 1
3945 * 10987654321098765432109876543210
3946 * 001000 xxxxxx0010000101
3947 * rt -----
3948 * rs -----
3949 */
3950 std::string NMD::CMP_LE_PH(uint64 instruction)
3951 {
3952 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3953 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3954
3955 std::string rs = GPR(copy(rs_value));
3956 std::string rt = GPR(copy(rt_value));
3957
3958 return img::format("CMP.LE.PH %s, %s", rs, rt);
3959 }
3960
3961
3962 /*
3963 *
3964 *
3965 * 3 2 1
3966 * 10987654321098765432109876543210
3967 * 001000 x1110000101
3968 * rt -----
3969 * rs -----
3970 * rd -----
3971 */
3972 std::string NMD::CMP_LE_S(uint64 instruction)
3973 {
3974 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3975 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3976 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3977
3978 std::string fd = FPR(copy(fd_value));
3979 std::string fs = FPR(copy(fs_value));
3980 std::string ft = FPR(copy(ft_value));
3981
3982 return img::format("CMP.LE.S %s, %s, %s", fd, fs, ft);
3983 }
3984
3985
3986 /*
3987 *
3988 *
3989 * 3 2 1
3990 * 10987654321098765432109876543210
3991 * 001000 x1110000101
3992 * rt -----
3993 * rs -----
3994 * rd -----
3995 */
3996 std::string NMD::CMP_LT_D(uint64 instruction)
3997 {
3998 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3999 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4000 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4001
4002 std::string fd = FPR(copy(fd_value));
4003 std::string fs = FPR(copy(fs_value));
4004 std::string ft = FPR(copy(ft_value));
4005
4006 return img::format("CMP.LT.D %s, %s, %s", fd, fs, ft);
4007 }
4008
4009
4010 /*
4011 * [DSP] CMP.LT.PH rs, rt - Compare vectors of signed integer halfword values
4012 *
4013 * 3 2 1
4014 * 10987654321098765432109876543210
4015 * 001000 xxxxxx0001000101
4016 * rt -----
4017 * rs -----
4018 */
4019 std::string NMD::CMP_LT_PH(uint64 instruction)
4020 {
4021 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4022 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4023
4024 std::string rs = GPR(copy(rs_value));
4025 std::string rt = GPR(copy(rt_value));
4026
4027 return img::format("CMP.LT.PH %s, %s", rs, rt);
4028 }
4029
4030
4031 /*
4032 *
4033 *
4034 * 3 2 1
4035 * 10987654321098765432109876543210
4036 * 001000 x1110000101
4037 * rt -----
4038 * rs -----
4039 * rd -----
4040 */
4041 std::string NMD::CMP_LT_S(uint64 instruction)
4042 {
4043 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4044 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4045 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4046
4047 std::string fd = FPR(copy(fd_value));
4048 std::string fs = FPR(copy(fs_value));
4049 std::string ft = FPR(copy(ft_value));
4050
4051 return img::format("CMP.LT.S %s, %s, %s", fd, fs, ft);
4052 }
4053
4054
4055 /*
4056 *
4057 *
4058 * 3 2 1
4059 * 10987654321098765432109876543210
4060 * 001000 x1110000101
4061 * rt -----
4062 * rs -----
4063 * rd -----
4064 */
4065 std::string NMD::CMP_NE_D(uint64 instruction)
4066 {
4067 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4068 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4069 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4070
4071 std::string fd = FPR(copy(fd_value));
4072 std::string fs = FPR(copy(fs_value));
4073 std::string ft = FPR(copy(ft_value));
4074
4075 return img::format("CMP.NE.D %s, %s, %s", fd, fs, ft);
4076 }
4077
4078
4079 /*
4080 *
4081 *
4082 * 3 2 1
4083 * 10987654321098765432109876543210
4084 * 001000 x1110000101
4085 * rt -----
4086 * rs -----
4087 * rd -----
4088 */
4089 std::string NMD::CMP_NE_S(uint64 instruction)
4090 {
4091 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4092 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4093 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4094
4095 std::string fd = FPR(copy(fd_value));
4096 std::string fs = FPR(copy(fs_value));
4097 std::string ft = FPR(copy(ft_value));
4098
4099 return img::format("CMP.NE.S %s, %s, %s", fd, fs, ft);
4100 }
4101
4102
4103 /*
4104 *
4105 *
4106 * 3 2 1
4107 * 10987654321098765432109876543210
4108 * 001000 x1110000101
4109 * rt -----
4110 * rs -----
4111 * rd -----
4112 */
4113 std::string NMD::CMP_OR_D(uint64 instruction)
4114 {
4115 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4116 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4117 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4118
4119 std::string fd = FPR(copy(fd_value));
4120 std::string fs = FPR(copy(fs_value));
4121 std::string ft = FPR(copy(ft_value));
4122
4123 return img::format("CMP.OR.D %s, %s, %s", fd, fs, ft);
4124 }
4125
4126
4127 /*
4128 *
4129 *
4130 * 3 2 1
4131 * 10987654321098765432109876543210
4132 * 001000 x1110000101
4133 * rt -----
4134 * rs -----
4135 * rd -----
4136 */
4137 std::string NMD::CMP_OR_S(uint64 instruction)
4138 {
4139 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4140 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4141 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4142
4143 std::string fd = FPR(copy(fd_value));
4144 std::string fs = FPR(copy(fs_value));
4145 std::string ft = FPR(copy(ft_value));
4146
4147 return img::format("CMP.OR.S %s, %s, %s", fd, fs, ft);
4148 }
4149
4150
4151 /*
4152 *
4153 *
4154 * 3 2 1
4155 * 10987654321098765432109876543210
4156 * 001000 x1110000101
4157 * rt -----
4158 * rs -----
4159 * rd -----
4160 */
4161 std::string NMD::CMP_SAF_D(uint64 instruction)
4162 {
4163 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4164 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4165 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4166
4167 std::string fd = FPR(copy(fd_value));
4168 std::string fs = FPR(copy(fs_value));
4169 std::string ft = FPR(copy(ft_value));
4170
4171 return img::format("CMP.SAF.D %s, %s, %s", fd, fs, ft);
4172 }
4173
4174
4175 /*
4176 *
4177 *
4178 * 3 2 1
4179 * 10987654321098765432109876543210
4180 * 001000 x1110000101
4181 * rt -----
4182 * rs -----
4183 * rd -----
4184 */
4185 std::string NMD::CMP_SAF_S(uint64 instruction)
4186 {
4187 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4188 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4189 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4190
4191 std::string fd = FPR(copy(fd_value));
4192 std::string fs = FPR(copy(fs_value));
4193 std::string ft = FPR(copy(ft_value));
4194
4195 return img::format("CMP.SAF.S %s, %s, %s", fd, fs, ft);
4196 }
4197
4198
4199 /*
4200 *
4201 *
4202 * 3 2 1
4203 * 10987654321098765432109876543210
4204 * 001000 x1110000101
4205 * rt -----
4206 * rs -----
4207 * rd -----
4208 */
4209 std::string NMD::CMP_SEQ_D(uint64 instruction)
4210 {
4211 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4212 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4213 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4214
4215 std::string fd = FPR(copy(fd_value));
4216 std::string fs = FPR(copy(fs_value));
4217 std::string ft = FPR(copy(ft_value));
4218
4219 return img::format("CMP.SEQ.D %s, %s, %s", fd, fs, ft);
4220 }
4221
4222
4223 /*
4224 *
4225 *
4226 * 3 2 1
4227 * 10987654321098765432109876543210
4228 * 001000 x1110000101
4229 * rt -----
4230 * rs -----
4231 * rd -----
4232 */
4233 std::string NMD::CMP_SEQ_S(uint64 instruction)
4234 {
4235 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4236 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4237 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4238
4239 std::string fd = FPR(copy(fd_value));
4240 std::string fs = FPR(copy(fs_value));
4241 std::string ft = FPR(copy(ft_value));
4242
4243 return img::format("CMP.SEQ.S %s, %s, %s", fd, fs, ft);
4244 }
4245
4246
4247 /*
4248 *
4249 *
4250 * 3 2 1
4251 * 10987654321098765432109876543210
4252 * 001000 x1110000101
4253 * rt -----
4254 * rs -----
4255 * rd -----
4256 */
4257 std::string NMD::CMP_SLE_D(uint64 instruction)
4258 {
4259 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4260 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4261 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4262
4263 std::string fd = FPR(copy(fd_value));
4264 std::string fs = FPR(copy(fs_value));
4265 std::string ft = FPR(copy(ft_value));
4266
4267 return img::format("CMP.SLE.D %s, %s, %s", fd, fs, ft);
4268 }
4269
4270
4271 /*
4272 *
4273 *
4274 * 3 2 1
4275 * 10987654321098765432109876543210
4276 * 001000 x1110000101
4277 * rt -----
4278 * rs -----
4279 * rd -----
4280 */
4281 std::string NMD::CMP_SLE_S(uint64 instruction)
4282 {
4283 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4284 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4285 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4286
4287 std::string fd = FPR(copy(fd_value));
4288 std::string fs = FPR(copy(fs_value));
4289 std::string ft = FPR(copy(ft_value));
4290
4291 return img::format("CMP.SLE.S %s, %s, %s", fd, fs, ft);
4292 }
4293
4294
4295 /*
4296 *
4297 *
4298 * 3 2 1
4299 * 10987654321098765432109876543210
4300 * 001000 x1110000101
4301 * rt -----
4302 * rs -----
4303 * rd -----
4304 */
4305 std::string NMD::CMP_SLT_D(uint64 instruction)
4306 {
4307 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4308 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4309 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4310
4311 std::string fd = FPR(copy(fd_value));
4312 std::string fs = FPR(copy(fs_value));
4313 std::string ft = FPR(copy(ft_value));
4314
4315 return img::format("CMP.SLT.D %s, %s, %s", fd, fs, ft);
4316 }
4317
4318
4319 /*
4320 *
4321 *
4322 * 3 2 1
4323 * 10987654321098765432109876543210
4324 * 001000 x1110000101
4325 * rt -----
4326 * rs -----
4327 * rd -----
4328 */
4329 std::string NMD::CMP_SLT_S(uint64 instruction)
4330 {
4331 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4332 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4333 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4334
4335 std::string fd = FPR(copy(fd_value));
4336 std::string fs = FPR(copy(fs_value));
4337 std::string ft = FPR(copy(ft_value));
4338
4339 return img::format("CMP.SLT.S %s, %s, %s", fd, fs, ft);
4340 }
4341
4342
4343 /*
4344 *
4345 *
4346 * 3 2 1
4347 * 10987654321098765432109876543210
4348 * 001000 x1110000101
4349 * rt -----
4350 * rs -----
4351 * rd -----
4352 */
4353 std::string NMD::CMP_SNE_D(uint64 instruction)
4354 {
4355 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4356 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4357 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4358
4359 std::string fd = FPR(copy(fd_value));
4360 std::string fs = FPR(copy(fs_value));
4361 std::string ft = FPR(copy(ft_value));
4362
4363 return img::format("CMP.SNE.D %s, %s, %s", fd, fs, ft);
4364 }
4365
4366
4367 /*
4368 *
4369 *
4370 * 3 2 1
4371 * 10987654321098765432109876543210
4372 * 001000 x1110000101
4373 * rt -----
4374 * rs -----
4375 * rd -----
4376 */
4377 std::string NMD::CMP_SNE_S(uint64 instruction)
4378 {
4379 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4380 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4381 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4382
4383 std::string fd = FPR(copy(fd_value));
4384 std::string fs = FPR(copy(fs_value));
4385 std::string ft = FPR(copy(ft_value));
4386
4387 return img::format("CMP.SNE.S %s, %s, %s", fd, fs, ft);
4388 }
4389
4390
4391 /*
4392 *
4393 *
4394 * 3 2 1
4395 * 10987654321098765432109876543210
4396 * 001000 x1110000101
4397 * rt -----
4398 * rs -----
4399 * rd -----
4400 */
4401 std::string NMD::CMP_SOR_D(uint64 instruction)
4402 {
4403 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4404 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4405 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4406
4407 std::string fd = FPR(copy(fd_value));
4408 std::string fs = FPR(copy(fs_value));
4409 std::string ft = FPR(copy(ft_value));
4410
4411 return img::format("CMP.SOR.D %s, %s, %s", fd, fs, ft);
4412 }
4413
4414
4415 /*
4416 *
4417 *
4418 * 3 2 1
4419 * 10987654321098765432109876543210
4420 * 001000 x1110000101
4421 * rt -----
4422 * rs -----
4423 * rd -----
4424 */
4425 std::string NMD::CMP_SOR_S(uint64 instruction)
4426 {
4427 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4428 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4429 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4430
4431 std::string fd = FPR(copy(fd_value));
4432 std::string fs = FPR(copy(fs_value));
4433 std::string ft = FPR(copy(ft_value));
4434
4435 return img::format("CMP.SOR.S %s, %s, %s", fd, fs, ft);
4436 }
4437
4438
4439 /*
4440 *
4441 *
4442 * 3 2 1
4443 * 10987654321098765432109876543210
4444 * 001000 x1110000101
4445 * rt -----
4446 * rs -----
4447 * rd -----
4448 */
4449 std::string NMD::CMP_SUEQ_D(uint64 instruction)
4450 {
4451 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4452 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4453 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4454
4455 std::string fd = FPR(copy(fd_value));
4456 std::string fs = FPR(copy(fs_value));
4457 std::string ft = FPR(copy(ft_value));
4458
4459 return img::format("CMP.SUEQ.D %s, %s, %s", fd, fs, ft);
4460 }
4461
4462
4463 /*
4464 *
4465 *
4466 * 3 2 1
4467 * 10987654321098765432109876543210
4468 * 001000 x1110000101
4469 * rt -----
4470 * rs -----
4471 * rd -----
4472 */
4473 std::string NMD::CMP_SUEQ_S(uint64 instruction)
4474 {
4475 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4476 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4477 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4478
4479 std::string fd = FPR(copy(fd_value));
4480 std::string fs = FPR(copy(fs_value));
4481 std::string ft = FPR(copy(ft_value));
4482
4483 return img::format("CMP.SUEQ.S %s, %s, %s", fd, fs, ft);
4484 }
4485
4486
4487 /*
4488 *
4489 *
4490 * 3 2 1
4491 * 10987654321098765432109876543210
4492 * 001000 x1110000101
4493 * rt -----
4494 * rs -----
4495 * rd -----
4496 */
4497 std::string NMD::CMP_SULE_D(uint64 instruction)
4498 {
4499 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4500 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4501 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4502
4503 std::string fd = FPR(copy(fd_value));
4504 std::string fs = FPR(copy(fs_value));
4505 std::string ft = FPR(copy(ft_value));
4506
4507 return img::format("CMP.SULE.D %s, %s, %s", fd, fs, ft);
4508 }
4509
4510
4511 /*
4512 *
4513 *
4514 * 3 2 1
4515 * 10987654321098765432109876543210
4516 * 001000 x1110000101
4517 * rt -----
4518 * rs -----
4519 * rd -----
4520 */
4521 std::string NMD::CMP_SULE_S(uint64 instruction)
4522 {
4523 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4524 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4525 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4526
4527 std::string fd = FPR(copy(fd_value));
4528 std::string fs = FPR(copy(fs_value));
4529 std::string ft = FPR(copy(ft_value));
4530
4531 return img::format("CMP.SULE.S %s, %s, %s", fd, fs, ft);
4532 }
4533
4534
4535 /*
4536 *
4537 *
4538 * 3 2 1
4539 * 10987654321098765432109876543210
4540 * 001000 x1110000101
4541 * rt -----
4542 * rs -----
4543 * rd -----
4544 */
4545 std::string NMD::CMP_SULT_D(uint64 instruction)
4546 {
4547 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4548 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4549 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4550
4551 std::string fd = FPR(copy(fd_value));
4552 std::string fs = FPR(copy(fs_value));
4553 std::string ft = FPR(copy(ft_value));
4554
4555 return img::format("CMP.SULT.D %s, %s, %s", fd, fs, ft);
4556 }
4557
4558
4559 /*
4560 *
4561 *
4562 * 3 2 1
4563 * 10987654321098765432109876543210
4564 * 001000 x1110000101
4565 * rt -----
4566 * rs -----
4567 * rd -----
4568 */
4569 std::string NMD::CMP_SULT_S(uint64 instruction)
4570 {
4571 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4572 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4573 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4574
4575 std::string fd = FPR(copy(fd_value));
4576 std::string fs = FPR(copy(fs_value));
4577 std::string ft = FPR(copy(ft_value));
4578
4579 return img::format("CMP.SULT.S %s, %s, %s", fd, fs, ft);
4580 }
4581
4582
4583 /*
4584 *
4585 *
4586 * 3 2 1
4587 * 10987654321098765432109876543210
4588 * 001000 x1110000101
4589 * rt -----
4590 * rs -----
4591 * rd -----
4592 */
4593 std::string NMD::CMP_SUN_D(uint64 instruction)
4594 {
4595 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4596 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4597 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4598
4599 std::string fd = FPR(copy(fd_value));
4600 std::string fs = FPR(copy(fs_value));
4601 std::string ft = FPR(copy(ft_value));
4602
4603 return img::format("CMP.SUN.D %s, %s, %s", fd, fs, ft);
4604 }
4605
4606
4607 /*
4608 *
4609 *
4610 * 3 2 1
4611 * 10987654321098765432109876543210
4612 * 001000 x1110000101
4613 * rt -----
4614 * rs -----
4615 * rd -----
4616 */
4617 std::string NMD::CMP_SUNE_D(uint64 instruction)
4618 {
4619 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4620 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4621 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4622
4623 std::string fd = FPR(copy(fd_value));
4624 std::string fs = FPR(copy(fs_value));
4625 std::string ft = FPR(copy(ft_value));
4626
4627 return img::format("CMP.SUNE.D %s, %s, %s", fd, fs, ft);
4628 }
4629
4630
4631 /*
4632 *
4633 *
4634 * 3 2 1
4635 * 10987654321098765432109876543210
4636 * 001000 x1110000101
4637 * rt -----
4638 * rs -----
4639 * rd -----
4640 */
4641 std::string NMD::CMP_SUNE_S(uint64 instruction)
4642 {
4643 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4644 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4645 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4646
4647 std::string fd = FPR(copy(fd_value));
4648 std::string fs = FPR(copy(fs_value));
4649 std::string ft = FPR(copy(ft_value));
4650
4651 return img::format("CMP.SUNE.S %s, %s, %s", fd, fs, ft);
4652 }
4653
4654
4655 /*
4656 *
4657 *
4658 * 3 2 1
4659 * 10987654321098765432109876543210
4660 * 001000 x1110000101
4661 * rt -----
4662 * rs -----
4663 * rd -----
4664 */
4665 std::string NMD::CMP_SUN_S(uint64 instruction)
4666 {
4667 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4668 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4669 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4670
4671 std::string fd = FPR(copy(fd_value));
4672 std::string fs = FPR(copy(fs_value));
4673 std::string ft = FPR(copy(ft_value));
4674
4675 return img::format("CMP.SUN.S %s, %s, %s", fd, fs, ft);
4676 }
4677
4678
4679 /*
4680 *
4681 *
4682 * 3 2 1
4683 * 10987654321098765432109876543210
4684 * 001000 x1110000101
4685 * rt -----
4686 * rs -----
4687 * rd -----
4688 */
4689 std::string NMD::CMP_UEQ_D(uint64 instruction)
4690 {
4691 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4692 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4693 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4694
4695 std::string fd = FPR(copy(fd_value));
4696 std::string fs = FPR(copy(fs_value));
4697 std::string ft = FPR(copy(ft_value));
4698
4699 return img::format("CMP.UEQ.D %s, %s, %s", fd, fs, ft);
4700 }
4701
4702
4703 /*
4704 *
4705 *
4706 * 3 2 1
4707 * 10987654321098765432109876543210
4708 * 001000 x1110000101
4709 * rt -----
4710 * rs -----
4711 * rd -----
4712 */
4713 std::string NMD::CMP_UEQ_S(uint64 instruction)
4714 {
4715 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4716 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4717 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4718
4719 std::string fd = FPR(copy(fd_value));
4720 std::string fs = FPR(copy(fs_value));
4721 std::string ft = FPR(copy(ft_value));
4722
4723 return img::format("CMP.UEQ.S %s, %s, %s", fd, fs, ft);
4724 }
4725
4726
4727 /*
4728 *
4729 *
4730 * 3 2 1
4731 * 10987654321098765432109876543210
4732 * 001000 x1110000101
4733 * rt -----
4734 * rs -----
4735 * rd -----
4736 */
4737 std::string NMD::CMP_ULE_D(uint64 instruction)
4738 {
4739 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4740 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4741 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4742
4743 std::string fd = FPR(copy(fd_value));
4744 std::string fs = FPR(copy(fs_value));
4745 std::string ft = FPR(copy(ft_value));
4746
4747 return img::format("CMP.ULE.D %s, %s, %s", fd, fs, ft);
4748 }
4749
4750
4751 /*
4752 *
4753 *
4754 * 3 2 1
4755 * 10987654321098765432109876543210
4756 * 001000 x1110000101
4757 * rt -----
4758 * rs -----
4759 * rd -----
4760 */
4761 std::string NMD::CMP_ULE_S(uint64 instruction)
4762 {
4763 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4764 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4765 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4766
4767 std::string fd = FPR(copy(fd_value));
4768 std::string fs = FPR(copy(fs_value));
4769 std::string ft = FPR(copy(ft_value));
4770
4771 return img::format("CMP.ULE.S %s, %s, %s", fd, fs, ft);
4772 }
4773
4774
4775 /*
4776 *
4777 *
4778 * 3 2 1
4779 * 10987654321098765432109876543210
4780 * 001000 x1110000101
4781 * rt -----
4782 * rs -----
4783 * rd -----
4784 */
4785 std::string NMD::CMP_ULT_D(uint64 instruction)
4786 {
4787 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4788 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4789 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4790
4791 std::string fd = FPR(copy(fd_value));
4792 std::string fs = FPR(copy(fs_value));
4793 std::string ft = FPR(copy(ft_value));
4794
4795 return img::format("CMP.ULT.D %s, %s, %s", fd, fs, ft);
4796 }
4797
4798
4799 /*
4800 *
4801 *
4802 * 3 2 1
4803 * 10987654321098765432109876543210
4804 * 001000 x1110000101
4805 * rt -----
4806 * rs -----
4807 * rd -----
4808 */
4809 std::string NMD::CMP_ULT_S(uint64 instruction)
4810 {
4811 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4812 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4813 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4814
4815 std::string fd = FPR(copy(fd_value));
4816 std::string fs = FPR(copy(fs_value));
4817 std::string ft = FPR(copy(ft_value));
4818
4819 return img::format("CMP.ULT.S %s, %s, %s", fd, fs, ft);
4820 }
4821
4822
4823 /*
4824 *
4825 *
4826 * 3 2 1
4827 * 10987654321098765432109876543210
4828 * 001000 x1110000101
4829 * rt -----
4830 * rs -----
4831 * rd -----
4832 */
4833 std::string NMD::CMP_UN_D(uint64 instruction)
4834 {
4835 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4836 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4837 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4838
4839 std::string fd = FPR(copy(fd_value));
4840 std::string fs = FPR(copy(fs_value));
4841 std::string ft = FPR(copy(ft_value));
4842
4843 return img::format("CMP.UN.D %s, %s, %s", fd, fs, ft);
4844 }
4845
4846
4847 /*
4848 *
4849 *
4850 * 3 2 1
4851 * 10987654321098765432109876543210
4852 * 001000 x1110000101
4853 * rt -----
4854 * rs -----
4855 * rd -----
4856 */
4857 std::string NMD::CMP_UNE_D(uint64 instruction)
4858 {
4859 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4860 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4861 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4862
4863 std::string fd = FPR(copy(fd_value));
4864 std::string fs = FPR(copy(fs_value));
4865 std::string ft = FPR(copy(ft_value));
4866
4867 return img::format("CMP.UNE.D %s, %s, %s", fd, fs, ft);
4868 }
4869
4870
4871 /*
4872 *
4873 *
4874 * 3 2 1
4875 * 10987654321098765432109876543210
4876 * 001000 x1110000101
4877 * rt -----
4878 * rs -----
4879 * rd -----
4880 */
4881 std::string NMD::CMP_UNE_S(uint64 instruction)
4882 {
4883 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4884 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4885 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4886
4887 std::string fd = FPR(copy(fd_value));
4888 std::string fs = FPR(copy(fs_value));
4889 std::string ft = FPR(copy(ft_value));
4890
4891 return img::format("CMP.UNE.S %s, %s, %s", fd, fs, ft);
4892 }
4893
4894
4895 /*
4896 *
4897 *
4898 * 3 2 1
4899 * 10987654321098765432109876543210
4900 * 001000 x1110000101
4901 * rt -----
4902 * rs -----
4903 * rd -----
4904 */
4905 std::string NMD::CMP_UN_S(uint64 instruction)
4906 {
4907 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4908 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4909 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4910
4911 std::string fd = FPR(copy(fd_value));
4912 std::string fs = FPR(copy(fs_value));
4913 std::string ft = FPR(copy(ft_value));
4914
4915 return img::format("CMP.UN.S %s, %s, %s", fd, fs, ft);
4916 }
4917
4918
4919 /*
4920 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4921 * four bytes and write result to GPR and DSPControl
4922 *
4923 * 3 2 1
4924 * 10987654321098765432109876543210
4925 * 001000 x0110000101
4926 * rt -----
4927 * rs -----
4928 * rd -----
4929 */
4930 std::string NMD::CMPGDU_EQ_QB(uint64 instruction)
4931 {
4932 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4933 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4934 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4935
4936 std::string rd = GPR(copy(rd_value));
4937 std::string rs = GPR(copy(rs_value));
4938 std::string rt = GPR(copy(rt_value));
4939
4940 return img::format("CMPGDU.EQ.QB %s, %s, %s", rd, rs, rt);
4941 }
4942
4943
4944 /*
4945 * [DSP] CMPGDU.LE.QB rd, rs, rt - Compare unsigned vector of
4946 * four bytes and write result to GPR and DSPControl
4947 *
4948 * 3 2 1
4949 * 10987654321098765432109876543210
4950 * 001000 x1000000101
4951 * rt -----
4952 * rs -----
4953 * rd -----
4954 */
4955 std::string NMD::CMPGDU_LE_QB(uint64 instruction)
4956 {
4957 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4958 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4959 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4960
4961 std::string rd = GPR(copy(rd_value));
4962 std::string rs = GPR(copy(rs_value));
4963 std::string rt = GPR(copy(rt_value));
4964
4965 return img::format("CMPGDU.LE.QB %s, %s, %s", rd, rs, rt);
4966 }
4967
4968
4969 /*
4970 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4971 * four bytes and write result to GPR and DSPControl
4972 *
4973 * 3 2 1
4974 * 10987654321098765432109876543210
4975 * 001000 x0111000101
4976 * rt -----
4977 * rs -----
4978 * rd -----
4979 */
4980 std::string NMD::CMPGDU_LT_QB(uint64 instruction)
4981 {
4982 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4983 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4984 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4985
4986 std::string rd = GPR(copy(rd_value));
4987 std::string rs = GPR(copy(rs_value));
4988 std::string rt = GPR(copy(rt_value));
4989
4990 return img::format("CMPGDU.LT.QB %s, %s, %s", rd, rs, rt);
4991 }
4992
4993
4994 /*
4995 * [DSP] CMPGU.EQ.QB rd, rs, rt - Compare vectors of unsigned
4996 * byte values and write result to a GPR
4997 *
4998 * 3 2 1
4999 * 10987654321098765432109876543210
5000 * 001000 x0011000101
5001 * rt -----
5002 * rs -----
5003 * rd -----
5004 */
5005 std::string NMD::CMPGU_EQ_QB(uint64 instruction)
5006 {
5007 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5008 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5009 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5010
5011 std::string rd = GPR(copy(rd_value));
5012 std::string rs = GPR(copy(rs_value));
5013 std::string rt = GPR(copy(rt_value));
5014
5015 return img::format("CMPGU.EQ.QB %s, %s, %s", rd, rs, rt);
5016 }
5017
5018
5019 /*
5020 * [DSP] CMPGU.LE.QB rd, rs, rt - Compare vectors of unsigned
5021 * byte values and write result to a GPR
5022 *
5023 * 3 2 1
5024 * 10987654321098765432109876543210
5025 * 001000 x0101000101
5026 * rt -----
5027 * rs -----
5028 * rd -----
5029 */
5030 std::string NMD::CMPGU_LE_QB(uint64 instruction)
5031 {
5032 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5033 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5034 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5035
5036 std::string rd = GPR(copy(rd_value));
5037 std::string rs = GPR(copy(rs_value));
5038 std::string rt = GPR(copy(rt_value));
5039
5040 return img::format("CMPGU.LE.QB %s, %s, %s", rd, rs, rt);
5041 }
5042
5043
5044 /*
5045 * [DSP] CMPGU.LT.QB rd, rs, rt - Compare vectors of unsigned
5046 * byte values and write result to a GPR
5047 *
5048 * 3 2 1
5049 * 10987654321098765432109876543210
5050 * 001000 x0100000101
5051 * rt -----
5052 * rs -----
5053 * rd -----
5054 */
5055 std::string NMD::CMPGU_LT_QB(uint64 instruction)
5056 {
5057 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5058 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5059 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5060
5061 std::string rd = GPR(copy(rd_value));
5062 std::string rs = GPR(copy(rs_value));
5063 std::string rt = GPR(copy(rt_value));
5064
5065 return img::format("CMPGU.LT.QB %s, %s, %s", rd, rs, rt);
5066 }
5067
5068
5069 /*
5070 * [DSP] CMPU.EQ.QB rd, rs, rt - Compare vectors of unsigned
5071 * byte values
5072 *
5073 * 3 2 1
5074 * 10987654321098765432109876543210
5075 * 001000 xxxxxx1001000101
5076 * rt -----
5077 * rs -----
5078 */
5079 std::string NMD::CMPU_EQ_QB(uint64 instruction)
5080 {
5081 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5082 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5083
5084 std::string rs = GPR(copy(rs_value));
5085 std::string rt = GPR(copy(rt_value));
5086
5087 return img::format("CMPU.EQ.QB %s, %s", rs, rt);
5088 }
5089
5090
5091 /*
5092 * [DSP] CMPU.LE.QB rd, rs, rt - Compare vectors of unsigned
5093 * byte values
5094 *
5095 * 3 2 1
5096 * 10987654321098765432109876543210
5097 * 001000 xxxxxx1011000101
5098 * rt -----
5099 * rs -----
5100 */
5101 std::string NMD::CMPU_LE_QB(uint64 instruction)
5102 {
5103 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5104 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5105
5106 std::string rs = GPR(copy(rs_value));
5107 std::string rt = GPR(copy(rt_value));
5108
5109 return img::format("CMPU.LE.QB %s, %s", rs, rt);
5110 }
5111
5112
5113 /*
5114 * [DSP] CMPU.LT.QB rd, rs, rt - Compare vectors of unsigned
5115 * byte values
5116 *
5117 * 3 2 1
5118 * 10987654321098765432109876543210
5119 * 001000 xxxxxx1010000101
5120 * rt -----
5121 * rs -----
5122 */
5123 std::string NMD::CMPU_LT_QB(uint64 instruction)
5124 {
5125 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5126 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5127
5128 std::string rs = GPR(copy(rs_value));
5129 std::string rt = GPR(copy(rt_value));
5130
5131 return img::format("CMPU.LT.QB %s, %s", rs, rt);
5132 }
5133
5134
5135 /*
5136 *
5137 *
5138 * 3 2 1
5139 * 10987654321098765432109876543210
5140 * 001000 x1110000101
5141 * rt -----
5142 * rs -----
5143 * rd -----
5144 */
5145 std::string NMD::COP2_1(uint64 instruction)
5146 {
5147 uint64 cofun_value = extract_cofun_25_24_23(instruction);
5148
5149 std::string cofun = IMMEDIATE(copy(cofun_value));
5150
5151 return img::format("COP2_1 %s", cofun);
5152 }
5153
5154
5155 /*
5156 *
5157 *
5158 * 3 2 1
5159 * 10987654321098765432109876543210
5160 * 001000 x1110000101
5161 * rt -----
5162 * rs -----
5163 * rd -----
5164 */
5165 std::string NMD::CTC1(uint64 instruction)
5166 {
5167 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5168 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
5169
5170 std::string rt = GPR(copy(rt_value));
5171 std::string cs = CPR(copy(cs_value));
5172
5173 return img::format("CTC1 %s, %s", rt, cs);
5174 }
5175
5176
5177 /*
5178 *
5179 *
5180 * 3 2 1
5181 * 10987654321098765432109876543210
5182 * 001000 x1110000101
5183 * rt -----
5184 * rs -----
5185 * rd -----
5186 */
5187 std::string NMD::CTC2(uint64 instruction)
5188 {
5189 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5190 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
5191
5192 std::string rt = GPR(copy(rt_value));
5193 std::string cs = CPR(copy(cs_value));
5194
5195 return img::format("CTC2 %s, %s", rt, cs);
5196 }
5197
5198
5199 /*
5200 *
5201 *
5202 * 3 2 1
5203 * 10987654321098765432109876543210
5204 * 001000 x1110000101
5205 * rt -----
5206 * rs -----
5207 * rd -----
5208 */
5209 std::string NMD::CVT_D_L(uint64 instruction)
5210 {
5211 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5212 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5213
5214 std::string ft = FPR(copy(ft_value));
5215 std::string fs = FPR(copy(fs_value));
5216
5217 return img::format("CVT.D.L %s, %s", ft, fs);
5218 }
5219
5220
5221 /*
5222 *
5223 *
5224 * 3 2 1
5225 * 10987654321098765432109876543210
5226 * 001000 x1110000101
5227 * rt -----
5228 * rs -----
5229 * rd -----
5230 */
5231 std::string NMD::CVT_D_S(uint64 instruction)
5232 {
5233 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5234 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5235
5236 std::string ft = FPR(copy(ft_value));
5237 std::string fs = FPR(copy(fs_value));
5238
5239 return img::format("CVT.D.S %s, %s", ft, fs);
5240 }
5241
5242
5243 /*
5244 *
5245 *
5246 * 3 2 1
5247 * 10987654321098765432109876543210
5248 * 001000 x1110000101
5249 * rt -----
5250 * rs -----
5251 * rd -----
5252 */
5253 std::string NMD::CVT_D_W(uint64 instruction)
5254 {
5255 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5256 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5257
5258 std::string ft = FPR(copy(ft_value));
5259 std::string fs = FPR(copy(fs_value));
5260
5261 return img::format("CVT.D.W %s, %s", ft, fs);
5262 }
5263
5264
5265 /*
5266 *
5267 *
5268 * 3 2 1
5269 * 10987654321098765432109876543210
5270 * 001000 x1110000101
5271 * rt -----
5272 * rs -----
5273 * rd -----
5274 */
5275 std::string NMD::CVT_L_D(uint64 instruction)
5276 {
5277 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5278 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5279
5280 std::string ft = FPR(copy(ft_value));
5281 std::string fs = FPR(copy(fs_value));
5282
5283 return img::format("CVT.L.D %s, %s", ft, fs);
5284 }
5285
5286
5287 /*
5288 *
5289 *
5290 * 3 2 1
5291 * 10987654321098765432109876543210
5292 * 001000 x1110000101
5293 * rt -----
5294 * rs -----
5295 * rd -----
5296 */
5297 std::string NMD::CVT_L_S(uint64 instruction)
5298 {
5299 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5300 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5301
5302 std::string ft = FPR(copy(ft_value));
5303 std::string fs = FPR(copy(fs_value));
5304
5305 return img::format("CVT.L.S %s, %s", ft, fs);
5306 }
5307
5308
5309 /*
5310 *
5311 *
5312 * 3 2 1
5313 * 10987654321098765432109876543210
5314 * 001000 x1110000101
5315 * rt -----
5316 * rs -----
5317 * rd -----
5318 */
5319 std::string NMD::CVT_S_D(uint64 instruction)
5320 {
5321 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5322 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5323
5324 std::string ft = FPR(copy(ft_value));
5325 std::string fs = FPR(copy(fs_value));
5326
5327 return img::format("CVT.S.D %s, %s", ft, fs);
5328 }
5329
5330
5331 /*
5332 *
5333 *
5334 * 3 2 1
5335 * 10987654321098765432109876543210
5336 * 001000 x1110000101
5337 * rt -----
5338 * rs -----
5339 * rd -----
5340 */
5341 std::string NMD::CVT_S_L(uint64 instruction)
5342 {
5343 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5344 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5345
5346 std::string ft = FPR(copy(ft_value));
5347 std::string fs = FPR(copy(fs_value));
5348
5349 return img::format("CVT.S.L %s, %s", ft, fs);
5350 }
5351
5352
5353 /*
5354 *
5355 *
5356 * 3 2 1
5357 * 10987654321098765432109876543210
5358 * 001000 x1110000101
5359 * rt -----
5360 * rs -----
5361 * rd -----
5362 */
5363 std::string NMD::CVT_S_PL(uint64 instruction)
5364 {
5365 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5366 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5367
5368 std::string ft = FPR(copy(ft_value));
5369 std::string fs = FPR(copy(fs_value));
5370
5371 return img::format("CVT.S.PL %s, %s", ft, fs);
5372 }
5373
5374
5375 /*
5376 *
5377 *
5378 * 3 2 1
5379 * 10987654321098765432109876543210
5380 * 001000 x1110000101
5381 * rt -----
5382 * rs -----
5383 * rd -----
5384 */
5385 std::string NMD::CVT_S_PU(uint64 instruction)
5386 {
5387 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5388 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5389
5390 std::string ft = FPR(copy(ft_value));
5391 std::string fs = FPR(copy(fs_value));
5392
5393 return img::format("CVT.S.PU %s, %s", ft, fs);
5394 }
5395
5396
5397 /*
5398 *
5399 *
5400 * 3 2 1
5401 * 10987654321098765432109876543210
5402 * 001000 x1110000101
5403 * rt -----
5404 * rs -----
5405 * rd -----
5406 */
5407 std::string NMD::CVT_S_W(uint64 instruction)
5408 {
5409 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5410 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5411
5412 std::string ft = FPR(copy(ft_value));
5413 std::string fs = FPR(copy(fs_value));
5414
5415 return img::format("CVT.S.W %s, %s", ft, fs);
5416 }
5417
5418
5419 /*
5420 *
5421 *
5422 * 3 2 1
5423 * 10987654321098765432109876543210
5424 * 001000 x1110000101
5425 * rt -----
5426 * rs -----
5427 * rd -----
5428 */
5429 std::string NMD::CVT_W_D(uint64 instruction)
5430 {
5431 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5432 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5433
5434 std::string ft = FPR(copy(ft_value));
5435 std::string fs = FPR(copy(fs_value));
5436
5437 return img::format("CVT.W.D %s, %s", ft, fs);
5438 }
5439
5440
5441 /*
5442 *
5443 *
5444 * 3 2 1
5445 * 10987654321098765432109876543210
5446 * 001000 x1110000101
5447 * rt -----
5448 * rs -----
5449 * rd -----
5450 */
5451 std::string NMD::CVT_W_S(uint64 instruction)
5452 {
5453 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5454 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5455
5456 std::string ft = FPR(copy(ft_value));
5457 std::string fs = FPR(copy(fs_value));
5458
5459 return img::format("CVT.W.S %s, %s", ft, fs);
5460 }
5461
5462
5463 /*
5464 *
5465 *
5466 * 3 2 1
5467 * 10987654321098765432109876543210
5468 * 001000 x1110000101
5469 * rt -----
5470 * rs -----
5471 * rd -----
5472 */
5473 std::string NMD::DADDIU_48_(uint64 instruction)
5474 {
5475 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
5476 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
5477
5478 std::string rt = GPR(copy(rt_value));
5479 std::string s = IMMEDIATE(copy(s_value));
5480
5481 return img::format("DADDIU %s, %s", rt, s);
5482 }
5483
5484
5485 /*
5486 *
5487 *
5488 * 3 2 1
5489 * 10987654321098765432109876543210
5490 * 001000 x1110000101
5491 * rt -----
5492 * rs -----
5493 * rd -----
5494 */
5495 std::string NMD::DADDIU_NEG_(uint64 instruction)
5496 {
5497 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5498 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5499 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5500
5501 std::string rt = GPR(copy(rt_value));
5502 std::string rs = GPR(copy(rs_value));
5503 std::string u = IMMEDIATE(neg_copy(u_value));
5504
5505 return img::format("DADDIU %s, %s, %s", rt, rs, u);
5506 }
5507
5508
5509 /*
5510 *
5511 *
5512 * 3 2 1
5513 * 10987654321098765432109876543210
5514 * 001000 x1110000101
5515 * rt -----
5516 * rs -----
5517 * rd -----
5518 */
5519 std::string NMD::DADDIU_U12_(uint64 instruction)
5520 {
5521 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5522 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5523 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5524
5525 std::string rt = GPR(copy(rt_value));
5526 std::string rs = GPR(copy(rs_value));
5527 std::string u = IMMEDIATE(copy(u_value));
5528
5529 return img::format("DADDIU %s, %s, %s", rt, rs, u);
5530 }
5531
5532
5533 /*
5534 *
5535 *
5536 * 3 2 1
5537 * 10987654321098765432109876543210
5538 * 001000 x1110000101
5539 * rt -----
5540 * rs -----
5541 * rd -----
5542 */
5543 std::string NMD::DADD(uint64 instruction)
5544 {
5545 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5546 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5547 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5548
5549 std::string rd = GPR(copy(rd_value));
5550 std::string rs = GPR(copy(rs_value));
5551 std::string rt = GPR(copy(rt_value));
5552
5553 return img::format("DADD %s, %s, %s", rd, rs, rt);
5554 }
5555
5556
5557 /*
5558 *
5559 *
5560 * 3 2 1
5561 * 10987654321098765432109876543210
5562 * 001000 x1110000101
5563 * rt -----
5564 * rs -----
5565 * rd -----
5566 */
5567 std::string NMD::DADDU(uint64 instruction)
5568 {
5569 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5570 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5571 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5572
5573 std::string rd = GPR(copy(rd_value));
5574 std::string rs = GPR(copy(rs_value));
5575 std::string rt = GPR(copy(rt_value));
5576
5577 return img::format("DADDU %s, %s, %s", rd, rs, rt);
5578 }
5579
5580
5581 /*
5582 *
5583 *
5584 * 3 2 1
5585 * 10987654321098765432109876543210
5586 * 001000 x1110000101
5587 * rt -----
5588 * rs -----
5589 * rd -----
5590 */
5591 std::string NMD::DCLO(uint64 instruction)
5592 {
5593 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5594 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5595
5596 std::string rt = GPR(copy(rt_value));
5597 std::string rs = GPR(copy(rs_value));
5598
5599 return img::format("DCLO %s, %s", rt, rs);
5600 }
5601
5602
5603 /*
5604 *
5605 *
5606 * 3 2 1
5607 * 10987654321098765432109876543210
5608 * 001000 x1110000101
5609 * rt -----
5610 * rs -----
5611 * rd -----
5612 */
5613 std::string NMD::DCLZ(uint64 instruction)
5614 {
5615 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5616 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5617
5618 std::string rt = GPR(copy(rt_value));
5619 std::string rs = GPR(copy(rs_value));
5620
5621 return img::format("DCLZ %s, %s", rt, rs);
5622 }
5623
5624
5625 /*
5626 *
5627 *
5628 * 3 2 1
5629 * 10987654321098765432109876543210
5630 * 001000 x1110000101
5631 * rt -----
5632 * rs -----
5633 * rd -----
5634 */
5635 std::string NMD::DDIV(uint64 instruction)
5636 {
5637 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5638 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5639 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5640
5641 std::string rd = GPR(copy(rd_value));
5642 std::string rs = GPR(copy(rs_value));
5643 std::string rt = GPR(copy(rt_value));
5644
5645 return img::format("DDIV %s, %s, %s", rd, rs, rt);
5646 }
5647
5648
5649 /*
5650 *
5651 *
5652 * 3 2 1
5653 * 10987654321098765432109876543210
5654 * 001000 x1110000101
5655 * rt -----
5656 * rs -----
5657 * rd -----
5658 */
5659 std::string NMD::DDIVU(uint64 instruction)
5660 {
5661 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5662 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5663 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5664
5665 std::string rd = GPR(copy(rd_value));
5666 std::string rs = GPR(copy(rs_value));
5667 std::string rt = GPR(copy(rt_value));
5668
5669 return img::format("DDIVU %s, %s, %s", rd, rs, rt);
5670 }
5671
5672
5673 /*
5674 *
5675 *
5676 * 3 2 1
5677 * 10987654321098765432109876543210
5678 * 001000 x1110000101
5679 * rt -----
5680 * rs -----
5681 * rd -----
5682 */
5683 std::string NMD::DERET(uint64 instruction)
5684 {
5685 (void)instruction;
5686
5687 return "DERET ";
5688 }
5689
5690
5691 /*
5692 *
5693 *
5694 * 3 2 1
5695 * 10987654321098765432109876543210
5696 * 001000 x1110000101
5697 * rt -----
5698 * rs -----
5699 * rd -----
5700 */
5701 std::string NMD::DEXTM(uint64 instruction)
5702 {
5703 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5704 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5705 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5706 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5707
5708 std::string rt = GPR(copy(rt_value));
5709 std::string rs = GPR(copy(rs_value));
5710 std::string lsb = IMMEDIATE(copy(lsb_value));
5711 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
5712
5713 return img::format("DEXTM %s, %s, %s, %s", rt, rs, lsb, msbd);
5714 }
5715
5716
5717 /*
5718 *
5719 *
5720 * 3 2 1
5721 * 10987654321098765432109876543210
5722 * 001000 x1110000101
5723 * rt -----
5724 * rs -----
5725 * rd -----
5726 */
5727 std::string NMD::DEXT(uint64 instruction)
5728 {
5729 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5730 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5731 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5732 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5733
5734 std::string rt = GPR(copy(rt_value));
5735 std::string rs = GPR(copy(rs_value));
5736 std::string lsb = IMMEDIATE(copy(lsb_value));
5737 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
5738
5739 return img::format("DEXT %s, %s, %s, %s", rt, rs, lsb, msbd);
5740 }
5741
5742
5743 /*
5744 *
5745 *
5746 * 3 2 1
5747 * 10987654321098765432109876543210
5748 * 001000 x1110000101
5749 * rt -----
5750 * rs -----
5751 * rd -----
5752 */
5753 std::string NMD::DEXTU(uint64 instruction)
5754 {
5755 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5756 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5757 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5758 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5759
5760 std::string rt = GPR(copy(rt_value));
5761 std::string rs = GPR(copy(rs_value));
5762 std::string lsb = IMMEDIATE(copy(lsb_value));
5763 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
5764
5765 return img::format("DEXTU %s, %s, %s, %s", rt, rs, lsb, msbd);
5766 }
5767
5768
5769 /*
5770 *
5771 *
5772 * 3 2 1
5773 * 10987654321098765432109876543210
5774 * 001000 x1110000101
5775 * rt -----
5776 * rs -----
5777 * rd -----
5778 */
5779 std::string NMD::DINSM(uint64 instruction)
5780 {
5781 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5782 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5783 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5784 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5785
5786 std::string rt = GPR(copy(rt_value));
5787 std::string rs = GPR(copy(rs_value));
5788 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
5789 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
5790 /* !!!!!!!!!! - no conversion function */
5791
5792 return img::format("DINSM %s, %s, %s, %s", rt, rs, pos, size);
5793 /* hand edited */
5794 }
5795
5796
5797 /*
5798 *
5799 *
5800 * 3 2 1
5801 * 10987654321098765432109876543210
5802 * 001000 x1110000101
5803 * rt -----
5804 * rs -----
5805 * rd -----
5806 */
5807 std::string NMD::DINS(uint64 instruction)
5808 {
5809 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5810 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5811 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5812 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5813
5814 std::string rt = GPR(copy(rt_value));
5815 std::string rs = GPR(copy(rs_value));
5816 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
5817 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
5818 /* !!!!!!!!!! - no conversion function */
5819
5820 return img::format("DINS %s, %s, %s, %s", rt, rs, pos, size);
5821 /* hand edited */
5822 }
5823
5824
5825 /*
5826 *
5827 *
5828 * 3 2 1
5829 * 10987654321098765432109876543210
5830 * 001000 x1110000101
5831 * rt -----
5832 * rs -----
5833 * rd -----
5834 */
5835 std::string NMD::DINSU(uint64 instruction)
5836 {
5837 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5838 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5839 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5840 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5841
5842 std::string rt = GPR(copy(rt_value));
5843 std::string rs = GPR(copy(rs_value));
5844 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
5845 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
5846 /* !!!!!!!!!! - no conversion function */
5847
5848 return img::format("DINSU %s, %s, %s, %s", rt, rs, pos, size);
5849 /* hand edited */
5850 }
5851
5852
5853 /*
5854 *
5855 *
5856 * 3 2 1
5857 * 10987654321098765432109876543210
5858 * 001000 x1110000101
5859 * rt -----
5860 * rs -----
5861 * rd -----
5862 */
5863 std::string NMD::DI(uint64 instruction)
5864 {
5865 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5866
5867 std::string rt = GPR(copy(rt_value));
5868
5869 return img::format("DI %s", rt);
5870 }
5871
5872
5873 /*
5874 *
5875 *
5876 * 3 2 1
5877 * 10987654321098765432109876543210
5878 * 001000 x1110000101
5879 * rt -----
5880 * rs -----
5881 * rd -----
5882 */
5883 std::string NMD::DIV(uint64 instruction)
5884 {
5885 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5886 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5887 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5888
5889 std::string rd = GPR(copy(rd_value));
5890 std::string rs = GPR(copy(rs_value));
5891 std::string rt = GPR(copy(rt_value));
5892
5893 return img::format("DIV %s, %s, %s", rd, rs, rt);
5894 }
5895
5896
5897 /*
5898 *
5899 *
5900 * 3 2 1
5901 * 10987654321098765432109876543210
5902 * 001000 x1110000101
5903 * rt -----
5904 * rs -----
5905 * rd -----
5906 */
5907 std::string NMD::DIV_D(uint64 instruction)
5908 {
5909 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5910 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5911 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5912
5913 std::string fd = FPR(copy(fd_value));
5914 std::string fs = FPR(copy(fs_value));
5915 std::string ft = FPR(copy(ft_value));
5916
5917 return img::format("DIV.D %s, %s, %s", fd, fs, ft);
5918 }
5919
5920
5921 /*
5922 *
5923 *
5924 * 3 2 1
5925 * 10987654321098765432109876543210
5926 * 001000 x1110000101
5927 * rt -----
5928 * rs -----
5929 * rd -----
5930 */
5931 std::string NMD::DIV_S(uint64 instruction)
5932 {
5933 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5934 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5935 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5936
5937 std::string fd = FPR(copy(fd_value));
5938 std::string fs = FPR(copy(fs_value));
5939 std::string ft = FPR(copy(ft_value));
5940
5941 return img::format("DIV.S %s, %s, %s", fd, fs, ft);
5942 }
5943
5944
5945 /*
5946 *
5947 *
5948 * 3 2 1
5949 * 10987654321098765432109876543210
5950 * 001000 x1110000101
5951 * rt -----
5952 * rs -----
5953 * rd -----
5954 */
5955 std::string NMD::DIVU(uint64 instruction)
5956 {
5957 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5958 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5959 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5960
5961 std::string rd = GPR(copy(rd_value));
5962 std::string rs = GPR(copy(rs_value));
5963 std::string rt = GPR(copy(rt_value));
5964
5965 return img::format("DIVU %s, %s, %s", rd, rs, rt);
5966 }
5967
5968
5969 /*
5970 *
5971 *
5972 * 3 2 1
5973 * 10987654321098765432109876543210
5974 * 001000 x1110000101
5975 * rt -----
5976 * rs -----
5977 * rd -----
5978 */
5979 std::string NMD::DLSA(uint64 instruction)
5980 {
5981 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5982 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5983 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5984 uint64 u2_value = extract_u2_10_9(instruction);
5985
5986 std::string rd = GPR(copy(rd_value));
5987 std::string rs = GPR(copy(rs_value));
5988 std::string rt = GPR(copy(rt_value));
5989 std::string u2 = IMMEDIATE(copy(u2_value));
5990
5991 return img::format("DLSA %s, %s, %s, %s", rd, rs, rt, u2);
5992 }
5993
5994
5995 /*
5996 *
5997 *
5998 * 3 2 1
5999 * 10987654321098765432109876543210
6000 * 001000 x1110000101
6001 * rt -----
6002 * rs -----
6003 * rd -----
6004 */
6005 std::string NMD::DLUI_48_(uint64 instruction)
6006 {
6007 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
6008 uint64 u_value = extract_u_31_to_0__s32(instruction);
6009
6010 std::string rt = GPR(copy(rt_value));
6011 std::string u = IMMEDIATE(copy(u_value));
6012
6013 return img::format("DLUI %s, %s", rt, u);
6014 }
6015
6016
6017 /*
6018 *
6019 *
6020 * 3 2 1
6021 * 10987654321098765432109876543210
6022 * 001000 x1110000101
6023 * rt -----
6024 * rs -----
6025 * rd -----
6026 */
6027 std::string NMD::DMFC0(uint64 instruction)
6028 {
6029 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6030 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
6031 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
6032
6033 std::string rt = GPR(copy(rt_value));
6034 std::string c0s = CPR(copy(c0s_value));
6035 std::string sel = IMMEDIATE(copy(sel_value));
6036
6037 return img::format("DMFC0 %s, %s, %s", rt, c0s, sel);
6038 }
6039
6040
6041 /*
6042 *
6043 *
6044 * 3 2 1
6045 * 10987654321098765432109876543210
6046 * 001000 x1110000101
6047 * rt -----
6048 * rs -----
6049 * rd -----
6050 */
6051 std::string NMD::DMFC1(uint64 instruction)
6052 {
6053 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6054 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
6055
6056 std::string rt = GPR(copy(rt_value));
6057 std::string fs = FPR(copy(fs_value));
6058
6059 return img::format("DMFC1 %s, %s", rt, fs);
6060 }
6061
6062
6063 /*
6064 *
6065 *
6066 * 3 2 1
6067 * 10987654321098765432109876543210
6068 * 001000 x1110000101
6069 * rt -----
6070 * rs -----
6071 * rd -----
6072 */
6073 std::string NMD::DMFC2(uint64 instruction)
6074 {
6075 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6076 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
6077
6078 std::string rt = GPR(copy(rt_value));
6079 std::string cs = CPR(copy(cs_value));
6080
6081 return img::format("DMFC2 %s, %s", rt, cs);
6082 }
6083
6084
6085 /*
6086 *
6087 *
6088 * 3 2 1
6089 * 10987654321098765432109876543210
6090 * 001000 x1110000101
6091 * rt -----
6092 * rs -----
6093 * rd -----
6094 */
6095 std::string NMD::DMFGC0(uint64 instruction)
6096 {
6097 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6098 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
6099 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
6100
6101 std::string rt = GPR(copy(rt_value));
6102 std::string c0s = CPR(copy(c0s_value));
6103 std::string sel = IMMEDIATE(copy(sel_value));
6104
6105 return img::format("DMFGC0 %s, %s, %s", rt, c0s, sel);
6106 }
6107
6108
6109 /*
6110 *
6111 *
6112 * 3 2 1
6113 * 10987654321098765432109876543210
6114 * 001000 x1110000101
6115 * rt -----
6116 * rs -----
6117 * rd -----
6118 */
6119 std::string NMD::DMOD(uint64 instruction)
6120 {
6121 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6122 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6123 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6124
6125 std::string rd = GPR(copy(rd_value));
6126 std::string rs = GPR(copy(rs_value));
6127 std::string rt = GPR(copy(rt_value));
6128
6129 return img::format("DMOD %s, %s, %s", rd, rs, rt);
6130 }
6131
6132
6133 /*
6134 *
6135 *
6136 * 3 2 1
6137 * 10987654321098765432109876543210
6138 * 001000 x1110000101
6139 * rt -----
6140 * rs -----
6141 * rd -----
6142 */
6143 std::string NMD::DMODU(uint64 instruction)
6144 {
6145 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6146 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6147 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6148
6149 std::string rd = GPR(copy(rd_value));
6150 std::string rs = GPR(copy(rs_value));
6151 std::string rt = GPR(copy(rt_value));
6152
6153 return img::format("DMODU %s, %s, %s", rd, rs, rt);
6154 }
6155
6156
6157 /*
6158 *
6159 *
6160 * 3 2 1
6161 * 10987654321098765432109876543210
6162 * 001000 x1110000101
6163 * rt -----
6164 * rs -----
6165 * rd -----
6166 */
6167 std::string NMD::DMTC0(uint64 instruction)
6168 {
6169 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6170 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
6171 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
6172
6173 std::string rt = GPR(copy(rt_value));
6174 std::string c0s = CPR(copy(c0s_value));
6175 std::string sel = IMMEDIATE(copy(sel_value));
6176
6177 return img::format("DMTC0 %s, %s, %s", rt, c0s, sel);
6178 }
6179
6180
6181 /*
6182 *
6183 *
6184 * 3 2 1
6185 * 10987654321098765432109876543210
6186 * 001000 x1110000101
6187 * rt -----
6188 * rs -----
6189 * rd -----
6190 */
6191 std::string NMD::DMTC1(uint64 instruction)
6192 {
6193 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6194 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
6195
6196 std::string rt = GPR(copy(rt_value));
6197 std::string fs = FPR(copy(fs_value));
6198
6199 return img::format("DMTC1 %s, %s", rt, fs);
6200 }
6201
6202
6203 /*
6204 *
6205 *
6206 * 3 2 1
6207 * 10987654321098765432109876543210
6208 * 001000 x1110000101
6209 * rt -----
6210 * rs -----
6211 * rd -----
6212 */
6213 std::string NMD::DMTC2(uint64 instruction)
6214 {
6215 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6216 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
6217
6218 std::string rt = GPR(copy(rt_value));
6219 std::string cs = CPR(copy(cs_value));
6220
6221 return img::format("DMTC2 %s, %s", rt, cs);
6222 }
6223
6224
6225 /*
6226 *
6227 *
6228 * 3 2 1
6229 * 10987654321098765432109876543210
6230 * 001000 x1110000101
6231 * rt -----
6232 * rs -----
6233 * rd -----
6234 */
6235 std::string NMD::DMTGC0(uint64 instruction)
6236 {
6237 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6238 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
6239 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
6240
6241 std::string rt = GPR(copy(rt_value));
6242 std::string c0s = CPR(copy(c0s_value));
6243 std::string sel = IMMEDIATE(copy(sel_value));
6244
6245 return img::format("DMTGC0 %s, %s, %s", rt, c0s, sel);
6246 }
6247
6248
6249 /*
6250 *
6251 *
6252 * 3 2 1
6253 * 10987654321098765432109876543210
6254 * 001000 x1110000101
6255 * rt -----
6256 * rs -----
6257 * rd -----
6258 */
6259 std::string NMD::DMT(uint64 instruction)
6260 {
6261 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6262
6263 std::string rt = GPR(copy(rt_value));
6264
6265 return img::format("DMT %s", rt);
6266 }
6267
6268
6269 /*
6270 *
6271 *
6272 * 3 2 1
6273 * 10987654321098765432109876543210
6274 * 001000 x1110000101
6275 * rt -----
6276 * rs -----
6277 * rd -----
6278 */
6279 std::string NMD::DMUH(uint64 instruction)
6280 {
6281 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6282 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6283 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6284
6285 std::string rd = GPR(copy(rd_value));
6286 std::string rs = GPR(copy(rs_value));
6287 std::string rt = GPR(copy(rt_value));
6288
6289 return img::format("DMUH %s, %s, %s", rd, rs, rt);
6290 }
6291
6292
6293 /*
6294 *
6295 *
6296 * 3 2 1
6297 * 10987654321098765432109876543210
6298 * 001000 x1110000101
6299 * rt -----
6300 * rs -----
6301 * rd -----
6302 */
6303 std::string NMD::DMUHU(uint64 instruction)
6304 {
6305 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6306 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6307 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6308
6309 std::string rd = GPR(copy(rd_value));
6310 std::string rs = GPR(copy(rs_value));
6311 std::string rt = GPR(copy(rt_value));
6312
6313 return img::format("DMUHU %s, %s, %s", rd, rs, rt);
6314 }
6315
6316
6317 /*
6318 *
6319 *
6320 * 3 2 1
6321 * 10987654321098765432109876543210
6322 * 001000 x1110000101
6323 * rt -----
6324 * rs -----
6325 * rd -----
6326 */
6327 std::string NMD::DMUL(uint64 instruction)
6328 {
6329 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6330 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6331 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6332
6333 std::string rd = GPR(copy(rd_value));
6334 std::string rs = GPR(copy(rs_value));
6335 std::string rt = GPR(copy(rt_value));
6336
6337 return img::format("DMUL %s, %s, %s", rd, rs, rt);
6338 }
6339
6340
6341 /*
6342 *
6343 *
6344 * 3 2 1
6345 * 10987654321098765432109876543210
6346 * 001000 x1110000101
6347 * rt -----
6348 * rs -----
6349 * rd -----
6350 */
6351 std::string NMD::DMULU(uint64 instruction)
6352 {
6353 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6354 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6355 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6356
6357 std::string rd = GPR(copy(rd_value));
6358 std::string rs = GPR(copy(rs_value));
6359 std::string rt = GPR(copy(rt_value));
6360
6361 return img::format("DMULU %s, %s, %s", rd, rs, rt);
6362 }
6363
6364
6365 /*
6366 * [DSP] DPA.W.PH ac, rs, rt - Dot product with accumulate on
6367 * vector integer halfword elements
6368 *
6369 * 3 2 1
6370 * 10987654321098765432109876543210
6371 * 001000 00000010111111
6372 * rt -----
6373 * rs -----
6374 * ac --
6375 */
6376 std::string NMD::DPA_W_PH(uint64 instruction)
6377 {
6378 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6379 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6380 uint64 ac_value = extract_ac_15_14(instruction);
6381
6382 std::string ac = AC(copy(ac_value));
6383 std::string rs = GPR(copy(rs_value));
6384 std::string rt = GPR(copy(rt_value));
6385
6386 return img::format("DPA.W.PH %s, %s, %s", ac, rs, rt);
6387 }
6388
6389
6390 /*
6391 *
6392 *
6393 * 3 2 1
6394 * 10987654321098765432109876543210
6395 * 001000 x1110000101
6396 * rt -----
6397 * rs -----
6398 * rd -----
6399 */
6400 std::string NMD::DPAQ_SA_L_W(uint64 instruction)
6401 {
6402 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6403 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6404 uint64 ac_value = extract_ac_15_14(instruction);
6405
6406 std::string ac = AC(copy(ac_value));
6407 std::string rs = GPR(copy(rs_value));
6408 std::string rt = GPR(copy(rt_value));
6409
6410 return img::format("DPAQ_SA.L.W %s, %s, %s", ac, rs, rt);
6411 }
6412
6413
6414 /*
6415 *
6416 *
6417 * 3 2 1
6418 * 10987654321098765432109876543210
6419 * 001000 x1110000101
6420 * rt -----
6421 * rs -----
6422 * rd -----
6423 */
6424 std::string NMD::DPAQ_S_W_PH(uint64 instruction)
6425 {
6426 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6427 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6428 uint64 ac_value = extract_ac_15_14(instruction);
6429
6430 std::string ac = AC(copy(ac_value));
6431 std::string rs = GPR(copy(rs_value));
6432 std::string rt = GPR(copy(rt_value));
6433
6434 return img::format("DPAQ_S.W.PH %s, %s, %s", ac, rs, rt);
6435 }
6436
6437
6438 /*
6439 *
6440 *
6441 * 3 2 1
6442 * 10987654321098765432109876543210
6443 * 001000 x1110000101
6444 * rt -----
6445 * rs -----
6446 * rd -----
6447 */
6448 std::string NMD::DPAQX_SA_W_PH(uint64 instruction)
6449 {
6450 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6451 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6452 uint64 ac_value = extract_ac_15_14(instruction);
6453
6454 std::string ac = AC(copy(ac_value));
6455 std::string rs = GPR(copy(rs_value));
6456 std::string rt = GPR(copy(rt_value));
6457
6458 return img::format("DPAQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6459 }
6460
6461
6462 /*
6463 *
6464 *
6465 * 3 2 1
6466 * 10987654321098765432109876543210
6467 * 001000 x1110000101
6468 * rt -----
6469 * rs -----
6470 * rd -----
6471 */
6472 std::string NMD::DPAQX_S_W_PH(uint64 instruction)
6473 {
6474 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6475 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6476 uint64 ac_value = extract_ac_15_14(instruction);
6477
6478 std::string ac = AC(copy(ac_value));
6479 std::string rs = GPR(copy(rs_value));
6480 std::string rt = GPR(copy(rt_value));
6481
6482 return img::format("DPAQX_S.W.PH %s, %s, %s", ac, rs, rt);
6483 }
6484
6485
6486 /*
6487 *
6488 *
6489 * 3 2 1
6490 * 10987654321098765432109876543210
6491 * 001000 x1110000101
6492 * rt -----
6493 * rs -----
6494 * rd -----
6495 */
6496 std::string NMD::DPAU_H_QBL(uint64 instruction)
6497 {
6498 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6499 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6500 uint64 ac_value = extract_ac_15_14(instruction);
6501
6502 std::string ac = AC(copy(ac_value));
6503 std::string rs = GPR(copy(rs_value));
6504 std::string rt = GPR(copy(rt_value));
6505
6506 return img::format("DPAU.H.QBL %s, %s, %s", ac, rs, rt);
6507 }
6508
6509
6510 /*
6511 *
6512 *
6513 * 3 2 1
6514 * 10987654321098765432109876543210
6515 * 001000 x1110000101
6516 * rt -----
6517 * rs -----
6518 * rd -----
6519 */
6520 std::string NMD::DPAU_H_QBR(uint64 instruction)
6521 {
6522 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6523 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6524 uint64 ac_value = extract_ac_15_14(instruction);
6525
6526 std::string ac = AC(copy(ac_value));
6527 std::string rs = GPR(copy(rs_value));
6528 std::string rt = GPR(copy(rt_value));
6529
6530 return img::format("DPAU.H.QBR %s, %s, %s", ac, rs, rt);
6531 }
6532
6533
6534 /*
6535 *
6536 *
6537 * 3 2 1
6538 * 10987654321098765432109876543210
6539 * 001000 x1110000101
6540 * rt -----
6541 * rs -----
6542 * rd -----
6543 */
6544 std::string NMD::DPAX_W_PH(uint64 instruction)
6545 {
6546 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6547 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6548 uint64 ac_value = extract_ac_15_14(instruction);
6549
6550 std::string ac = AC(copy(ac_value));
6551 std::string rs = GPR(copy(rs_value));
6552 std::string rt = GPR(copy(rt_value));
6553
6554 return img::format("DPAX.W.PH %s, %s, %s", ac, rs, rt);
6555 }
6556
6557
6558 /*
6559 *
6560 *
6561 * 3 2 1
6562 * 10987654321098765432109876543210
6563 * 001000 x1110000101
6564 * rt -----
6565 * rs -----
6566 * rd -----
6567 */
6568 std::string NMD::DPS_W_PH(uint64 instruction)
6569 {
6570 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6571 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6572 uint64 ac_value = extract_ac_15_14(instruction);
6573
6574 std::string ac = AC(copy(ac_value));
6575 std::string rs = GPR(copy(rs_value));
6576 std::string rt = GPR(copy(rt_value));
6577
6578 return img::format("DPS.W.PH %s, %s, %s", ac, rs, rt);
6579 }
6580
6581
6582 /*
6583 *
6584 *
6585 * 3 2 1
6586 * 10987654321098765432109876543210
6587 * 001000 x1110000101
6588 * rt -----
6589 * rs -----
6590 * rd -----
6591 */
6592 std::string NMD::DPSQ_SA_L_W(uint64 instruction)
6593 {
6594 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6595 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6596 uint64 ac_value = extract_ac_15_14(instruction);
6597
6598 std::string ac = AC(copy(ac_value));
6599 std::string rs = GPR(copy(rs_value));
6600 std::string rt = GPR(copy(rt_value));
6601
6602 return img::format("DPSQ_SA.L.W %s, %s, %s", ac, rs, rt);
6603 }
6604
6605
6606 /*
6607 *
6608 *
6609 * 3 2 1
6610 * 10987654321098765432109876543210
6611 * 001000 x1110000101
6612 * rt -----
6613 * rs -----
6614 * rd -----
6615 */
6616 std::string NMD::DPSQ_S_W_PH(uint64 instruction)
6617 {
6618 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6619 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6620 uint64 ac_value = extract_ac_15_14(instruction);
6621
6622 std::string ac = AC(copy(ac_value));
6623 std::string rs = GPR(copy(rs_value));
6624 std::string rt = GPR(copy(rt_value));
6625
6626 return img::format("DPSQ_S.W.PH %s, %s, %s", ac, rs, rt);
6627 }
6628
6629
6630 /*
6631 *
6632 *
6633 * 3 2 1
6634 * 10987654321098765432109876543210
6635 * 001000 x1110000101
6636 * rt -----
6637 * rs -----
6638 * rd -----
6639 */
6640 std::string NMD::DPSQX_SA_W_PH(uint64 instruction)
6641 {
6642 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6643 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6644 uint64 ac_value = extract_ac_15_14(instruction);
6645
6646 std::string ac = AC(copy(ac_value));
6647 std::string rs = GPR(copy(rs_value));
6648 std::string rt = GPR(copy(rt_value));
6649
6650 return img::format("DPSQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6651 }
6652
6653
6654 /*
6655 *
6656 *
6657 * 3 2 1
6658 * 10987654321098765432109876543210
6659 * 001000 x1110000101
6660 * rt -----
6661 * rs -----
6662 * rd -----
6663 */
6664 std::string NMD::DPSQX_S_W_PH(uint64 instruction)
6665 {
6666 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6667 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6668 uint64 ac_value = extract_ac_15_14(instruction);
6669
6670 std::string ac = AC(copy(ac_value));
6671 std::string rs = GPR(copy(rs_value));
6672 std::string rt = GPR(copy(rt_value));
6673
6674 return img::format("DPSQX_S.W.PH %s, %s, %s", ac, rs, rt);
6675 }
6676
6677
6678 /*
6679 *
6680 *
6681 * 3 2 1
6682 * 10987654321098765432109876543210
6683 * 001000 x1110000101
6684 * rt -----
6685 * rs -----
6686 * rd -----
6687 */
6688 std::string NMD::DPSU_H_QBL(uint64 instruction)
6689 {
6690 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6691 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6692 uint64 ac_value = extract_ac_15_14(instruction);
6693
6694 std::string ac = AC(copy(ac_value));
6695 std::string rs = GPR(copy(rs_value));
6696 std::string rt = GPR(copy(rt_value));
6697
6698 return img::format("DPSU.H.QBL %s, %s, %s", ac, rs, rt);
6699 }
6700
6701
6702 /*
6703 *
6704 *
6705 * 3 2 1
6706 * 10987654321098765432109876543210
6707 * 001000 x1110000101
6708 * rt -----
6709 * rs -----
6710 * rd -----
6711 */
6712 std::string NMD::DPSU_H_QBR(uint64 instruction)
6713 {
6714 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6715 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6716 uint64 ac_value = extract_ac_15_14(instruction);
6717
6718 std::string ac = AC(copy(ac_value));
6719 std::string rs = GPR(copy(rs_value));
6720 std::string rt = GPR(copy(rt_value));
6721
6722 return img::format("DPSU.H.QBR %s, %s, %s", ac, rs, rt);
6723 }
6724
6725
6726 /*
6727 *
6728 *
6729 * 3 2 1
6730 * 10987654321098765432109876543210
6731 * 001000 x1110000101
6732 * rt -----
6733 * rs -----
6734 * rd -----
6735 */
6736 std::string NMD::DPSX_W_PH(uint64 instruction)
6737 {
6738 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6739 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6740 uint64 ac_value = extract_ac_15_14(instruction);
6741
6742 std::string ac = AC(copy(ac_value));
6743 std::string rs = GPR(copy(rs_value));
6744 std::string rt = GPR(copy(rt_value));
6745
6746 return img::format("DPSX.W.PH %s, %s, %s", ac, rs, rt);
6747 }
6748
6749
6750 /*
6751 * DROTR -
6752 *
6753 * 3 2 1
6754 * 10987654321098765432109876543210
6755 * 001000 x1110000101
6756 * rt -----
6757 * rs -----
6758 * rd -----
6759 */
6760 std::string NMD::DROTR(uint64 instruction)
6761 {
6762 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6763 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6764 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6765
6766 std::string rt = GPR(copy(rt_value));
6767 std::string rs = GPR(copy(rs_value));
6768 std::string shift = IMMEDIATE(copy(shift_value));
6769
6770 return img::format("DROTR %s, %s, %s", rt, rs, shift);
6771 }
6772
6773
6774 /*
6775 * DROTR[32] -
6776 *
6777 * 3 2 1
6778 * 10987654321098765432109876543210
6779 * 10o000 1100xxx0110
6780 * rt -----
6781 * rs -----
6782 * shift -----
6783 */
6784 std::string NMD::DROTR32(uint64 instruction)
6785 {
6786 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6787 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6788 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6789
6790 std::string rt = GPR(copy(rt_value));
6791 std::string rs = GPR(copy(rs_value));
6792 std::string shift = IMMEDIATE(copy(shift_value));
6793
6794 return img::format("DROTR32 %s, %s, %s", rt, rs, shift);
6795 }
6796
6797
6798 /*
6799 *
6800 *
6801 * 3 2 1
6802 * 10987654321098765432109876543210
6803 * 001000 x1110000101
6804 * rt -----
6805 * rs -----
6806 * rd -----
6807 */
6808 std::string NMD::DROTRV(uint64 instruction)
6809 {
6810 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6811 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6812 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6813
6814 std::string rd = GPR(copy(rd_value));
6815 std::string rs = GPR(copy(rs_value));
6816 std::string rt = GPR(copy(rt_value));
6817
6818 return img::format("DROTRV %s, %s, %s", rd, rs, rt);
6819 }
6820
6821
6822 /*
6823 *
6824 *
6825 * 3 2 1
6826 * 10987654321098765432109876543210
6827 * 001000 x1110000101
6828 * rt -----
6829 * rs -----
6830 * rd -----
6831 */
6832 std::string NMD::DROTX(uint64 instruction)
6833 {
6834 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6835 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6836 uint64 shiftx_value = extract_shiftx_11_10_9_8_7_6(instruction);
6837 uint64 shift_value = extract_shift_5_4_3_2_1_0(instruction);
6838
6839 std::string rt = GPR(copy(rt_value));
6840 std::string rs = GPR(copy(rs_value));
6841 std::string shift = IMMEDIATE(copy(shift_value));
6842 std::string shiftx = IMMEDIATE(copy(shiftx_value));
6843
6844 return img::format("DROTX %s, %s, %s, %s", rt, rs, shift, shiftx);
6845 }
6846
6847
6848 /*
6849 * DSLL -
6850 *
6851 * 3 2 1
6852 * 10987654321098765432109876543210
6853 * 10o000 1100xxx0000
6854 * rt -----
6855 * rs -----
6856 * shift -----
6857 */
6858 std::string NMD::DSLL(uint64 instruction)
6859 {
6860 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6861 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6862 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6863
6864 std::string rt = GPR(copy(rt_value));
6865 std::string rs = GPR(copy(rs_value));
6866 std::string shift = IMMEDIATE(copy(shift_value));
6867
6868 return img::format("DSLL %s, %s, %s", rt, rs, shift);
6869 }
6870
6871
6872 /*
6873 * DSLL[32] -
6874 *
6875 * 3 2 1
6876 * 10987654321098765432109876543210
6877 * 10o000 1100xxx0000
6878 * rt -----
6879 * rs -----
6880 * shift -----
6881 */
6882 std::string NMD::DSLL32(uint64 instruction)
6883 {
6884 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6885 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6886 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6887
6888 std::string rt = GPR(copy(rt_value));
6889 std::string rs = GPR(copy(rs_value));
6890 std::string shift = IMMEDIATE(copy(shift_value));
6891
6892 return img::format("DSLL32 %s, %s, %s", rt, rs, shift);
6893 }
6894
6895
6896 /*
6897 *
6898 *
6899 * 3 2 1
6900 * 10987654321098765432109876543210
6901 * 001000 x1110000101
6902 * rt -----
6903 * rs -----
6904 * rd -----
6905 */
6906 std::string NMD::DSLLV(uint64 instruction)
6907 {
6908 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6909 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6910 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6911
6912 std::string rd = GPR(copy(rd_value));
6913 std::string rs = GPR(copy(rs_value));
6914 std::string rt = GPR(copy(rt_value));
6915
6916 return img::format("DSLLV %s, %s, %s", rd, rs, rt);
6917 }
6918
6919
6920 /*
6921 * DSRA -
6922 *
6923 * 3 2 1
6924 * 10987654321098765432109876543210
6925 * 10o000 1100xxx0100
6926 * rt -----
6927 * rs -----
6928 * shift -----
6929 */
6930 std::string NMD::DSRA(uint64 instruction)
6931 {
6932 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6933 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6934 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6935
6936 std::string rt = GPR(copy(rt_value));
6937 std::string rs = GPR(copy(rs_value));
6938 std::string shift = IMMEDIATE(copy(shift_value));
6939
6940 return img::format("DSRA %s, %s, %s", rt, rs, shift);
6941 }
6942
6943
6944 /*
6945 * DSRA[32] -
6946 *
6947 * 3 2 1
6948 * 10987654321098765432109876543210
6949 * 10o000 1100xxx0100
6950 * rt -----
6951 * rs -----
6952 * shift -----
6953 */
6954 std::string NMD::DSRA32(uint64 instruction)
6955 {
6956 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6957 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6958 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6959
6960 std::string rt = GPR(copy(rt_value));
6961 std::string rs = GPR(copy(rs_value));
6962 std::string shift = IMMEDIATE(copy(shift_value));
6963
6964 return img::format("DSRA32 %s, %s, %s", rt, rs, shift);
6965 }
6966
6967
6968 /*
6969 *
6970 *
6971 * 3 2 1
6972 * 10987654321098765432109876543210
6973 * 001000 x1110000101
6974 * rt -----
6975 * rs -----
6976 * rd -----
6977 */
6978 std::string NMD::DSRAV(uint64 instruction)
6979 {
6980 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6981 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6982 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6983
6984 std::string rd = GPR(copy(rd_value));
6985 std::string rs = GPR(copy(rs_value));
6986 std::string rt = GPR(copy(rt_value));
6987
6988 return img::format("DSRAV %s, %s, %s", rd, rs, rt);
6989 }
6990
6991
6992 /*
6993 * DSRL -
6994 *
6995 * 3 2 1
6996 * 10987654321098765432109876543210
6997 * 10o000 1100xxx0100
6998 * rt -----
6999 * rs -----
7000 * shift -----
7001 */
7002 std::string NMD::DSRL(uint64 instruction)
7003 {
7004 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7005 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7006 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
7007
7008 std::string rt = GPR(copy(rt_value));
7009 std::string rs = GPR(copy(rs_value));
7010 std::string shift = IMMEDIATE(copy(shift_value));
7011
7012 return img::format("DSRL %s, %s, %s", rt, rs, shift);
7013 }
7014
7015
7016 /*
7017 * DSRL[32] -
7018 *
7019 * 3 2 1
7020 * 10987654321098765432109876543210
7021 * 10o000 1100xxx0010
7022 * rt -----
7023 * rs -----
7024 * shift -----
7025 */
7026 std::string NMD::DSRL32(uint64 instruction)
7027 {
7028 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7029 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7030 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
7031
7032 std::string rt = GPR(copy(rt_value));
7033 std::string rs = GPR(copy(rs_value));
7034 std::string shift = IMMEDIATE(copy(shift_value));
7035
7036 return img::format("DSRL32 %s, %s, %s", rt, rs, shift);
7037 }
7038
7039
7040 /*
7041 *
7042 *
7043 * 3 2 1
7044 * 10987654321098765432109876543210
7045 * 001000 x1110000101
7046 * rt -----
7047 * rs -----
7048 * rd -----
7049 */
7050 std::string NMD::DSRLV(uint64 instruction)
7051 {
7052 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7053 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7054 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7055
7056 std::string rd = GPR(copy(rd_value));
7057 std::string rs = GPR(copy(rs_value));
7058 std::string rt = GPR(copy(rt_value));
7059
7060 return img::format("DSRLV %s, %s, %s", rd, rs, rt);
7061 }
7062
7063
7064 /*
7065 *
7066 *
7067 * 3 2 1
7068 * 10987654321098765432109876543210
7069 * 001000 x1110000101
7070 * rt -----
7071 * rs -----
7072 * rd -----
7073 */
7074 std::string NMD::DSUB(uint64 instruction)
7075 {
7076 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7077 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7078 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7079
7080 std::string rd = GPR(copy(rd_value));
7081 std::string rs = GPR(copy(rs_value));
7082 std::string rt = GPR(copy(rt_value));
7083
7084 return img::format("DSUB %s, %s, %s", rd, rs, rt);
7085 }
7086
7087
7088 /*
7089 *
7090 *
7091 * 3 2 1
7092 * 10987654321098765432109876543210
7093 * 001000 x1110000101
7094 * rt -----
7095 * rs -----
7096 * rd -----
7097 */
7098 std::string NMD::DSUBU(uint64 instruction)
7099 {
7100 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7101 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7102 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7103
7104 std::string rd = GPR(copy(rd_value));
7105 std::string rs = GPR(copy(rs_value));
7106 std::string rt = GPR(copy(rt_value));
7107
7108 return img::format("DSUBU %s, %s, %s", rd, rs, rt);
7109 }
7110
7111
7112 /*
7113 *
7114 *
7115 * 3 2 1
7116 * 10987654321098765432109876543210
7117 * 001000 x1110000101
7118 * rt -----
7119 * rs -----
7120 * rd -----
7121 */
7122 std::string NMD::DVPE(uint64 instruction)
7123 {
7124 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7125
7126 std::string rt = GPR(copy(rt_value));
7127
7128 return img::format("DVPE %s", rt);
7129 }
7130
7131
7132 /*
7133 *
7134 *
7135 * 3 2 1
7136 * 10987654321098765432109876543210
7137 * 001000 x1110000101
7138 * rt -----
7139 * rs -----
7140 * rd -----
7141 */
7142 std::string NMD::DVP(uint64 instruction)
7143 {
7144 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7145
7146 std::string rt = GPR(copy(rt_value));
7147
7148 return img::format("DVP %s", rt);
7149 }
7150
7151
7152 /*
7153 *
7154 *
7155 * 3 2 1
7156 * 10987654321098765432109876543210
7157 * 001000 x1110000101
7158 * rt -----
7159 * rs -----
7160 * rd -----
7161 */
7162 std::string NMD::EHB(uint64 instruction)
7163 {
7164 (void)instruction;
7165
7166 return "EHB ";
7167 }
7168
7169
7170 /*
7171 *
7172 *
7173 * 3 2 1
7174 * 10987654321098765432109876543210
7175 * 001000 x1110000101
7176 * rt -----
7177 * rs -----
7178 * rd -----
7179 */
7180 std::string NMD::EI(uint64 instruction)
7181 {
7182 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7183
7184 std::string rt = GPR(copy(rt_value));
7185
7186 return img::format("EI %s", rt);
7187 }
7188
7189
7190 /*
7191 *
7192 *
7193 * 3 2 1
7194 * 10987654321098765432109876543210
7195 * 001000 x1110000101
7196 * rt -----
7197 * rs -----
7198 * rd -----
7199 */
7200 std::string NMD::EMT(uint64 instruction)
7201 {
7202 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7203
7204 std::string rt = GPR(copy(rt_value));
7205
7206 return img::format("EMT %s", rt);
7207 }
7208
7209
7210 /*
7211 *
7212 *
7213 * 3 2 1
7214 * 10987654321098765432109876543210
7215 * 001000 x1110000101
7216 * rt -----
7217 * rs -----
7218 * rd -----
7219 */
7220 std::string NMD::ERET(uint64 instruction)
7221 {
7222 (void)instruction;
7223
7224 return "ERET ";
7225 }
7226
7227
7228 /*
7229 *
7230 *
7231 * 3 2 1
7232 * 10987654321098765432109876543210
7233 * 001000 x1110000101
7234 * rt -----
7235 * rs -----
7236 * rd -----
7237 */
7238 std::string NMD::ERETNC(uint64 instruction)
7239 {
7240 (void)instruction;
7241
7242 return "ERETNC ";
7243 }
7244
7245
7246 /*
7247 *
7248 *
7249 * 3 2 1
7250 * 10987654321098765432109876543210
7251 * 001000 x1110000101
7252 * rt -----
7253 * rs -----
7254 * rd -----
7255 */
7256 std::string NMD::EVP(uint64 instruction)
7257 {
7258 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7259
7260 std::string rt = GPR(copy(rt_value));
7261
7262 return img::format("EVP %s", rt);
7263 }
7264
7265
7266 /*
7267 *
7268 *
7269 * 3 2 1
7270 * 10987654321098765432109876543210
7271 * 001000 x1110000101
7272 * rt -----
7273 * rs -----
7274 * rd -----
7275 */
7276 std::string NMD::EVPE(uint64 instruction)
7277 {
7278 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7279
7280 std::string rt = GPR(copy(rt_value));
7281
7282 return img::format("EVPE %s", rt);
7283 }
7284
7285
7286 /*
7287 *
7288 *
7289 * 3 2 1
7290 * 10987654321098765432109876543210
7291 * 001000 x1110000101
7292 * rt -----
7293 * rs -----
7294 * rd -----
7295 */
7296 std::string NMD::EXT(uint64 instruction)
7297 {
7298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7299 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7300 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
7301 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
7302
7303 std::string rt = GPR(copy(rt_value));
7304 std::string rs = GPR(copy(rs_value));
7305 std::string lsb = IMMEDIATE(copy(lsb_value));
7306 std::string msbd = IMMEDIATE(encode_msbd_from_size(msbd_value));
7307
7308 return img::format("EXT %s, %s, %s, %s", rt, rs, lsb, msbd);
7309 }
7310
7311
7312 /*
7313 *
7314 *
7315 * 3 2 1
7316 * 10987654321098765432109876543210
7317 * 001000 x1110000101
7318 * rt -----
7319 * rs -----
7320 * rd -----
7321 */
7322 std::string NMD::EXTD(uint64 instruction)
7323 {
7324 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7325 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7326 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7327 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7328
7329 std::string rd = GPR(copy(rd_value));
7330 std::string rs = GPR(copy(rs_value));
7331 std::string rt = GPR(copy(rt_value));
7332 std::string shift = IMMEDIATE(copy(shift_value));
7333
7334 return img::format("EXTD %s, %s, %s, %s", rd, rs, rt, shift);
7335 }
7336
7337
7338 /*
7339 *
7340 *
7341 * 3 2 1
7342 * 10987654321098765432109876543210
7343 * 001000 x1110000101
7344 * rt -----
7345 * rs -----
7346 * rd -----
7347 */
7348 std::string NMD::EXTD32(uint64 instruction)
7349 {
7350 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7351 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7352 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7353 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7354
7355 std::string rd = GPR(copy(rd_value));
7356 std::string rs = GPR(copy(rs_value));
7357 std::string rt = GPR(copy(rt_value));
7358 std::string shift = IMMEDIATE(copy(shift_value));
7359
7360 return img::format("EXTD32 %s, %s, %s, %s", rd, rs, rt, shift);
7361 }
7362
7363
7364 /*
7365 *
7366 *
7367 * 3 2 1
7368 * 10987654321098765432109876543210
7369 * 001000 x1110000101
7370 * rt -----
7371 * rs -----
7372 * rd -----
7373 */
7374 std::string NMD::EXTPDP(uint64 instruction)
7375 {
7376 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7377 uint64 size_value = extract_size_20_19_18_17_16(instruction);
7378 uint64 ac_value = extract_ac_15_14(instruction);
7379
7380 std::string rt = GPR(copy(rt_value));
7381 std::string ac = AC(copy(ac_value));
7382 std::string size = IMMEDIATE(copy(size_value));
7383
7384 return img::format("EXTPDP %s, %s, %s", rt, ac, size);
7385 }
7386
7387
7388 /*
7389 *
7390 *
7391 * 3 2 1
7392 * 10987654321098765432109876543210
7393 * 001000 x1110000101
7394 * rt -----
7395 * rs -----
7396 * rd -----
7397 */
7398 std::string NMD::EXTPDPV(uint64 instruction)
7399 {
7400 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7401 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7402 uint64 ac_value = extract_ac_15_14(instruction);
7403
7404 std::string rt = GPR(copy(rt_value));
7405 std::string ac = AC(copy(ac_value));
7406 std::string rs = GPR(copy(rs_value));
7407
7408 return img::format("EXTPDPV %s, %s, %s", rt, ac, rs);
7409 }
7410
7411
7412 /*
7413 *
7414 *
7415 * 3 2 1
7416 * 10987654321098765432109876543210
7417 * 001000 x1110000101
7418 * rt -----
7419 * rs -----
7420 * rd -----
7421 */
7422 std::string NMD::EXTP(uint64 instruction)
7423 {
7424 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7425 uint64 size_value = extract_size_20_19_18_17_16(instruction);
7426 uint64 ac_value = extract_ac_15_14(instruction);
7427
7428 std::string rt = GPR(copy(rt_value));
7429 std::string ac = AC(copy(ac_value));
7430 std::string size = IMMEDIATE(copy(size_value));
7431
7432 return img::format("EXTP %s, %s, %s", rt, ac, size);
7433 }
7434
7435
7436 /*
7437 *
7438 *
7439 * 3 2 1
7440 * 10987654321098765432109876543210
7441 * 001000 x1110000101
7442 * rt -----
7443 * rs -----
7444 * rd -----
7445 */
7446 std::string NMD::EXTPV(uint64 instruction)
7447 {
7448 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7449 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7450 uint64 ac_value = extract_ac_15_14(instruction);
7451
7452 std::string rt = GPR(copy(rt_value));
7453 std::string ac = AC(copy(ac_value));
7454 std::string rs = GPR(copy(rs_value));
7455
7456 return img::format("EXTPV %s, %s, %s", rt, ac, rs);
7457 }
7458
7459
7460 /*
7461 * [DSP] EXTR_RS.W rt, ac, shift - Extract word value from accumulator to GPR
7462 * with right shift
7463 *
7464 * 3 2 1
7465 * 10987654321098765432109876543210
7466 * 001000 10111001111111
7467 * rt -----
7468 * shift -----
7469 * ac --
7470 */
7471 std::string NMD::EXTR_RS_W(uint64 instruction)
7472 {
7473 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7474 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7475 uint64 ac_value = extract_ac_15_14(instruction);
7476
7477 std::string rt = GPR(copy(rt_value));
7478 std::string ac = AC(copy(ac_value));
7479 std::string shift = IMMEDIATE(copy(shift_value));
7480
7481 return img::format("EXTR_RS.W %s, %s, %s", rt, ac, shift);
7482 }
7483
7484
7485 /*
7486 * [DSP] EXTR_R.W rt, ac, shift - Extract word value from accumulator to GPR
7487 * with right shift
7488 *
7489 * 3 2 1
7490 * 10987654321098765432109876543210
7491 * 001000 01111001111111
7492 * rt -----
7493 * shift -----
7494 * ac --
7495 */
7496 std::string NMD::EXTR_R_W(uint64 instruction)
7497 {
7498 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7499 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7500 uint64 ac_value = extract_ac_15_14(instruction);
7501
7502 std::string rt = GPR(copy(rt_value));
7503 std::string ac = AC(copy(ac_value));
7504 std::string shift = IMMEDIATE(copy(shift_value));
7505
7506 return img::format("EXTR_R.W %s, %s, %s", rt, ac, shift);
7507 }
7508
7509
7510 /*
7511 * [DSP] EXTR_S.H rt, ac, shift - Extract halfword value from accumulator
7512 * to GPR with right shift and saturate
7513 *
7514 * 3 2 1
7515 * 10987654321098765432109876543210
7516 * 001000 11111001111111
7517 * rt -----
7518 * shift -----
7519 * ac --
7520 */
7521 std::string NMD::EXTR_S_H(uint64 instruction)
7522 {
7523 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7524 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7525 uint64 ac_value = extract_ac_15_14(instruction);
7526
7527 std::string rt = GPR(copy(rt_value));
7528 std::string ac = AC(copy(ac_value));
7529 std::string shift = IMMEDIATE(copy(shift_value));
7530
7531 return img::format("EXTR_S.H %s, %s, %s", rt, ac, shift);
7532 }
7533
7534
7535 /*
7536 * [DSP] EXTR.W rt, ac, shift - Extract word value from accumulator to GPR
7537 * with right shift
7538 *
7539 * 3 2 1
7540 * 10987654321098765432109876543210
7541 * 001000 00111001111111
7542 * rt -----
7543 * shift -----
7544 * ac --
7545 */
7546 std::string NMD::EXTR_W(uint64 instruction)
7547 {
7548 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7549 uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7550 uint64 ac_value = extract_ac_15_14(instruction);
7551
7552 std::string rt = GPR(copy(rt_value));
7553 std::string ac = AC(copy(ac_value));
7554 std::string shift = IMMEDIATE(copy(shift_value));
7555
7556 return img::format("EXTR.W %s, %s, %s", rt, ac, shift);
7557 }
7558
7559
7560 /*
7561 * [DSP] EXTRV_RS.W rt, ac, rs - Extract word value with variable
7562 * right shift from accumulator to GPR
7563 *
7564 * 3 2 1
7565 * 10987654321098765432109876543210
7566 * 001000 10111010111111
7567 * rt -----
7568 * rs -----
7569 * ac --
7570 */
7571 std::string NMD::EXTRV_RS_W(uint64 instruction)
7572 {
7573 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7574 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7575 uint64 ac_value = extract_ac_15_14(instruction);
7576
7577 std::string rt = GPR(copy(rt_value));
7578 std::string ac = AC(copy(ac_value));
7579 std::string rs = GPR(copy(rs_value));
7580
7581 return img::format("EXTRV_RS.W %s, %s, %s", rt, ac, rs);
7582 }
7583
7584
7585 /*
7586 * [DSP] EXTRV_R.W rt, ac, rs - Extract word value with variable
7587 * right shift from accumulator to GPR
7588 *
7589 * 3 2 1
7590 * 10987654321098765432109876543210
7591 * 001000 01111010111111
7592 * rt -----
7593 * rs -----
7594 * ac --
7595 */
7596 std::string NMD::EXTRV_R_W(uint64 instruction)
7597 {
7598 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7599 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7600 uint64 ac_value = extract_ac_15_14(instruction);
7601
7602 std::string rt = GPR(copy(rt_value));
7603 std::string ac = AC(copy(ac_value));
7604 std::string rs = GPR(copy(rs_value));
7605
7606 return img::format("EXTRV_R.W %s, %s, %s", rt, ac, rs);
7607 }
7608
7609
7610 /*
7611 * [DSP] EXTRV_S.H rt, ac, rs - Extract halfword value variable from
7612 * accumulator to GPR with right shift and saturate
7613 *
7614 * 3 2 1
7615 * 10987654321098765432109876543210
7616 * 001000 11111010111111
7617 * rt -----
7618 * rs -----
7619 * ac --
7620 */
7621 std::string NMD::EXTRV_S_H(uint64 instruction)
7622 {
7623 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7624 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7625 uint64 ac_value = extract_ac_15_14(instruction);
7626
7627 std::string rt = GPR(copy(rt_value));
7628 std::string ac = AC(copy(ac_value));
7629 std::string rs = GPR(copy(rs_value));
7630
7631 return img::format("EXTRV_S.H %s, %s, %s", rt, ac, rs);
7632 }
7633
7634
7635 /*
7636 * [DSP] EXTRV.W rt, ac, rs - Extract word value with variable
7637 * right shift from accumulator to GPR
7638 *
7639 * 3 2 1
7640 * 10987654321098765432109876543210
7641 * 001000 00111010111111
7642 * rt -----
7643 * rs -----
7644 * ac --
7645 */
7646 std::string NMD::EXTRV_W(uint64 instruction)
7647 {
7648 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7649 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7650 uint64 ac_value = extract_ac_15_14(instruction);
7651
7652 std::string rt = GPR(copy(rt_value));
7653 std::string ac = AC(copy(ac_value));
7654 std::string rs = GPR(copy(rs_value));
7655
7656 return img::format("EXTRV.W %s, %s, %s", rt, ac, rs);
7657 }
7658
7659
7660 /*
7661 * EXTW - Extract Word
7662 *
7663 * 3 2 1
7664 * 10987654321098765432109876543210
7665 * 001000 011111
7666 * rt -----
7667 * rs -----
7668 * rd -----
7669 * shift -----
7670 */
7671 std::string NMD::EXTW(uint64 instruction)
7672 {
7673 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7674 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7675 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7676 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7677
7678 std::string rd = GPR(copy(rd_value));
7679 std::string rs = GPR(copy(rs_value));
7680 std::string rt = GPR(copy(rt_value));
7681 std::string shift = IMMEDIATE(copy(shift_value));
7682
7683 return img::format("EXTW %s, %s, %s, %s", rd, rs, rt, shift);
7684 }
7685
7686
7687 /*
7688 *
7689 *
7690 * 3 2 1
7691 * 10987654321098765432109876543210
7692 * 001000 x1110000101
7693 * rt -----
7694 * rs -----
7695 * rd -----
7696 */
7697 std::string NMD::FLOOR_L_D(uint64 instruction)
7698 {
7699 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7700 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7701
7702 std::string ft = FPR(copy(ft_value));
7703 std::string fs = FPR(copy(fs_value));
7704
7705 return img::format("FLOOR.L.D %s, %s", ft, fs);
7706 }
7707
7708
7709 /*
7710 *
7711 *
7712 * 3 2 1
7713 * 10987654321098765432109876543210
7714 * 001000 x1110000101
7715 * rt -----
7716 * rs -----
7717 * rd -----
7718 */
7719 std::string NMD::FLOOR_L_S(uint64 instruction)
7720 {
7721 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7722 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7723
7724 std::string ft = FPR(copy(ft_value));
7725 std::string fs = FPR(copy(fs_value));
7726
7727 return img::format("FLOOR.L.S %s, %s", ft, fs);
7728 }
7729
7730
7731 /*
7732 *
7733 *
7734 * 3 2 1
7735 * 10987654321098765432109876543210
7736 * 001000 x1110000101
7737 * rt -----
7738 * rs -----
7739 * rd -----
7740 */
7741 std::string NMD::FLOOR_W_D(uint64 instruction)
7742 {
7743 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7744 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7745
7746 std::string ft = FPR(copy(ft_value));
7747 std::string fs = FPR(copy(fs_value));
7748
7749 return img::format("FLOOR.W.D %s, %s", ft, fs);
7750 }
7751
7752
7753 /*
7754 *
7755 *
7756 * 3 2 1
7757 * 10987654321098765432109876543210
7758 * 001000 x1110000101
7759 * rt -----
7760 * rs -----
7761 * rd -----
7762 */
7763 std::string NMD::FLOOR_W_S(uint64 instruction)
7764 {
7765 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7766 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7767
7768 std::string ft = FPR(copy(ft_value));
7769 std::string fs = FPR(copy(fs_value));
7770
7771 return img::format("FLOOR.W.S %s, %s", ft, fs);
7772 }
7773
7774
7775 /*
7776 *
7777 *
7778 * 3 2 1
7779 * 10987654321098765432109876543210
7780 * 001000 x1110000101
7781 * rt -----
7782 * rs -----
7783 * rd -----
7784 */
7785 std::string NMD::FORK(uint64 instruction)
7786 {
7787 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7788 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7789 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7790
7791 std::string rd = GPR(copy(rd_value));
7792 std::string rs = GPR(copy(rs_value));
7793 std::string rt = GPR(copy(rt_value));
7794
7795 return img::format("FORK %s, %s, %s", rd, rs, rt);
7796 }
7797
7798
7799 /*
7800 *
7801 *
7802 * 3 2 1
7803 * 10987654321098765432109876543210
7804 * 001000 x1110000101
7805 * rt -----
7806 * rs -----
7807 * rd -----
7808 */
7809 std::string NMD::HYPCALL(uint64 instruction)
7810 {
7811 uint64 code_value = extract_code_17_to_0(instruction);
7812
7813 std::string code = IMMEDIATE(copy(code_value));
7814
7815 return img::format("HYPCALL %s", code);
7816 }
7817
7818
7819 /*
7820 *
7821 *
7822 * 3 2 1
7823 * 10987654321098765432109876543210
7824 * 001000 x1110000101
7825 * rt -----
7826 * rs -----
7827 * rd -----
7828 */
7829 std::string NMD::HYPCALL_16_(uint64 instruction)
7830 {
7831 uint64 code_value = extract_code_1_0(instruction);
7832
7833 std::string code = IMMEDIATE(copy(code_value));
7834
7835 return img::format("HYPCALL %s", code);
7836 }
7837
7838
7839 /*
7840 *
7841 *
7842 * 3 2 1
7843 * 10987654321098765432109876543210
7844 * 001000 x1110000101
7845 * rt -----
7846 * rs -----
7847 * rd -----
7848 */
7849 std::string NMD::INS(uint64 instruction)
7850 {
7851 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7852 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7853 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
7854 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
7855
7856 std::string rt = GPR(copy(rt_value));
7857 std::string rs = GPR(copy(rs_value));
7858 std::string pos = IMMEDIATE(encode_lsb_from_pos_and_size(lsb_value));
7859 std::string size = IMMEDIATE(encode_lsb_from_pos_and_size(msbd_value));
7860 /* !!!!!!!!!! - no conversion function */
7861
7862 return img::format("INS %s, %s, %s, %s", rt, rs, pos, size);
7863 /* hand edited */
7864 }
7865
7866
7867 /*
7868 * [DSP] INSV rt, rs - Insert bit field variable
7869 *
7870 * 3 2 1
7871 * 10987654321098765432109876543210
7872 * 001000 0100000100111111
7873 * rt -----
7874 * rs -----
7875 */
7876 std::string NMD::INSV(uint64 instruction)
7877 {
7878 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7879 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7880
7881 std::string rt = GPR(copy(rt_value));
7882 std::string rs = GPR(copy(rs_value));
7883
7884 return img::format("INSV %s, %s", rt, rs);
7885 }
7886
7887
7888 /*
7889 *
7890 *
7891 * 3 2 1
7892 * 10987654321098765432109876543210
7893 * 001000 x1110000101
7894 * rt -----
7895 * rs -----
7896 * rd -----
7897 */
7898 std::string NMD::IRET(uint64 instruction)
7899 {
7900 (void)instruction;
7901
7902 return "IRET ";
7903 }
7904
7905
7906 /*
7907 *
7908 *
7909 * 3 2 1
7910 * 10987654321098765432109876543210
7911 * 001000 x1110000101
7912 * rt -----
7913 * rs -----
7914 * rd -----
7915 */
7916 std::string NMD::JALRC_16_(uint64 instruction)
7917 {
7918 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7919
7920 std::string rt = GPR(copy(rt_value));
7921
7922 return img::format("JALRC $%d, %s", 31, rt);
7923 }
7924
7925
7926 /*
7927 *
7928 *
7929 * 3 2 1
7930 * 10987654321098765432109876543210
7931 * 001000 x1110000101
7932 * rt -----
7933 * rs -----
7934 * rd -----
7935 */
7936 std::string NMD::JALRC_32_(uint64 instruction)
7937 {
7938 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7939 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7940
7941 std::string rt = GPR(copy(rt_value));
7942 std::string rs = GPR(copy(rs_value));
7943
7944 return img::format("JALRC %s, %s", rt, rs);
7945 }
7946
7947
7948 /*
7949 *
7950 *
7951 * 3 2 1
7952 * 10987654321098765432109876543210
7953 * 001000 x1110000101
7954 * rt -----
7955 * rs -----
7956 * rd -----
7957 */
7958 std::string NMD::JALRC_HB(uint64 instruction)
7959 {
7960 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7961 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7962
7963 std::string rt = GPR(copy(rt_value));
7964 std::string rs = GPR(copy(rs_value));
7965
7966 return img::format("JALRC.HB %s, %s", rt, rs);
7967 }
7968
7969
7970 /*
7971 *
7972 *
7973 * 3 2 1
7974 * 10987654321098765432109876543210
7975 * 001000 x1110000101
7976 * rt -----
7977 * rs -----
7978 * rd -----
7979 */
7980 std::string NMD::JRC(uint64 instruction)
7981 {
7982 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7983
7984 std::string rt = GPR(copy(rt_value));
7985
7986 return img::format("JRC %s", rt);
7987 }
7988
7989
7990 /*
7991 *
7992 *
7993 * 3 2 1
7994 * 10987654321098765432109876543210
7995 * 001000 x1110000101
7996 * rt -----
7997 * rs -----
7998 * rd -----
7999 */
8000 std::string NMD::LB_16_(uint64 instruction)
8001 {
8002 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8003 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8004 uint64 u_value = extract_u_1_0(instruction);
8005
8006 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8007 std::string u = IMMEDIATE(copy(u_value));
8008 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
8009
8010 return img::format("LB %s, %s(%s)", rt3, u, rs3);
8011 }
8012
8013
8014 /*
8015 *
8016 *
8017 * 3 2 1
8018 * 10987654321098765432109876543210
8019 * 001000 x1110000101
8020 * rt -----
8021 * rs -----
8022 * rd -----
8023 */
8024 std::string NMD::LB_GP_(uint64 instruction)
8025 {
8026 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8027 uint64 u_value = extract_u_17_to_0(instruction);
8028
8029 std::string rt = GPR(copy(rt_value));
8030 std::string u = IMMEDIATE(copy(u_value));
8031
8032 return img::format("LB %s, %s($%d)", rt, u, 28);
8033 }
8034
8035
8036 /*
8037 *
8038 *
8039 * 3 2 1
8040 * 10987654321098765432109876543210
8041 * 001000 x1110000101
8042 * rt -----
8043 * rs -----
8044 * rd -----
8045 */
8046 std::string NMD::LB_S9_(uint64 instruction)
8047 {
8048 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8049 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8050 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8051
8052 std::string rt = GPR(copy(rt_value));
8053 std::string s = IMMEDIATE(copy(s_value));
8054 std::string rs = GPR(copy(rs_value));
8055
8056 return img::format("LB %s, %s(%s)", rt, s, rs);
8057 }
8058
8059
8060 /*
8061 *
8062 *
8063 * 3 2 1
8064 * 10987654321098765432109876543210
8065 * 001000 x1110000101
8066 * rt -----
8067 * rs -----
8068 * rd -----
8069 */
8070 std::string NMD::LB_U12_(uint64 instruction)
8071 {
8072 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8073 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8074 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8075
8076 std::string rt = GPR(copy(rt_value));
8077 std::string u = IMMEDIATE(copy(u_value));
8078 std::string rs = GPR(copy(rs_value));
8079
8080 return img::format("LB %s, %s(%s)", rt, u, rs);
8081 }
8082
8083
8084 /*
8085 *
8086 *
8087 * 3 2 1
8088 * 10987654321098765432109876543210
8089 * 001000 x1110000101
8090 * rt -----
8091 * rs -----
8092 * rd -----
8093 */
8094 std::string NMD::LBE(uint64 instruction)
8095 {
8096 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8097 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8098 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8099
8100 std::string rt = GPR(copy(rt_value));
8101 std::string s = IMMEDIATE(copy(s_value));
8102 std::string rs = GPR(copy(rs_value));
8103
8104 return img::format("LBE %s, %s(%s)", rt, s, rs);
8105 }
8106
8107
8108 /*
8109 *
8110 *
8111 * 3 2 1
8112 * 10987654321098765432109876543210
8113 * 001000 x1110000101
8114 * rt -----
8115 * rs -----
8116 * rd -----
8117 */
8118 std::string NMD::LBU_16_(uint64 instruction)
8119 {
8120 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8121 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8122 uint64 u_value = extract_u_1_0(instruction);
8123
8124 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8125 std::string u = IMMEDIATE(copy(u_value));
8126 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
8127
8128 return img::format("LBU %s, %s(%s)", rt3, u, rs3);
8129 }
8130
8131
8132 /*
8133 *
8134 *
8135 * 3 2 1
8136 * 10987654321098765432109876543210
8137 * 001000 x1110000101
8138 * rt -----
8139 * rs -----
8140 * rd -----
8141 */
8142 std::string NMD::LBU_GP_(uint64 instruction)
8143 {
8144 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8145 uint64 u_value = extract_u_17_to_0(instruction);
8146
8147 std::string rt = GPR(copy(rt_value));
8148 std::string u = IMMEDIATE(copy(u_value));
8149
8150 return img::format("LBU %s, %s($%d)", rt, u, 28);
8151 }
8152
8153
8154 /*
8155 *
8156 *
8157 * 3 2 1
8158 * 10987654321098765432109876543210
8159 * 001000 x1110000101
8160 * rt -----
8161 * rs -----
8162 * rd -----
8163 */
8164 std::string NMD::LBU_S9_(uint64 instruction)
8165 {
8166 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8167 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8168 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8169
8170 std::string rt = GPR(copy(rt_value));
8171 std::string s = IMMEDIATE(copy(s_value));
8172 std::string rs = GPR(copy(rs_value));
8173
8174 return img::format("LBU %s, %s(%s)", rt, s, rs);
8175 }
8176
8177
8178 /*
8179 *
8180 *
8181 * 3 2 1
8182 * 10987654321098765432109876543210
8183 * 001000 x1110000101
8184 * rt -----
8185 * rs -----
8186 * rd -----
8187 */
8188 std::string NMD::LBU_U12_(uint64 instruction)
8189 {
8190 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8191 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8192 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8193
8194 std::string rt = GPR(copy(rt_value));
8195 std::string u = IMMEDIATE(copy(u_value));
8196 std::string rs = GPR(copy(rs_value));
8197
8198 return img::format("LBU %s, %s(%s)", rt, u, rs);
8199 }
8200
8201
8202 /*
8203 *
8204 *
8205 * 3 2 1
8206 * 10987654321098765432109876543210
8207 * 001000 x1110000101
8208 * rt -----
8209 * rs -----
8210 * rd -----
8211 */
8212 std::string NMD::LBUE(uint64 instruction)
8213 {
8214 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8215 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8216 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8217
8218 std::string rt = GPR(copy(rt_value));
8219 std::string s = IMMEDIATE(copy(s_value));
8220 std::string rs = GPR(copy(rs_value));
8221
8222 return img::format("LBUE %s, %s(%s)", rt, s, rs);
8223 }
8224
8225
8226 /*
8227 *
8228 *
8229 * 3 2 1
8230 * 10987654321098765432109876543210
8231 * 001000 x1110000101
8232 * rt -----
8233 * rs -----
8234 * rd -----
8235 */
8236 std::string NMD::LBUX(uint64 instruction)
8237 {
8238 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8239 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8240 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8241
8242 std::string rd = GPR(copy(rd_value));
8243 std::string rs = GPR(copy(rs_value));
8244 std::string rt = GPR(copy(rt_value));
8245
8246 return img::format("LBUX %s, %s(%s)", rd, rs, rt);
8247 }
8248
8249
8250 /*
8251 *
8252 *
8253 * 3 2 1
8254 * 10987654321098765432109876543210
8255 * 001000 x1110000101
8256 * rt -----
8257 * rs -----
8258 * rd -----
8259 */
8260 std::string NMD::LBX(uint64 instruction)
8261 {
8262 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8263 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8264 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8265
8266 std::string rd = GPR(copy(rd_value));
8267 std::string rs = GPR(copy(rs_value));
8268 std::string rt = GPR(copy(rt_value));
8269
8270 return img::format("LBX %s, %s(%s)", rd, rs, rt);
8271 }
8272
8273
8274 /*
8275 *
8276 *
8277 * 3 2 1
8278 * 10987654321098765432109876543210
8279 * 001000 x1110000101
8280 * rt -----
8281 * rs -----
8282 * rd -----
8283 */
8284 std::string NMD::LD_GP_(uint64 instruction)
8285 {
8286 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8287 uint64 u_value = extract_u_20_to_3__s3(instruction);
8288
8289 std::string rt = GPR(copy(rt_value));
8290 std::string u = IMMEDIATE(copy(u_value));
8291
8292 return img::format("LD %s, %s($%d)", rt, u, 28);
8293 }
8294
8295
8296 /*
8297 *
8298 *
8299 * 3 2 1
8300 * 10987654321098765432109876543210
8301 * 001000 x1110000101
8302 * rt -----
8303 * rs -----
8304 * rd -----
8305 */
8306 std::string NMD::LD_S9_(uint64 instruction)
8307 {
8308 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8309 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8310 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8311
8312 std::string rt = GPR(copy(rt_value));
8313 std::string s = IMMEDIATE(copy(s_value));
8314 std::string rs = GPR(copy(rs_value));
8315
8316 return img::format("LD %s, %s(%s)", rt, s, rs);
8317 }
8318
8319
8320 /*
8321 *
8322 *
8323 * 3 2 1
8324 * 10987654321098765432109876543210
8325 * 001000 x1110000101
8326 * rt -----
8327 * rs -----
8328 * rd -----
8329 */
8330 std::string NMD::LD_U12_(uint64 instruction)
8331 {
8332 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8333 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8334 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8335
8336 std::string rt = GPR(copy(rt_value));
8337 std::string u = IMMEDIATE(copy(u_value));
8338 std::string rs = GPR(copy(rs_value));
8339
8340 return img::format("LD %s, %s(%s)", rt, u, rs);
8341 }
8342
8343
8344 /*
8345 *
8346 *
8347 * 3 2 1
8348 * 10987654321098765432109876543210
8349 * 001000 x1110000101
8350 * rt -----
8351 * rs -----
8352 * rd -----
8353 */
8354 std::string NMD::LDC1_GP_(uint64 instruction)
8355 {
8356 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8357 uint64 u_value = extract_u_17_to_2__s2(instruction);
8358
8359 std::string ft = FPR(copy(ft_value));
8360 std::string u = IMMEDIATE(copy(u_value));
8361
8362 return img::format("LDC1 %s, %s($%d)", ft, u, 28);
8363 }
8364
8365
8366 /*
8367 *
8368 *
8369 * 3 2 1
8370 * 10987654321098765432109876543210
8371 * 001000 x1110000101
8372 * rt -----
8373 * rs -----
8374 * rd -----
8375 */
8376 std::string NMD::LDC1_S9_(uint64 instruction)
8377 {
8378 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8379 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8380 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8381
8382 std::string ft = FPR(copy(ft_value));
8383 std::string s = IMMEDIATE(copy(s_value));
8384 std::string rs = GPR(copy(rs_value));
8385
8386 return img::format("LDC1 %s, %s(%s)", ft, s, rs);
8387 }
8388
8389
8390 /*
8391 *
8392 *
8393 * 3 2 1
8394 * 10987654321098765432109876543210
8395 * 001000 x1110000101
8396 * rt -----
8397 * rs -----
8398 * rd -----
8399 */
8400 std::string NMD::LDC1_U12_(uint64 instruction)
8401 {
8402 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8403 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8404 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8405
8406 std::string ft = FPR(copy(ft_value));
8407 std::string u = IMMEDIATE(copy(u_value));
8408 std::string rs = GPR(copy(rs_value));
8409
8410 return img::format("LDC1 %s, %s(%s)", ft, u, rs);
8411 }
8412
8413
8414 /*
8415 *
8416 *
8417 * 3 2 1
8418 * 10987654321098765432109876543210
8419 * 001000 x1110000101
8420 * rt -----
8421 * rs -----
8422 * rd -----
8423 */
8424 std::string NMD::LDC1XS(uint64 instruction)
8425 {
8426 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8427 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8428 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8429
8430 std::string ft = FPR(copy(ft_value));
8431 std::string rs = GPR(copy(rs_value));
8432 std::string rt = GPR(copy(rt_value));
8433
8434 return img::format("LDC1XS %s, %s(%s)", ft, rs, rt);
8435 }
8436
8437
8438 /*
8439 *
8440 *
8441 * 3 2 1
8442 * 10987654321098765432109876543210
8443 * 001000 x1110000101
8444 * rt -----
8445 * rs -----
8446 * rd -----
8447 */
8448 std::string NMD::LDC1X(uint64 instruction)
8449 {
8450 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8451 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8452 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8453
8454 std::string ft = FPR(copy(ft_value));
8455 std::string rs = GPR(copy(rs_value));
8456 std::string rt = GPR(copy(rt_value));
8457
8458 return img::format("LDC1X %s, %s(%s)", ft, rs, rt);
8459 }
8460
8461
8462 /*
8463 *
8464 *
8465 * 3 2 1
8466 * 10987654321098765432109876543210
8467 * 001000 x1110000101
8468 * rt -----
8469 * rs -----
8470 * rd -----
8471 */
8472 std::string NMD::LDC2(uint64 instruction)
8473 {
8474 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
8475 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8476 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8477
8478 std::string ct = CPR(copy(ct_value));
8479 std::string s = IMMEDIATE(copy(s_value));
8480 std::string rs = GPR(copy(rs_value));
8481
8482 return img::format("LDC2 %s, %s(%s)", ct, s, rs);
8483 }
8484
8485
8486 /*
8487 *
8488 *
8489 * 3 2 1
8490 * 10987654321098765432109876543210
8491 * 001000 x1110000101
8492 * rt -----
8493 * rs -----
8494 * rd -----
8495 */
8496 std::string NMD::LDM(uint64 instruction)
8497 {
8498 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8499 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8500 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8501 uint64 count3_value = extract_count3_14_13_12(instruction);
8502
8503 std::string rt = GPR(copy(rt_value));
8504 std::string s = IMMEDIATE(copy(s_value));
8505 std::string rs = GPR(copy(rs_value));
8506 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
8507
8508 return img::format("LDM %s, %s(%s), %s", rt, s, rs, count3);
8509 }
8510
8511
8512 /*
8513 *
8514 *
8515 * 3 2 1
8516 * 10987654321098765432109876543210
8517 * 001000 x1110000101
8518 * rt -----
8519 * rs -----
8520 * rd -----
8521 */
8522 std::string NMD::LDPC_48_(uint64 instruction)
8523 {
8524 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8525 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8526
8527 std::string rt = GPR(copy(rt_value));
8528 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
8529
8530 return img::format("LDPC %s, %s", rt, s);
8531 }
8532
8533
8534 /*
8535 *
8536 *
8537 * 3 2 1
8538 * 10987654321098765432109876543210
8539 * 001000 x1110000101
8540 * rt -----
8541 * rs -----
8542 * rd -----
8543 */
8544 std::string NMD::LDX(uint64 instruction)
8545 {
8546 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8547 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8548 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8549
8550 std::string rd = GPR(copy(rd_value));
8551 std::string rs = GPR(copy(rs_value));
8552 std::string rt = GPR(copy(rt_value));
8553
8554 return img::format("LDX %s, %s(%s)", rd, rs, rt);
8555 }
8556
8557
8558 /*
8559 *
8560 *
8561 * 3 2 1
8562 * 10987654321098765432109876543210
8563 * 001000 x1110000101
8564 * rt -----
8565 * rs -----
8566 * rd -----
8567 */
8568 std::string NMD::LDXS(uint64 instruction)
8569 {
8570 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8571 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8572 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8573
8574 std::string rd = GPR(copy(rd_value));
8575 std::string rs = GPR(copy(rs_value));
8576 std::string rt = GPR(copy(rt_value));
8577
8578 return img::format("LDXS %s, %s(%s)", rd, rs, rt);
8579 }
8580
8581
8582 /*
8583 *
8584 *
8585 * 3 2 1
8586 * 10987654321098765432109876543210
8587 * 001000 x1110000101
8588 * rt -----
8589 * rs -----
8590 * rd -----
8591 */
8592 std::string NMD::LH_16_(uint64 instruction)
8593 {
8594 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8595 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8596 uint64 u_value = extract_u_2_1__s1(instruction);
8597
8598 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8599 std::string u = IMMEDIATE(copy(u_value));
8600 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
8601
8602 return img::format("LH %s, %s(%s)", rt3, u, rs3);
8603 }
8604
8605
8606 /*
8607 *
8608 *
8609 * 3 2 1
8610 * 10987654321098765432109876543210
8611 * 001000 x1110000101
8612 * rt -----
8613 * rs -----
8614 * rd -----
8615 */
8616 std::string NMD::LH_GP_(uint64 instruction)
8617 {
8618 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8619 uint64 u_value = extract_u_17_to_1__s1(instruction);
8620
8621 std::string rt = GPR(copy(rt_value));
8622 std::string u = IMMEDIATE(copy(u_value));
8623
8624 return img::format("LH %s, %s($%d)", rt, u, 28);
8625 }
8626
8627
8628 /*
8629 *
8630 *
8631 * 3 2 1
8632 * 10987654321098765432109876543210
8633 * 001000 x1110000101
8634 * rt -----
8635 * rs -----
8636 * rd -----
8637 */
8638 std::string NMD::LH_S9_(uint64 instruction)
8639 {
8640 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8641 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8642 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8643
8644 std::string rt = GPR(copy(rt_value));
8645 std::string s = IMMEDIATE(copy(s_value));
8646 std::string rs = GPR(copy(rs_value));
8647
8648 return img::format("LH %s, %s(%s)", rt, s, rs);
8649 }
8650
8651
8652 /*
8653 *
8654 *
8655 * 3 2 1
8656 * 10987654321098765432109876543210
8657 * 001000 x1110000101
8658 * rt -----
8659 * rs -----
8660 * rd -----
8661 */
8662 std::string NMD::LH_U12_(uint64 instruction)
8663 {
8664 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8665 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8666 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8667
8668 std::string rt = GPR(copy(rt_value));
8669 std::string u = IMMEDIATE(copy(u_value));
8670 std::string rs = GPR(copy(rs_value));
8671
8672 return img::format("LH %s, %s(%s)", rt, u, rs);
8673 }
8674
8675
8676 /*
8677 *
8678 *
8679 * 3 2 1
8680 * 10987654321098765432109876543210
8681 * 001000 x1110000101
8682 * rt -----
8683 * rs -----
8684 * rd -----
8685 */
8686 std::string NMD::LHE(uint64 instruction)
8687 {
8688 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8689 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8690 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8691
8692 std::string rt = GPR(copy(rt_value));
8693 std::string s = IMMEDIATE(copy(s_value));
8694 std::string rs = GPR(copy(rs_value));
8695
8696 return img::format("LHE %s, %s(%s)", rt, s, rs);
8697 }
8698
8699
8700 /*
8701 *
8702 *
8703 * 3 2 1
8704 * 10987654321098765432109876543210
8705 * 001000 x1110000101
8706 * rt -----
8707 * rs -----
8708 * rd -----
8709 */
8710 std::string NMD::LHU_16_(uint64 instruction)
8711 {
8712 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8713 uint64 rs3_value = extract_rs3_6_5_4(instruction);
8714 uint64 u_value = extract_u_2_1__s1(instruction);
8715
8716 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8717 std::string u = IMMEDIATE(copy(u_value));
8718 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
8719
8720 return img::format("LHU %s, %s(%s)", rt3, u, rs3);
8721 }
8722
8723
8724 /*
8725 *
8726 *
8727 * 3 2 1
8728 * 10987654321098765432109876543210
8729 * 001000 x1110000101
8730 * rt -----
8731 * rs -----
8732 * rd -----
8733 */
8734 std::string NMD::LHU_GP_(uint64 instruction)
8735 {
8736 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8737 uint64 u_value = extract_u_17_to_1__s1(instruction);
8738
8739 std::string rt = GPR(copy(rt_value));
8740 std::string u = IMMEDIATE(copy(u_value));
8741
8742 return img::format("LHU %s, %s($%d)", rt, u, 28);
8743 }
8744
8745
8746 /*
8747 *
8748 *
8749 * 3 2 1
8750 * 10987654321098765432109876543210
8751 * 001000 x1110000101
8752 * rt -----
8753 * rs -----
8754 * rd -----
8755 */
8756 std::string NMD::LHU_S9_(uint64 instruction)
8757 {
8758 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8759 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8760 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8761
8762 std::string rt = GPR(copy(rt_value));
8763 std::string s = IMMEDIATE(copy(s_value));
8764 std::string rs = GPR(copy(rs_value));
8765
8766 return img::format("LHU %s, %s(%s)", rt, s, rs);
8767 }
8768
8769
8770 /*
8771 *
8772 *
8773 * 3 2 1
8774 * 10987654321098765432109876543210
8775 * 001000 x1110000101
8776 * rt -----
8777 * rs -----
8778 * rd -----
8779 */
8780 std::string NMD::LHU_U12_(uint64 instruction)
8781 {
8782 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8783 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8784 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8785
8786 std::string rt = GPR(copy(rt_value));
8787 std::string u = IMMEDIATE(copy(u_value));
8788 std::string rs = GPR(copy(rs_value));
8789
8790 return img::format("LHU %s, %s(%s)", rt, u, rs);
8791 }
8792
8793
8794 /*
8795 *
8796 *
8797 * 3 2 1
8798 * 10987654321098765432109876543210
8799 * 001000 x1110000101
8800 * rt -----
8801 * rs -----
8802 * rd -----
8803 */
8804 std::string NMD::LHUE(uint64 instruction)
8805 {
8806 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8807 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8808 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8809
8810 std::string rt = GPR(copy(rt_value));
8811 std::string s = IMMEDIATE(copy(s_value));
8812 std::string rs = GPR(copy(rs_value));
8813
8814 return img::format("LHUE %s, %s(%s)", rt, s, rs);
8815 }
8816
8817
8818 /*
8819 *
8820 *
8821 * 3 2 1
8822 * 10987654321098765432109876543210
8823 * 001000 x1110000101
8824 * rt -----
8825 * rs -----
8826 * rd -----
8827 */
8828 std::string NMD::LHUX(uint64 instruction)
8829 {
8830 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8831 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8832 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8833
8834 std::string rd = GPR(copy(rd_value));
8835 std::string rs = GPR(copy(rs_value));
8836 std::string rt = GPR(copy(rt_value));
8837
8838 return img::format("LHUX %s, %s(%s)", rd, rs, rt);
8839 }
8840
8841
8842 /*
8843 *
8844 *
8845 * 3 2 1
8846 * 10987654321098765432109876543210
8847 * 001000 x1110000101
8848 * rt -----
8849 * rs -----
8850 * rd -----
8851 */
8852 std::string NMD::LHUXS(uint64 instruction)
8853 {
8854 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8855 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8856 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8857
8858 std::string rd = GPR(copy(rd_value));
8859 std::string rs = GPR(copy(rs_value));
8860 std::string rt = GPR(copy(rt_value));
8861
8862 return img::format("LHUXS %s, %s(%s)", rd, rs, rt);
8863 }
8864
8865
8866 /*
8867 *
8868 *
8869 * 3 2 1
8870 * 10987654321098765432109876543210
8871 * 001000 x1110000101
8872 * rt -----
8873 * rs -----
8874 * rd -----
8875 */
8876 std::string NMD::LHXS(uint64 instruction)
8877 {
8878 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8879 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8880 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8881
8882 std::string rd = GPR(copy(rd_value));
8883 std::string rs = GPR(copy(rs_value));
8884 std::string rt = GPR(copy(rt_value));
8885
8886 return img::format("LHXS %s, %s(%s)", rd, rs, rt);
8887 }
8888
8889
8890 /*
8891 *
8892 *
8893 * 3 2 1
8894 * 10987654321098765432109876543210
8895 * 001000 x1110000101
8896 * rt -----
8897 * rs -----
8898 * rd -----
8899 */
8900 std::string NMD::LHX(uint64 instruction)
8901 {
8902 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8903 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8904 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8905
8906 std::string rd = GPR(copy(rd_value));
8907 std::string rs = GPR(copy(rs_value));
8908 std::string rt = GPR(copy(rt_value));
8909
8910 return img::format("LHX %s, %s(%s)", rd, rs, rt);
8911 }
8912
8913
8914 /*
8915 *
8916 *
8917 * 3 2 1
8918 * 10987654321098765432109876543210
8919 * 001000 x1110000101
8920 * rt -----
8921 * rs -----
8922 * rd -----
8923 */
8924 std::string NMD::LI_16_(uint64 instruction)
8925 {
8926 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8927 uint64 eu_value = extract_eu_6_5_4_3_2_1_0(instruction);
8928
8929 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
8930 std::string eu = IMMEDIATE(encode_eu_from_s_li16(eu_value));
8931
8932 return img::format("LI %s, %s", rt3, eu);
8933 }
8934
8935
8936 /*
8937 *
8938 *
8939 * 3 2 1
8940 * 10987654321098765432109876543210
8941 * 001000 x1110000101
8942 * rt -----
8943 * rs -----
8944 * rd -----
8945 */
8946 std::string NMD::LI_48_(uint64 instruction)
8947 {
8948 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8949 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8950
8951 std::string rt = GPR(copy(rt_value));
8952 std::string s = IMMEDIATE(copy(s_value));
8953
8954 return img::format("LI %s, %s", rt, s);
8955 }
8956
8957
8958 /*
8959 *
8960 *
8961 * 3 2 1
8962 * 10987654321098765432109876543210
8963 * 001000 x1110000101
8964 * rt -----
8965 * rs -----
8966 * rd -----
8967 */
8968 std::string NMD::LL(uint64 instruction)
8969 {
8970 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8971 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8972 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
8973
8974 std::string rt = GPR(copy(rt_value));
8975 std::string s = IMMEDIATE(copy(s_value));
8976 std::string rs = GPR(copy(rs_value));
8977
8978 return img::format("LL %s, %s(%s)", rt, s, rs);
8979 }
8980
8981
8982 /*
8983 *
8984 *
8985 * 3 2 1
8986 * 10987654321098765432109876543210
8987 * 001000 x1110000101
8988 * rt -----
8989 * rs -----
8990 * rd -----
8991 */
8992 std::string NMD::LLD(uint64 instruction)
8993 {
8994 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8995 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8996 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
8997
8998 std::string rt = GPR(copy(rt_value));
8999 std::string s = IMMEDIATE(copy(s_value));
9000 std::string rs = GPR(copy(rs_value));
9001
9002 return img::format("LLD %s, %s(%s)", rt, s, rs);
9003 }
9004
9005
9006 /*
9007 *
9008 *
9009 * 3 2 1
9010 * 10987654321098765432109876543210
9011 * 001000 x1110000101
9012 * rt -----
9013 * rs -----
9014 * rd -----
9015 */
9016 std::string NMD::LLDP(uint64 instruction)
9017 {
9018 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9019 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9020 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
9021
9022 std::string rt = GPR(copy(rt_value));
9023 std::string ru = GPR(copy(ru_value));
9024 std::string rs = GPR(copy(rs_value));
9025
9026 return img::format("LLDP %s, %s, (%s)", rt, ru, rs);
9027 }
9028
9029
9030 /*
9031 *
9032 *
9033 * 3 2 1
9034 * 10987654321098765432109876543210
9035 * 001000 x1110000101
9036 * rt -----
9037 * rs -----
9038 * rd -----
9039 */
9040 std::string NMD::LLE(uint64 instruction)
9041 {
9042 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9043 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9044 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
9045
9046 std::string rt = GPR(copy(rt_value));
9047 std::string s = IMMEDIATE(copy(s_value));
9048 std::string rs = GPR(copy(rs_value));
9049
9050 return img::format("LLE %s, %s(%s)", rt, s, rs);
9051 }
9052
9053
9054 /*
9055 *
9056 *
9057 * 3 2 1
9058 * 10987654321098765432109876543210
9059 * 001000 x1110000101
9060 * rt -----
9061 * rs -----
9062 * rd -----
9063 */
9064 std::string NMD::LLWP(uint64 instruction)
9065 {
9066 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9067 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9068 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
9069
9070 std::string rt = GPR(copy(rt_value));
9071 std::string ru = GPR(copy(ru_value));
9072 std::string rs = GPR(copy(rs_value));
9073
9074 return img::format("LLWP %s, %s, (%s)", rt, ru, rs);
9075 }
9076
9077
9078 /*
9079 *
9080 *
9081 * 3 2 1
9082 * 10987654321098765432109876543210
9083 * 001000 x1110000101
9084 * rt -----
9085 * rs -----
9086 * rd -----
9087 */
9088 std::string NMD::LLWPE(uint64 instruction)
9089 {
9090 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9091 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9092 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
9093
9094 std::string rt = GPR(copy(rt_value));
9095 std::string ru = GPR(copy(ru_value));
9096 std::string rs = GPR(copy(rs_value));
9097
9098 return img::format("LLWPE %s, %s, (%s)", rt, ru, rs);
9099 }
9100
9101
9102 /*
9103 *
9104 *
9105 * 3 2 1
9106 * 10987654321098765432109876543210
9107 * 001000 x1110000101
9108 * rt -----
9109 * rs -----
9110 * rd -----
9111 */
9112 std::string NMD::LSA(uint64 instruction)
9113 {
9114 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9115 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9116 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9117 uint64 u2_value = extract_u2_10_9(instruction);
9118
9119 std::string rd = GPR(copy(rd_value));
9120 std::string rs = GPR(copy(rs_value));
9121 std::string rt = GPR(copy(rt_value));
9122 std::string u2 = IMMEDIATE(copy(u2_value));
9123
9124 return img::format("LSA %s, %s, %s, %s", rd, rs, rt, u2);
9125 }
9126
9127
9128 /*
9129 *
9130 *
9131 * 3 2 1
9132 * 10987654321098765432109876543210
9133 * 001000 x1110000101
9134 * rt -----
9135 * rs -----
9136 * rd -----
9137 */
9138 std::string NMD::LUI(uint64 instruction)
9139 {
9140 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9141 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
9142
9143 std::string rt = GPR(copy(rt_value));
9144 std::string s = IMMEDIATE(copy(s_value));
9145
9146 return img::format("LUI %s, %%hi(%s)", rt, s);
9147 }
9148
9149
9150 /*
9151 *
9152 *
9153 * 3 2 1
9154 * 10987654321098765432109876543210
9155 * 001000 x1110000101
9156 * rt -----
9157 * rs -----
9158 * rd -----
9159 */
9160 std::string NMD::LW_16_(uint64 instruction)
9161 {
9162 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9163 uint64 rs3_value = extract_rs3_6_5_4(instruction);
9164 uint64 u_value = extract_u_3_2_1_0__s2(instruction);
9165
9166 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
9167 std::string u = IMMEDIATE(copy(u_value));
9168 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
9169
9170 return img::format("LW %s, %s(%s)", rt3, u, rs3);
9171 }
9172
9173
9174 /*
9175 *
9176 *
9177 * 3 2 1
9178 * 10987654321098765432109876543210
9179 * 001000 x1110000101
9180 * rt -----
9181 * rs -----
9182 * rd -----
9183 */
9184 std::string NMD::LW_4X4_(uint64 instruction)
9185 {
9186 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
9187 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
9188 uint64 u_value = extract_u_3_8__s2(instruction);
9189
9190 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
9191 std::string u = IMMEDIATE(copy(u_value));
9192 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
9193
9194 return img::format("LW %s, %s(%s)", rt4, u, rs4);
9195 }
9196
9197
9198 /*
9199 *
9200 *
9201 * 3 2 1
9202 * 10987654321098765432109876543210
9203 * 001000 x1110000101
9204 * rt -----
9205 * rs -----
9206 * rd -----
9207 */
9208 std::string NMD::LW_GP_(uint64 instruction)
9209 {
9210 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9211 uint64 u_value = extract_u_20_to_2__s2(instruction);
9212
9213 std::string rt = GPR(copy(rt_value));
9214 std::string u = IMMEDIATE(copy(u_value));
9215
9216 return img::format("LW %s, %s($%d)", rt, u, 28);
9217 }
9218
9219
9220 /*
9221 *
9222 *
9223 * 3 2 1
9224 * 10987654321098765432109876543210
9225 * 001000 x1110000101
9226 * rt -----
9227 * rs -----
9228 * rd -----
9229 */
9230 std::string NMD::LW_GP16_(uint64 instruction)
9231 {
9232 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9233 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
9234
9235 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
9236 std::string u = IMMEDIATE(copy(u_value));
9237
9238 return img::format("LW %s, %s($%d)", rt3, u, 28);
9239 }
9240
9241
9242 /*
9243 *
9244 *
9245 * 3 2 1
9246 * 10987654321098765432109876543210
9247 * 001000 x1110000101
9248 * rt -----
9249 * rs -----
9250 * rd -----
9251 */
9252 std::string NMD::LW_S9_(uint64 instruction)
9253 {
9254 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9255 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9256 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9257
9258 std::string rt = GPR(copy(rt_value));
9259 std::string s = IMMEDIATE(copy(s_value));
9260 std::string rs = GPR(copy(rs_value));
9261
9262 return img::format("LW %s, %s(%s)", rt, s, rs);
9263 }
9264
9265
9266 /*
9267 *
9268 *
9269 * 3 2 1
9270 * 10987654321098765432109876543210
9271 * 001000 x1110000101
9272 * rt -----
9273 * rs -----
9274 * rd -----
9275 */
9276 std::string NMD::LW_SP_(uint64 instruction)
9277 {
9278 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
9279 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
9280
9281 std::string rt = GPR(copy(rt_value));
9282 std::string u = IMMEDIATE(copy(u_value));
9283
9284 return img::format("LW %s, %s($%d)", rt, u, 29);
9285 }
9286
9287
9288 /*
9289 *
9290 *
9291 * 3 2 1
9292 * 10987654321098765432109876543210
9293 * 001000 x1110000101
9294 * rt -----
9295 * rs -----
9296 * rd -----
9297 */
9298 std::string NMD::LW_U12_(uint64 instruction)
9299 {
9300 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9301 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9302 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9303
9304 std::string rt = GPR(copy(rt_value));
9305 std::string u = IMMEDIATE(copy(u_value));
9306 std::string rs = GPR(copy(rs_value));
9307
9308 return img::format("LW %s, %s(%s)", rt, u, rs);
9309 }
9310
9311
9312 /*
9313 *
9314 *
9315 * 3 2 1
9316 * 10987654321098765432109876543210
9317 * 001000 x1110000101
9318 * rt -----
9319 * rs -----
9320 * rd -----
9321 */
9322 std::string NMD::LWC1_GP_(uint64 instruction)
9323 {
9324 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9325 uint64 u_value = extract_u_17_to_2__s2(instruction);
9326
9327 std::string ft = FPR(copy(ft_value));
9328 std::string u = IMMEDIATE(copy(u_value));
9329
9330 return img::format("LWC1 %s, %s($%d)", ft, u, 28);
9331 }
9332
9333
9334 /*
9335 *
9336 *
9337 * 3 2 1
9338 * 10987654321098765432109876543210
9339 * 001000 x1110000101
9340 * rt -----
9341 * rs -----
9342 * rd -----
9343 */
9344 std::string NMD::LWC1_S9_(uint64 instruction)
9345 {
9346 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9347 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9348 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9349
9350 std::string ft = FPR(copy(ft_value));
9351 std::string s = IMMEDIATE(copy(s_value));
9352 std::string rs = GPR(copy(rs_value));
9353
9354 return img::format("LWC1 %s, %s(%s)", ft, s, rs);
9355 }
9356
9357
9358 /*
9359 *
9360 *
9361 * 3 2 1
9362 * 10987654321098765432109876543210
9363 * 001000 x1110000101
9364 * rt -----
9365 * rs -----
9366 * rd -----
9367 */
9368 std::string NMD::LWC1_U12_(uint64 instruction)
9369 {
9370 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9371 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9372 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9373
9374 std::string ft = FPR(copy(ft_value));
9375 std::string u = IMMEDIATE(copy(u_value));
9376 std::string rs = GPR(copy(rs_value));
9377
9378 return img::format("LWC1 %s, %s(%s)", ft, u, rs);
9379 }
9380
9381
9382 /*
9383 *
9384 *
9385 * 3 2 1
9386 * 10987654321098765432109876543210
9387 * 001000 x1110000101
9388 * rt -----
9389 * rs -----
9390 * rd -----
9391 */
9392 std::string NMD::LWC1X(uint64 instruction)
9393 {
9394 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9395 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9396 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
9397
9398 std::string ft = FPR(copy(ft_value));
9399 std::string rs = GPR(copy(rs_value));
9400 std::string rt = GPR(copy(rt_value));
9401
9402 return img::format("LWC1X %s, %s(%s)", ft, rs, rt);
9403 }
9404
9405
9406 /*
9407 *
9408 *
9409 * 3 2 1
9410 * 10987654321098765432109876543210
9411 * 001000 x1110000101
9412 * rt -----
9413 * rs -----
9414 * rd -----
9415 */
9416 std::string NMD::LWC1XS(uint64 instruction)
9417 {
9418 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9419 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9420 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
9421
9422 std::string ft = FPR(copy(ft_value));
9423 std::string rs = GPR(copy(rs_value));
9424 std::string rt = GPR(copy(rt_value));
9425
9426 return img::format("LWC1XS %s, %s(%s)", ft, rs, rt);
9427 }
9428
9429
9430 /*
9431 *
9432 *
9433 * 3 2 1
9434 * 10987654321098765432109876543210
9435 * 001000 x1110000101
9436 * rt -----
9437 * rs -----
9438 * rd -----
9439 */
9440 std::string NMD::LWC2(uint64 instruction)
9441 {
9442 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
9443 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9444 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9445
9446 std::string ct = CPR(copy(ct_value));
9447 std::string s = IMMEDIATE(copy(s_value));
9448 std::string rs = GPR(copy(rs_value));
9449
9450 return img::format("LWC2 %s, %s(%s)", ct, s, rs);
9451 }
9452
9453
9454 /*
9455 *
9456 *
9457 * 3 2 1
9458 * 10987654321098765432109876543210
9459 * 001000 x1110000101
9460 * rt -----
9461 * rs -----
9462 * rd -----
9463 */
9464 std::string NMD::LWE(uint64 instruction)
9465 {
9466 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9467 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9468 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9469
9470 std::string rt = GPR(copy(rt_value));
9471 std::string s = IMMEDIATE(copy(s_value));
9472 std::string rs = GPR(copy(rs_value));
9473
9474 return img::format("LWE %s, %s(%s)", rt, s, rs);
9475 }
9476
9477
9478 /*
9479 *
9480 *
9481 * 3 2 1
9482 * 10987654321098765432109876543210
9483 * 001000 x1110000101
9484 * rt -----
9485 * rs -----
9486 * rd -----
9487 */
9488 std::string NMD::LWM(uint64 instruction)
9489 {
9490 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9491 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9492 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9493 uint64 count3_value = extract_count3_14_13_12(instruction);
9494
9495 std::string rt = GPR(copy(rt_value));
9496 std::string s = IMMEDIATE(copy(s_value));
9497 std::string rs = GPR(copy(rs_value));
9498 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
9499
9500 return img::format("LWM %s, %s(%s), %s", rt, s, rs, count3);
9501 }
9502
9503
9504 /*
9505 *
9506 *
9507 * 3 2 1
9508 * 10987654321098765432109876543210
9509 * 001000 x1110000101
9510 * rt -----
9511 * rs -----
9512 * rd -----
9513 */
9514 std::string NMD::LWPC_48_(uint64 instruction)
9515 {
9516 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
9517 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
9518
9519 std::string rt = GPR(copy(rt_value));
9520 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
9521
9522 return img::format("LWPC %s, %s", rt, s);
9523 }
9524
9525
9526 /*
9527 *
9528 *
9529 * 3 2 1
9530 * 10987654321098765432109876543210
9531 * 001000 x1110000101
9532 * rt -----
9533 * rs -----
9534 * rd -----
9535 */
9536 std::string NMD::LWU_GP_(uint64 instruction)
9537 {
9538 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9539 uint64 u_value = extract_u_17_to_2__s2(instruction);
9540
9541 std::string rt = GPR(copy(rt_value));
9542 std::string u = IMMEDIATE(copy(u_value));
9543
9544 return img::format("LWU %s, %s($%d)", rt, u, 28);
9545 }
9546
9547
9548 /*
9549 *
9550 *
9551 * 3 2 1
9552 * 10987654321098765432109876543210
9553 * 001000 x1110000101
9554 * rt -----
9555 * rs -----
9556 * rd -----
9557 */
9558 std::string NMD::LWU_S9_(uint64 instruction)
9559 {
9560 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9561 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9562 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9563
9564 std::string rt = GPR(copy(rt_value));
9565 std::string s = IMMEDIATE(copy(s_value));
9566 std::string rs = GPR(copy(rs_value));
9567
9568 return img::format("LWU %s, %s(%s)", rt, s, rs);
9569 }
9570
9571
9572 /*
9573 *
9574 *
9575 * 3 2 1
9576 * 10987654321098765432109876543210
9577 * 001000 x1110000101
9578 * rt -----
9579 * rs -----
9580 * rd -----
9581 */
9582 std::string NMD::LWU_U12_(uint64 instruction)
9583 {
9584 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9585 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9586 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9587
9588 std::string rt = GPR(copy(rt_value));
9589 std::string u = IMMEDIATE(copy(u_value));
9590 std::string rs = GPR(copy(rs_value));
9591
9592 return img::format("LWU %s, %s(%s)", rt, u, rs);
9593 }
9594
9595
9596 /*
9597 *
9598 *
9599 * 3 2 1
9600 * 10987654321098765432109876543210
9601 * 001000 x1110000101
9602 * rt -----
9603 * rs -----
9604 * rd -----
9605 */
9606 std::string NMD::LWUX(uint64 instruction)
9607 {
9608 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9609 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9610 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9611
9612 std::string rd = GPR(copy(rd_value));
9613 std::string rs = GPR(copy(rs_value));
9614 std::string rt = GPR(copy(rt_value));
9615
9616 return img::format("LWUX %s, %s(%s)", rd, rs, rt);
9617 }
9618
9619
9620 /*
9621 *
9622 *
9623 * 3 2 1
9624 * 10987654321098765432109876543210
9625 * 001000 x1110000101
9626 * rt -----
9627 * rs -----
9628 * rd -----
9629 */
9630 std::string NMD::LWUXS(uint64 instruction)
9631 {
9632 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9633 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9634 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9635
9636 std::string rd = GPR(copy(rd_value));
9637 std::string rs = GPR(copy(rs_value));
9638 std::string rt = GPR(copy(rt_value));
9639
9640 return img::format("LWUXS %s, %s(%s)", rd, rs, rt);
9641 }
9642
9643
9644 /*
9645 *
9646 *
9647 * 3 2 1
9648 * 10987654321098765432109876543210
9649 * 001000 x1110000101
9650 * rt -----
9651 * rs -----
9652 * rd -----
9653 */
9654 std::string NMD::LWX(uint64 instruction)
9655 {
9656 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9657 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9658 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9659
9660 std::string rd = GPR(copy(rd_value));
9661 std::string rs = GPR(copy(rs_value));
9662 std::string rt = GPR(copy(rt_value));
9663
9664 return img::format("LWX %s, %s(%s)", rd, rs, rt);
9665 }
9666
9667
9668 /*
9669 *
9670 *
9671 * 3 2 1
9672 * 10987654321098765432109876543210
9673 * 001000 x1110000101
9674 * rt -----
9675 * rs -----
9676 * rd -----
9677 */
9678 std::string NMD::LWXS_16_(uint64 instruction)
9679 {
9680 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9681 uint64 rs3_value = extract_rs3_6_5_4(instruction);
9682 uint64 rd3_value = extract_rd3_3_2_1(instruction);
9683
9684 std::string rd3 = GPR(decode_gpr_gpr3(rd3_value));
9685 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
9686 std::string rt3 = IMMEDIATE(decode_gpr_gpr3(rt3_value));
9687
9688 return img::format("LWXS %s, %s(%s)", rd3, rs3, rt3);
9689 }
9690
9691
9692 /*
9693 *
9694 *
9695 * 3 2 1
9696 * 10987654321098765432109876543210
9697 * 001000 x1110000101
9698 * rt -----
9699 * rs -----
9700 * rd -----
9701 */
9702 std::string NMD::LWXS_32_(uint64 instruction)
9703 {
9704 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9705 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9706 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9707
9708 std::string rd = GPR(copy(rd_value));
9709 std::string rs = GPR(copy(rs_value));
9710 std::string rt = GPR(copy(rt_value));
9711
9712 return img::format("LWXS %s, %s(%s)", rd, rs, rt);
9713 }
9714
9715
9716 /*
9717 * [DSP] MADD ac, rs, rt - Multiply two words and add to the specified
9718 * accumulator
9719 *
9720 * 3 2 1
9721 * 10987654321098765432109876543210
9722 * 001000 x1110000101
9723 * rt -----
9724 * rs -----
9725 * rd -----
9726 */
9727 std::string NMD::MADD_DSP_(uint64 instruction)
9728 {
9729 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9730 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9731 uint64 ac_value = extract_ac_15_14(instruction);
9732
9733 std::string ac = AC(copy(ac_value));
9734 std::string rs = GPR(copy(rs_value));
9735 std::string rt = GPR(copy(rt_value));
9736
9737 return img::format("MADD %s, %s, %s", ac, rs, rt);
9738 }
9739
9740
9741 /*
9742 *
9743 *
9744 * 3 2 1
9745 * 10987654321098765432109876543210
9746 * 001000 x1110000101
9747 * rt -----
9748 * rs -----
9749 * rd -----
9750 */
9751 std::string NMD::MADDF_D(uint64 instruction)
9752 {
9753 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9754 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9755 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9756
9757 std::string fd = FPR(copy(fd_value));
9758 std::string fs = FPR(copy(fs_value));
9759 std::string ft = FPR(copy(ft_value));
9760
9761 return img::format("MADDF.D %s, %s, %s", fd, fs, ft);
9762 }
9763
9764
9765 /*
9766 *
9767 *
9768 * 3 2 1
9769 * 10987654321098765432109876543210
9770 * 001000 x1110000101
9771 * rt -----
9772 * rs -----
9773 * rd -----
9774 */
9775 std::string NMD::MADDF_S(uint64 instruction)
9776 {
9777 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9778 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9779 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9780
9781 std::string fd = FPR(copy(fd_value));
9782 std::string fs = FPR(copy(fs_value));
9783 std::string ft = FPR(copy(ft_value));
9784
9785 return img::format("MADDF.S %s, %s, %s", fd, fs, ft);
9786 }
9787
9788
9789 /*
9790 * [DSP] MADDU ac, rs, rt - Multiply two unsigned words and add to the
9791 * specified accumulator
9792 *
9793 * 3 2 1
9794 * 10987654321098765432109876543210
9795 * 001000 x1110000101
9796 * rt -----
9797 * rs -----
9798 * rd -----
9799 */
9800 std::string NMD::MADDU_DSP_(uint64 instruction)
9801 {
9802 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9803 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9804 uint64 ac_value = extract_ac_15_14(instruction);
9805
9806 std::string ac = AC(copy(ac_value));
9807 std::string rs = GPR(copy(rs_value));
9808 std::string rt = GPR(copy(rt_value));
9809
9810 return img::format("MADDU %s, %s, %s", ac, rs, rt);
9811 }
9812
9813
9814 /*
9815 * [DSP] MAQ_S.W.PHL ac, rs, rt - Multiply the left-most single vector
9816 * fractional halfword elements with accumulation
9817 *
9818 * 3 2 1
9819 * 10987654321098765432109876543210
9820 * 001000 x1110000101
9821 * rt -----
9822 * rs -----
9823 * rd -----
9824 */
9825 std::string NMD::MAQ_S_W_PHL(uint64 instruction)
9826 {
9827 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9828 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9829 uint64 ac_value = extract_ac_15_14(instruction);
9830
9831 std::string ac = AC(copy(ac_value));
9832 std::string rs = GPR(copy(rs_value));
9833 std::string rt = GPR(copy(rt_value));
9834
9835 return img::format("MAQ_S.W.PHL %s, %s, %s", ac, rs, rt);
9836 }
9837
9838
9839 /*
9840 * [DSP] MAQ_S.W.PHR ac, rs, rt - Multiply the right-most single vector
9841 * fractional halfword elements with accumulation
9842 *
9843 * 3 2 1
9844 * 10987654321098765432109876543210
9845 * 001000 x1110000101
9846 * rt -----
9847 * rs -----
9848 * rd -----
9849 */
9850 std::string NMD::MAQ_S_W_PHR(uint64 instruction)
9851 {
9852 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9853 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9854 uint64 ac_value = extract_ac_15_14(instruction);
9855
9856 std::string ac = AC(copy(ac_value));
9857 std::string rs = GPR(copy(rs_value));
9858 std::string rt = GPR(copy(rt_value));
9859
9860 return img::format("MAQ_S.W.PHR %s, %s, %s", ac, rs, rt);
9861 }
9862
9863
9864 /*
9865 * [DSP] MAQ_SA.W.PHL ac, rs, rt - Multiply the left-most single vector
9866 * fractional halfword elements with saturating accumulation
9867 *
9868 * 3 2 1
9869 * 10987654321098765432109876543210
9870 * 001000 x1110000101
9871 * rt -----
9872 * rs -----
9873 * rd -----
9874 */
9875 std::string NMD::MAQ_SA_W_PHL(uint64 instruction)
9876 {
9877 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9878 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9879 uint64 ac_value = extract_ac_15_14(instruction);
9880
9881 std::string ac = AC(copy(ac_value));
9882 std::string rs = GPR(copy(rs_value));
9883 std::string rt = GPR(copy(rt_value));
9884
9885 return img::format("MAQ_SA.W.PHL %s, %s, %s", ac, rs, rt);
9886 }
9887
9888
9889 /*
9890 * [DSP] MAQ_SA.W.PHR ac, rs, rt - Multiply the right-most single vector
9891 * fractional halfword elements with saturating accumulation
9892 *
9893 * 3 2 1
9894 * 10987654321098765432109876543210
9895 * 001000 x1110000101
9896 * rt -----
9897 * rs -----
9898 * rd -----
9899 */
9900 std::string NMD::MAQ_SA_W_PHR(uint64 instruction)
9901 {
9902 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9903 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9904 uint64 ac_value = extract_ac_15_14(instruction);
9905
9906 std::string ac = AC(copy(ac_value));
9907 std::string rs = GPR(copy(rs_value));
9908 std::string rt = GPR(copy(rt_value));
9909
9910 return img::format("MAQ_SA.W.PHR %s, %s, %s", ac, rs, rt);
9911 }
9912
9913
9914 /*
9915 *
9916 *
9917 * 3 2 1
9918 * 10987654321098765432109876543210
9919 * 001000 x1110000101
9920 * rt -----
9921 * rs -----
9922 * rd -----
9923 */
9924 std::string NMD::MAX_D(uint64 instruction)
9925 {
9926 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9927 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9928 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9929
9930 std::string fd = FPR(copy(fd_value));
9931 std::string fs = FPR(copy(fs_value));
9932 std::string ft = FPR(copy(ft_value));
9933
9934 return img::format("MAX.D %s, %s, %s", fd, fs, ft);
9935 }
9936
9937
9938 /*
9939 *
9940 *
9941 * 3 2 1
9942 * 10987654321098765432109876543210
9943 * 001000 x1110000101
9944 * rt -----
9945 * rs -----
9946 * rd -----
9947 */
9948 std::string NMD::MAX_S(uint64 instruction)
9949 {
9950 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9951 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9952 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9953
9954 std::string fd = FPR(copy(fd_value));
9955 std::string fs = FPR(copy(fs_value));
9956 std::string ft = FPR(copy(ft_value));
9957
9958 return img::format("MAX.S %s, %s, %s", fd, fs, ft);
9959 }
9960
9961
9962 /*
9963 *
9964 *
9965 * 3 2 1
9966 * 10987654321098765432109876543210
9967 * 001000 x1110000101
9968 * rt -----
9969 * rs -----
9970 * rd -----
9971 */
9972 std::string NMD::MAXA_D(uint64 instruction)
9973 {
9974 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9975 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9976 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9977
9978 std::string fd = FPR(copy(fd_value));
9979 std::string fs = FPR(copy(fs_value));
9980 std::string ft = FPR(copy(ft_value));
9981
9982 return img::format("MAXA.D %s, %s, %s", fd, fs, ft);
9983 }
9984
9985
9986 /*
9987 *
9988 *
9989 * 3 2 1
9990 * 10987654321098765432109876543210
9991 * 001000 x1110000101
9992 * rt -----
9993 * rs -----
9994 * rd -----
9995 */
9996 std::string NMD::MAXA_S(uint64 instruction)
9997 {
9998 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9999 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10000 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10001
10002 std::string fd = FPR(copy(fd_value));
10003 std::string fs = FPR(copy(fs_value));
10004 std::string ft = FPR(copy(ft_value));
10005
10006 return img::format("MAXA.S %s, %s, %s", fd, fs, ft);
10007 }
10008
10009
10010 /*
10011 *
10012 *
10013 * 3 2 1
10014 * 10987654321098765432109876543210
10015 * 001000 x1110000101
10016 * rt -----
10017 * rs -----
10018 * rd -----
10019 */
10020 std::string NMD::MFC0(uint64 instruction)
10021 {
10022 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10023 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10024 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10025
10026 std::string rt = GPR(copy(rt_value));
10027 std::string c0s = CPR(copy(c0s_value));
10028 std::string sel = IMMEDIATE(copy(sel_value));
10029
10030 return img::format("MFC0 %s, %s, %s", rt, c0s, sel);
10031 }
10032
10033
10034 /*
10035 *
10036 *
10037 * 3 2 1
10038 * 10987654321098765432109876543210
10039 * 001000 x1110000101
10040 * rt -----
10041 * rs -----
10042 * rd -----
10043 */
10044 std::string NMD::MFC1(uint64 instruction)
10045 {
10046 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10047 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10048
10049 std::string rt = GPR(copy(rt_value));
10050 std::string fs = FPR(copy(fs_value));
10051
10052 return img::format("MFC1 %s, %s", rt, fs);
10053 }
10054
10055
10056 /*
10057 *
10058 *
10059 * 3 2 1
10060 * 10987654321098765432109876543210
10061 * 001000 x1110000101
10062 * rt -----
10063 * rs -----
10064 * rd -----
10065 */
10066 std::string NMD::MFC2(uint64 instruction)
10067 {
10068 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10069 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10070
10071 std::string rt = GPR(copy(rt_value));
10072 std::string cs = CPR(copy(cs_value));
10073
10074 return img::format("MFC2 %s, %s", rt, cs);
10075 }
10076
10077
10078 /*
10079 *
10080 *
10081 * 3 2 1
10082 * 10987654321098765432109876543210
10083 * 001000 x1110000101
10084 * rt -----
10085 * rs -----
10086 * rd -----
10087 */
10088 std::string NMD::MFGC0(uint64 instruction)
10089 {
10090 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10091 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10092 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10093
10094 std::string rt = GPR(copy(rt_value));
10095 std::string c0s = CPR(copy(c0s_value));
10096 std::string sel = IMMEDIATE(copy(sel_value));
10097
10098 return img::format("MFGC0 %s, %s, %s", rt, c0s, sel);
10099 }
10100
10101
10102 /*
10103 *
10104 *
10105 * 3 2 1
10106 * 10987654321098765432109876543210
10107 * 001000 x1110000101
10108 * rt -----
10109 * rs -----
10110 * rd -----
10111 */
10112 std::string NMD::MFHC0(uint64 instruction)
10113 {
10114 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10115 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10116 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10117
10118 std::string rt = GPR(copy(rt_value));
10119 std::string c0s = CPR(copy(c0s_value));
10120 std::string sel = IMMEDIATE(copy(sel_value));
10121
10122 return img::format("MFHC0 %s, %s, %s", rt, c0s, sel);
10123 }
10124
10125
10126 /*
10127 *
10128 *
10129 * 3 2 1
10130 * 10987654321098765432109876543210
10131 * 001000 x1110000101
10132 * rt -----
10133 * rs -----
10134 * rd -----
10135 */
10136 std::string NMD::MFHC1(uint64 instruction)
10137 {
10138 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10139 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10140
10141 std::string rt = GPR(copy(rt_value));
10142 std::string fs = FPR(copy(fs_value));
10143
10144 return img::format("MFHC1 %s, %s", rt, fs);
10145 }
10146
10147
10148 /*
10149 *
10150 *
10151 * 3 2 1
10152 * 10987654321098765432109876543210
10153 * 001000 x1110000101
10154 * rt -----
10155 * rs -----
10156 * rd -----
10157 */
10158 std::string NMD::MFHC2(uint64 instruction)
10159 {
10160 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10161 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10162
10163 std::string rt = GPR(copy(rt_value));
10164 std::string cs = CPR(copy(cs_value));
10165
10166 return img::format("MFHC2 %s, %s", rt, cs);
10167 }
10168
10169
10170 /*
10171 *
10172 *
10173 * 3 2 1
10174 * 10987654321098765432109876543210
10175 * 001000 x1110000101
10176 * rt -----
10177 * rs -----
10178 * rd -----
10179 */
10180 std::string NMD::MFHGC0(uint64 instruction)
10181 {
10182 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10183 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10184 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10185
10186 std::string rt = GPR(copy(rt_value));
10187 std::string c0s = CPR(copy(c0s_value));
10188 std::string sel = IMMEDIATE(copy(sel_value));
10189
10190 return img::format("MFHGC0 %s, %s, %s", rt, c0s, sel);
10191 }
10192
10193
10194 /*
10195 * [DSP] MFHI rs, ac - Move from HI register
10196 *
10197 * 3 2 1
10198 * 10987654321098765432109876543210
10199 * 001000 xxxxx 00000001111111
10200 * rt -----
10201 * ac --
10202 */
10203 std::string NMD::MFHI_DSP_(uint64 instruction)
10204 {
10205 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10206 uint64 ac_value = extract_ac_15_14(instruction);
10207
10208 std::string rt = GPR(copy(rt_value));
10209 std::string ac = AC(copy(ac_value));
10210
10211 return img::format("MFHI %s, %s", rt, ac);
10212 }
10213
10214
10215 /*
10216 *
10217 *
10218 * 3 2 1
10219 * 10987654321098765432109876543210
10220 * 001000 x1110000101
10221 * rt -----
10222 * rs -----
10223 * rd -----
10224 */
10225 std::string NMD::MFHTR(uint64 instruction)
10226 {
10227 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10228 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10229 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10230 uint64 u_value = extract_u_10(instruction);
10231
10232 std::string rt = GPR(copy(rt_value));
10233 std::string c0s = IMMEDIATE(copy(c0s_value));
10234 std::string u = IMMEDIATE(copy(u_value));
10235 std::string sel = IMMEDIATE(copy(sel_value));
10236
10237 return img::format("MFHTR %s, %s, %s, %s", rt, c0s, u, sel);
10238 }
10239
10240
10241 /*
10242 * [DSP] MFLO rs, ac - Move from HI register
10243 *
10244 * 3 2 1
10245 * 10987654321098765432109876543210
10246 * 001000 xxxxx 01000001111111
10247 * rt -----
10248 * ac --
10249 */
10250 std::string NMD::MFLO_DSP_(uint64 instruction)
10251 {
10252 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10253 uint64 ac_value = extract_ac_15_14(instruction);
10254
10255 std::string rt = GPR(copy(rt_value));
10256 std::string ac = AC(copy(ac_value));
10257
10258 return img::format("MFLO %s, %s", rt, ac);
10259 }
10260
10261
10262 /*
10263 *
10264 *
10265 * 3 2 1
10266 * 10987654321098765432109876543210
10267 * 001000 x1110000101
10268 * rt -----
10269 * rs -----
10270 * rd -----
10271 */
10272 std::string NMD::MFTR(uint64 instruction)
10273 {
10274 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10275 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10276 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10277 uint64 u_value = extract_u_10(instruction);
10278
10279 std::string rt = GPR(copy(rt_value));
10280 std::string c0s = IMMEDIATE(copy(c0s_value));
10281 std::string u = IMMEDIATE(copy(u_value));
10282 std::string sel = IMMEDIATE(copy(sel_value));
10283
10284 return img::format("MFTR %s, %s, %s, %s", rt, c0s, u, sel);
10285 }
10286
10287
10288 /*
10289 *
10290 *
10291 * 3 2 1
10292 * 10987654321098765432109876543210
10293 * 001000 x1110000101
10294 * rt -----
10295 * rs -----
10296 * rd -----
10297 */
10298 std::string NMD::MIN_D(uint64 instruction)
10299 {
10300 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10301 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10302 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10303
10304 std::string fd = FPR(copy(fd_value));
10305 std::string fs = FPR(copy(fs_value));
10306 std::string ft = FPR(copy(ft_value));
10307
10308 return img::format("MIN.D %s, %s, %s", fd, fs, ft);
10309 }
10310
10311
10312 /*
10313 *
10314 *
10315 * 3 2 1
10316 * 10987654321098765432109876543210
10317 * 001000 x1110000101
10318 * rt -----
10319 * rs -----
10320 * rd -----
10321 */
10322 std::string NMD::MIN_S(uint64 instruction)
10323 {
10324 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10325 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10326 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10327
10328 std::string fd = FPR(copy(fd_value));
10329 std::string fs = FPR(copy(fs_value));
10330 std::string ft = FPR(copy(ft_value));
10331
10332 return img::format("MIN.S %s, %s, %s", fd, fs, ft);
10333 }
10334
10335
10336 /*
10337 *
10338 *
10339 * 3 2 1
10340 * 10987654321098765432109876543210
10341 * 001000 x1110000101
10342 * rt -----
10343 * rs -----
10344 * rd -----
10345 */
10346 std::string NMD::MINA_D(uint64 instruction)
10347 {
10348 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10349 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10350 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10351
10352 std::string fd = FPR(copy(fd_value));
10353 std::string fs = FPR(copy(fs_value));
10354 std::string ft = FPR(copy(ft_value));
10355
10356 return img::format("MINA.D %s, %s, %s", fd, fs, ft);
10357 }
10358
10359
10360 /*
10361 *
10362 *
10363 * 3 2 1
10364 * 10987654321098765432109876543210
10365 * 001000 x1110000101
10366 * rt -----
10367 * rs -----
10368 * rd -----
10369 */
10370 std::string NMD::MINA_S(uint64 instruction)
10371 {
10372 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10373 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10374 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10375
10376 std::string fd = FPR(copy(fd_value));
10377 std::string fs = FPR(copy(fs_value));
10378 std::string ft = FPR(copy(ft_value));
10379
10380 return img::format("MINA.S %s, %s, %s", fd, fs, ft);
10381 }
10382
10383
10384 /*
10385 *
10386 *
10387 * 3 2 1
10388 * 10987654321098765432109876543210
10389 * 001000 x1110000101
10390 * rt -----
10391 * rs -----
10392 * rd -----
10393 */
10394 std::string NMD::MOD(uint64 instruction)
10395 {
10396 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10397 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10398 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10399
10400 std::string rd = GPR(copy(rd_value));
10401 std::string rs = GPR(copy(rs_value));
10402 std::string rt = GPR(copy(rt_value));
10403
10404 return img::format("MOD %s, %s, %s", rd, rs, rt);
10405 }
10406
10407
10408 /*
10409 * [DSP] MODSUB rd, rs, rt - Modular subtraction on an index value
10410 *
10411 * 3 2 1
10412 * 10987654321098765432109876543210
10413 * 001000 x1110000101
10414 * rt -----
10415 * rs -----
10416 * rd -----
10417 */
10418 std::string NMD::MODSUB(uint64 instruction)
10419 {
10420 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10421 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10422 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10423
10424 std::string rd = GPR(copy(rd_value));
10425 std::string rs = GPR(copy(rs_value));
10426 std::string rt = GPR(copy(rt_value));
10427
10428 return img::format("MODSUB %s, %s, %s", rd, rs, rt);
10429 }
10430
10431
10432 /*
10433 *
10434 *
10435 * 3 2 1
10436 * 10987654321098765432109876543210
10437 * 001000 x1010010101
10438 * rt -----
10439 * rs -----
10440 * rd -----
10441 */
10442 std::string NMD::MODU(uint64 instruction)
10443 {
10444 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10445 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10446 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10447
10448 std::string rd = GPR(copy(rd_value));
10449 std::string rs = GPR(copy(rs_value));
10450 std::string rt = GPR(copy(rt_value));
10451
10452 return img::format("MODU %s, %s, %s", rd, rs, rt);
10453 }
10454
10455
10456 /*
10457 *
10458 *
10459 * 3 2 1
10460 * 10987654321098765432109876543210
10461 * 001000 x1110000101
10462 * rt -----
10463 * rs -----
10464 * rd -----
10465 */
10466 std::string NMD::MOV_D(uint64 instruction)
10467 {
10468 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10469 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10470
10471 std::string ft = FPR(copy(ft_value));
10472 std::string fs = FPR(copy(fs_value));
10473
10474 return img::format("MOV.D %s, %s", ft, fs);
10475 }
10476
10477
10478 /*
10479 *
10480 *
10481 * 3 2 1
10482 * 10987654321098765432109876543210
10483 * 001000 x1110000101
10484 * rt -----
10485 * rs -----
10486 * rd -----
10487 */
10488 std::string NMD::MOV_S(uint64 instruction)
10489 {
10490 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10491 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10492
10493 std::string ft = FPR(copy(ft_value));
10494 std::string fs = FPR(copy(fs_value));
10495
10496 return img::format("MOV.S %s, %s", ft, fs);
10497 }
10498
10499
10500 /*
10501 *
10502 *
10503 * 3 2 1
10504 * 10987654321098765432109876543210
10505 * 001000 x1110000101
10506 * rt -----
10507 * rs -----
10508 * rd -----
10509 */
10510 std::string NMD::MOVE_BALC(uint64 instruction)
10511 {
10512 uint64 rtz4_value = extract_rtz4_27_26_25_23_22_21(instruction);
10513 uint64 rd1_value = extract_rdl_25_24(instruction);
10514 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
10515
10516 std::string rd1 = GPR(decode_gpr_gpr1(rd1_value));
10517 std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
10518 std::string s = ADDRESS(encode_s_from_address(s_value), 4);
10519
10520 return img::format("MOVE.BALC %s, %s, %s", rd1, rtz4, s);
10521 }
10522
10523
10524 /*
10525 *
10526 *
10527 * 3 2 1
10528 * 10987654321098765432109876543210
10529 * 001000 x1110000101
10530 * rt -----
10531 * rs -----
10532 * rd -----
10533 */
10534 std::string NMD::MOVEP(uint64 instruction)
10535 {
10536 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
10537 uint64 rd2_value = extract_rd2_3_8(instruction);
10538 uint64 rsz4_value = extract_rsz4_4_2_1_0(instruction);
10539
10540 std::string rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value));
10541 std::string re2 = GPR(decode_gpr_gpr2_reg2(rd2_value));
10542 /* !!!!!!!!!! - no conversion function */
10543 std::string rsz4 = GPR(decode_gpr_gpr4_zero(rsz4_value));
10544 std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
10545
10546 return img::format("MOVEP %s, %s, %s, %s", rd2, re2, rsz4, rtz4);
10547 /* hand edited */
10548 }
10549
10550
10551 /*
10552 *
10553 *
10554 * 3 2 1
10555 * 10987654321098765432109876543210
10556 * 001000 x1110000101
10557 * rt -----
10558 * rs -----
10559 * rd -----
10560 */
10561 std::string NMD::MOVEP_REV_(uint64 instruction)
10562 {
10563 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
10564 uint64 rd2_value = extract_rd2_3_8(instruction);
10565 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
10566
10567 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
10568 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
10569 std::string rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value));
10570 std::string rs2 = GPR(decode_gpr_gpr2_reg2(rd2_value));
10571 /* !!!!!!!!!! - no conversion function */
10572
10573 return img::format("MOVEP %s, %s, %s, %s", rs4, rt4, rd2, rs2);
10574 /* hand edited */
10575 }
10576
10577
10578 /*
10579 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10580 *
10581 * 3 2 1
10582 * 10987654321098765432109876543210
10583 * 001000 00010001101
10584 * rt -----
10585 * rs -----
10586 * rd -----
10587 */
10588 std::string NMD::MOVE(uint64 instruction)
10589 {
10590 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
10591 uint64 rs_value = extract_rs_4_3_2_1_0(instruction);
10592
10593 std::string rt = GPR(copy(rt_value));
10594 std::string rs = GPR(copy(rs_value));
10595
10596 return img::format("MOVE %s, %s", rt, rs);
10597 }
10598
10599
10600 /*
10601 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10602 *
10603 * 3 2 1
10604 * 10987654321098765432109876543210
10605 * 001000 00010001101
10606 * rt -----
10607 * rs -----
10608 * rd -----
10609 */
10610 std::string NMD::MOVN(uint64 instruction)
10611 {
10612 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10613 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10614 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10615
10616 std::string rd = GPR(copy(rd_value));
10617 std::string rs = GPR(copy(rs_value));
10618 std::string rt = GPR(copy(rt_value));
10619
10620 return img::format("MOVN %s, %s, %s", rd, rs, rt);
10621 }
10622
10623
10624 /*
10625 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10626 *
10627 * 3 2 1
10628 * 10987654321098765432109876543210
10629 * 001000 00010001101
10630 * rt -----
10631 * rs -----
10632 * rd -----
10633 */
10634 std::string NMD::MOVZ(uint64 instruction)
10635 {
10636 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10637 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10638 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10639
10640 std::string rd = GPR(copy(rd_value));
10641 std::string rs = GPR(copy(rs_value));
10642 std::string rt = GPR(copy(rt_value));
10643
10644 return img::format("MOVZ %s, %s, %s", rd, rs, rt);
10645 }
10646
10647
10648 /*
10649 * [DSP] MSUB ac, rs, rt - Multiply word and subtract from accumulator
10650 *
10651 * 3 2 1
10652 * 10987654321098765432109876543210
10653 * 001000 10101010111111
10654 * rt -----
10655 * rs -----
10656 * ac --
10657 */
10658 std::string NMD::MSUB_DSP_(uint64 instruction)
10659 {
10660 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10661 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10662 uint64 ac_value = extract_ac_15_14(instruction);
10663
10664 std::string ac = AC(copy(ac_value));
10665 std::string rs = GPR(copy(rs_value));
10666 std::string rt = GPR(copy(rt_value));
10667
10668 return img::format("MSUB %s, %s, %s", ac, rs, rt);
10669 }
10670
10671
10672 /*
10673 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10674 *
10675 * 3 2 1
10676 * 10987654321098765432109876543210
10677 * 001000 00010001101
10678 * rt -----
10679 * rs -----
10680 * rd -----
10681 */
10682 std::string NMD::MSUBF_D(uint64 instruction)
10683 {
10684 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10685 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10686 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10687
10688 std::string fd = FPR(copy(fd_value));
10689 std::string fs = FPR(copy(fs_value));
10690 std::string ft = FPR(copy(ft_value));
10691
10692 return img::format("MSUBF.D %s, %s, %s", fd, fs, ft);
10693 }
10694
10695
10696 /*
10697 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10698 *
10699 * 3 2 1
10700 * 10987654321098765432109876543210
10701 * 001000 00010001101
10702 * rt -----
10703 * rs -----
10704 * rd -----
10705 */
10706 std::string NMD::MSUBF_S(uint64 instruction)
10707 {
10708 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10709 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10710 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10711
10712 std::string fd = FPR(copy(fd_value));
10713 std::string fs = FPR(copy(fs_value));
10714 std::string ft = FPR(copy(ft_value));
10715
10716 return img::format("MSUBF.S %s, %s, %s", fd, fs, ft);
10717 }
10718
10719
10720 /*
10721 * [DSP] MSUBU ac, rs, rt - Multiply word and add to accumulator
10722 *
10723 * 3 2 1
10724 * 10987654321098765432109876543210
10725 * 001000 11101010111111
10726 * rt -----
10727 * rs -----
10728 * ac --
10729 */
10730 std::string NMD::MSUBU_DSP_(uint64 instruction)
10731 {
10732 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10733 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10734 uint64 ac_value = extract_ac_15_14(instruction);
10735
10736 std::string ac = AC(copy(ac_value));
10737 std::string rs = GPR(copy(rs_value));
10738 std::string rt = GPR(copy(rt_value));
10739
10740 return img::format("MSUBU %s, %s, %s", ac, rs, rt);
10741 }
10742
10743
10744 /*
10745 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10746 *
10747 * 3 2 1
10748 * 10987654321098765432109876543210
10749 * 001000 00010001101
10750 * rt -----
10751 * rs -----
10752 * rd -----
10753 */
10754 std::string NMD::MTC0(uint64 instruction)
10755 {
10756 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10757 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10758 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10759
10760 std::string rt = GPR(copy(rt_value));
10761 std::string c0s = CPR(copy(c0s_value));
10762 std::string sel = IMMEDIATE(copy(sel_value));
10763
10764 return img::format("MTC0 %s, %s, %s", rt, c0s, sel);
10765 }
10766
10767
10768 /*
10769 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10770 *
10771 * 3 2 1
10772 * 10987654321098765432109876543210
10773 * 001000 00010001101
10774 * rt -----
10775 * rs -----
10776 * rd -----
10777 */
10778 std::string NMD::MTC1(uint64 instruction)
10779 {
10780 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10781 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10782
10783 std::string rt = GPR(copy(rt_value));
10784 std::string fs = FPR(copy(fs_value));
10785
10786 return img::format("MTC1 %s, %s", rt, fs);
10787 }
10788
10789
10790 /*
10791 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10792 *
10793 * 3 2 1
10794 * 10987654321098765432109876543210
10795 * 001000 00010001101
10796 * rt -----
10797 * rs -----
10798 * rd -----
10799 */
10800 std::string NMD::MTC2(uint64 instruction)
10801 {
10802 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10803 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10804
10805 std::string rt = GPR(copy(rt_value));
10806 std::string cs = CPR(copy(cs_value));
10807
10808 return img::format("MTC2 %s, %s", rt, cs);
10809 }
10810
10811
10812 /*
10813 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10814 *
10815 * 3 2 1
10816 * 10987654321098765432109876543210
10817 * 001000 00010001101
10818 * rt -----
10819 * rs -----
10820 * rd -----
10821 */
10822 std::string NMD::MTGC0(uint64 instruction)
10823 {
10824 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10825 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10826 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10827
10828 std::string rt = GPR(copy(rt_value));
10829 std::string c0s = CPR(copy(c0s_value));
10830 std::string sel = IMMEDIATE(copy(sel_value));
10831
10832 return img::format("MTGC0 %s, %s, %s", rt, c0s, sel);
10833 }
10834
10835
10836 /*
10837 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10838 *
10839 * 3 2 1
10840 * 10987654321098765432109876543210
10841 * 001000 00010001101
10842 * rt -----
10843 * rs -----
10844 * rd -----
10845 */
10846 std::string NMD::MTHC0(uint64 instruction)
10847 {
10848 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10849 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10850 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10851
10852 std::string rt = GPR(copy(rt_value));
10853 std::string c0s = CPR(copy(c0s_value));
10854 std::string sel = IMMEDIATE(copy(sel_value));
10855
10856 return img::format("MTHC0 %s, %s, %s", rt, c0s, sel);
10857 }
10858
10859
10860 /*
10861 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10862 *
10863 * 3 2 1
10864 * 10987654321098765432109876543210
10865 * 001000 00010001101
10866 * rt -----
10867 * rs -----
10868 * rd -----
10869 */
10870 std::string NMD::MTHC1(uint64 instruction)
10871 {
10872 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10873 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10874
10875 std::string rt = GPR(copy(rt_value));
10876 std::string fs = FPR(copy(fs_value));
10877
10878 return img::format("MTHC1 %s, %s", rt, fs);
10879 }
10880
10881
10882 /*
10883 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10884 *
10885 * 3 2 1
10886 * 10987654321098765432109876543210
10887 * 001000 00010001101
10888 * rt -----
10889 * rs -----
10890 * rd -----
10891 */
10892 std::string NMD::MTHC2(uint64 instruction)
10893 {
10894 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10895 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10896
10897 std::string rt = GPR(copy(rt_value));
10898 std::string cs = CPR(copy(cs_value));
10899
10900 return img::format("MTHC2 %s, %s", rt, cs);
10901 }
10902
10903
10904 /*
10905 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10906 *
10907 * 3 2 1
10908 * 10987654321098765432109876543210
10909 * 001000 00010001101
10910 * rt -----
10911 * rs -----
10912 * rd -----
10913 */
10914 std::string NMD::MTHGC0(uint64 instruction)
10915 {
10916 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10917 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10918 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10919
10920 std::string rt = GPR(copy(rt_value));
10921 std::string c0s = CPR(copy(c0s_value));
10922 std::string sel = IMMEDIATE(copy(sel_value));
10923
10924 return img::format("MTHGC0 %s, %s, %s", rt, c0s, sel);
10925 }
10926
10927
10928 /*
10929 * [DSP] MTHI rs, ac - Move to HI register
10930 *
10931 * 3 2 1
10932 * 10987654321098765432109876543210
10933 * 001000xxxxx 10000001111111
10934 * rs -----
10935 * ac --
10936 */
10937 std::string NMD::MTHI_DSP_(uint64 instruction)
10938 {
10939 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10940 uint64 ac_value = extract_ac_15_14(instruction);
10941
10942 std::string rs = GPR(copy(rs_value));
10943 std::string ac = AC(copy(ac_value));
10944
10945 return img::format("MTHI %s, %s", rs, ac);
10946 }
10947
10948
10949 /*
10950 * [DSP] MTHLIP rs, ac - Copy LO to HI and a GPR to LO and increment pos by 32
10951 *
10952 * 3 2 1
10953 * 10987654321098765432109876543210
10954 * 001000xxxxx 00001001111111
10955 * rs -----
10956 * ac --
10957 */
10958 std::string NMD::MTHLIP(uint64 instruction)
10959 {
10960 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10961 uint64 ac_value = extract_ac_15_14(instruction);
10962
10963 std::string rs = GPR(copy(rs_value));
10964 std::string ac = AC(copy(ac_value));
10965
10966 return img::format("MTHLIP %s, %s", rs, ac);
10967 }
10968
10969
10970 /*
10971 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10972 *
10973 * 3 2 1
10974 * 10987654321098765432109876543210
10975 * 001000 00010001101
10976 * rt -----
10977 * rs -----
10978 * rd -----
10979 */
10980 std::string NMD::MTHTR(uint64 instruction)
10981 {
10982 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10983 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10984 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10985 uint64 u_value = extract_u_10(instruction);
10986
10987 std::string rt = GPR(copy(rt_value));
10988 std::string c0s = IMMEDIATE(copy(c0s_value));
10989 std::string u = IMMEDIATE(copy(u_value));
10990 std::string sel = IMMEDIATE(copy(sel_value));
10991
10992 return img::format("MTHTR %s, %s, %s, %s", rt, c0s, u, sel);
10993 }
10994
10995
10996 /*
10997 * [DSP] MTLO rs, ac - Move to LO register
10998 *
10999 * 3 2 1
11000 * 10987654321098765432109876543210
11001 * 001000xxxxx 11000001111111
11002 * rs -----
11003 * ac --
11004 */
11005 std::string NMD::MTLO_DSP_(uint64 instruction)
11006 {
11007 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11008 uint64 ac_value = extract_ac_15_14(instruction);
11009
11010 std::string rs = GPR(copy(rs_value));
11011 std::string ac = AC(copy(ac_value));
11012
11013 return img::format("MTLO %s, %s", rs, ac);
11014 }
11015
11016
11017 /*
11018 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11019 *
11020 * 3 2 1
11021 * 10987654321098765432109876543210
11022 * 001000 00010001101
11023 * rt -----
11024 * rs -----
11025 * rd -----
11026 */
11027 std::string NMD::MTTR(uint64 instruction)
11028 {
11029 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11030 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
11031 uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
11032 uint64 u_value = extract_u_10(instruction);
11033
11034 std::string rt = GPR(copy(rt_value));
11035 std::string c0s = IMMEDIATE(copy(c0s_value));
11036 std::string u = IMMEDIATE(copy(u_value));
11037 std::string sel = IMMEDIATE(copy(sel_value));
11038
11039 return img::format("MTTR %s, %s, %s, %s", rt, c0s, u, sel);
11040 }
11041
11042
11043 /*
11044 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11045 *
11046 * 3 2 1
11047 * 10987654321098765432109876543210
11048 * 001000 00010001101
11049 * rt -----
11050 * rs -----
11051 * rd -----
11052 */
11053 std::string NMD::MUH(uint64 instruction)
11054 {
11055 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11056 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11057 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11058
11059 std::string rd = GPR(copy(rd_value));
11060 std::string rs = GPR(copy(rs_value));
11061 std::string rt = GPR(copy(rt_value));
11062
11063 return img::format("MUH %s, %s, %s", rd, rs, rt);
11064 }
11065
11066
11067 /*
11068 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11069 *
11070 * 3 2 1
11071 * 10987654321098765432109876543210
11072 * 001000 00010001101
11073 * rt -----
11074 * rs -----
11075 * rd -----
11076 */
11077 std::string NMD::MUHU(uint64 instruction)
11078 {
11079 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11080 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11081 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11082
11083 std::string rd = GPR(copy(rd_value));
11084 std::string rs = GPR(copy(rs_value));
11085 std::string rt = GPR(copy(rt_value));
11086
11087 return img::format("MUHU %s, %s, %s", rd, rs, rt);
11088 }
11089
11090
11091 /*
11092 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11093 *
11094 * 3 2 1
11095 * 10987654321098765432109876543210
11096 * 001000 00010001101
11097 * rt -----
11098 * rs -----
11099 * rd -----
11100 */
11101 std::string NMD::MUL_32_(uint64 instruction)
11102 {
11103 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11104 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11105 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11106
11107 std::string rd = GPR(copy(rd_value));
11108 std::string rs = GPR(copy(rs_value));
11109 std::string rt = GPR(copy(rt_value));
11110
11111 return img::format("MUL %s, %s, %s", rd, rs, rt);
11112 }
11113
11114
11115 /*
11116 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11117 *
11118 * 3 2 1
11119 * 10987654321098765432109876543210
11120 * 001000 00010001101
11121 * rt -----
11122 * rs -----
11123 * rd -----
11124 */
11125 std::string NMD::MUL_4X4_(uint64 instruction)
11126 {
11127 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
11128 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
11129
11130 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
11131 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
11132
11133 return img::format("MUL %s, %s", rs4, rt4);
11134 }
11135
11136
11137 /*
11138 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11139 *
11140 * 3 2 1
11141 * 10987654321098765432109876543210
11142 * 001000 00010001101
11143 * rt -----
11144 * rs -----
11145 * rd -----
11146 */
11147 std::string NMD::MUL_D(uint64 instruction)
11148 {
11149 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11150 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11151 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
11152
11153 std::string fd = FPR(copy(fd_value));
11154 std::string fs = FPR(copy(fs_value));
11155 std::string ft = FPR(copy(ft_value));
11156
11157 return img::format("MUL.D %s, %s, %s", fd, fs, ft);
11158 }
11159
11160
11161 /*
11162 * [DSP] MUL.PH rd, rs, rt - Multiply vector integer half words to same size
11163 * products
11164 *
11165 * 3 2 1
11166 * 10987654321098765432109876543210
11167 * 001000 00000101101
11168 * rt -----
11169 * rs -----
11170 * rd -----
11171 */
11172 std::string NMD::MUL_PH(uint64 instruction)
11173 {
11174 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11175 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11176 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11177
11178 std::string rd = GPR(copy(rd_value));
11179 std::string rs = GPR(copy(rs_value));
11180 std::string rt = GPR(copy(rt_value));
11181
11182 return img::format("MUL.PH %s, %s, %s", rd, rs, rt);
11183 }
11184
11185
11186 /*
11187 * [DSP] MUL_S.PH rd, rs, rt - Multiply vector integer half words to same size
11188 * products (saturated)
11189 *
11190 * 3 2 1
11191 * 10987654321098765432109876543210
11192 * 001000 10000101101
11193 * rt -----
11194 * rs -----
11195 * rd -----
11196 */
11197 std::string NMD::MUL_S_PH(uint64 instruction)
11198 {
11199 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11200 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11201 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11202
11203 std::string rd = GPR(copy(rd_value));
11204 std::string rs = GPR(copy(rs_value));
11205 std::string rt = GPR(copy(rt_value));
11206
11207 return img::format("MUL_S.PH %s, %s, %s", rd, rs, rt);
11208 }
11209
11210
11211 /*
11212 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11213 *
11214 * 3 2 1
11215 * 10987654321098765432109876543210
11216 * 001000 00010001101
11217 * rt -----
11218 * rs -----
11219 * rd -----
11220 */
11221 std::string NMD::MUL_S(uint64 instruction)
11222 {
11223 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11224 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11225 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
11226
11227 std::string fd = FPR(copy(fd_value));
11228 std::string fs = FPR(copy(fs_value));
11229 std::string ft = FPR(copy(ft_value));
11230
11231 return img::format("MUL.S %s, %s, %s", fd, fs, ft);
11232 }
11233
11234
11235 /*
11236 * [DSP] MULEQ_S.W.PHL rd, rs, rt - Multiply vector fractional left halfwords
11237 * to expanded width products
11238 *
11239 * 3 2 1
11240 * 10987654321098765432109876543210
11241 * 001000 x0000100101
11242 * rt -----
11243 * rs -----
11244 * rd -----
11245 */
11246 std::string NMD::MULEQ_S_W_PHL(uint64 instruction)
11247 {
11248 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11249 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11250 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11251
11252 std::string rd = GPR(copy(rd_value));
11253 std::string rs = GPR(copy(rs_value));
11254 std::string rt = GPR(copy(rt_value));
11255
11256 return img::format("MULEQ_S.W.PHL %s, %s, %s", rd, rs, rt);
11257 }
11258
11259
11260 /*
11261 * [DSP] MULEQ_S.W.PHR rd, rs, rt - Multiply vector fractional right halfwords
11262 * to expanded width products
11263 *
11264 * 3 2 1
11265 * 10987654321098765432109876543210
11266 * 001000 x0001100101
11267 * rt -----
11268 * rs -----
11269 * rd -----
11270 */
11271 std::string NMD::MULEQ_S_W_PHR(uint64 instruction)
11272 {
11273 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11274 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11275 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11276
11277 std::string rd = GPR(copy(rd_value));
11278 std::string rs = GPR(copy(rs_value));
11279 std::string rt = GPR(copy(rt_value));
11280
11281 return img::format("MULEQ_S.W.PHR %s, %s, %s", rd, rs, rt);
11282 }
11283
11284
11285 /*
11286 * [DSP] MULEU_S.PH.QBL rd, rs, rt - Multiply vector fractional left bytes
11287 * by halfwords to halfword products
11288 *
11289 * 3 2 1
11290 * 10987654321098765432109876543210
11291 * 001000 x0010010101
11292 * rt -----
11293 * rs -----
11294 * rd -----
11295 */
11296 std::string NMD::MULEU_S_PH_QBL(uint64 instruction)
11297 {
11298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11299 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11300 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11301
11302 std::string rd = GPR(copy(rd_value));
11303 std::string rs = GPR(copy(rs_value));
11304 std::string rt = GPR(copy(rt_value));
11305
11306 return img::format("MULEU_S.PH.QBL %s, %s, %s", rd, rs, rt);
11307 }
11308
11309
11310 /*
11311 * [DSP] MULEU_S.PH.QBR rd, rs, rt - Multiply vector fractional right bytes
11312 * by halfwords to halfword products
11313 *
11314 * 3 2 1
11315 * 10987654321098765432109876543210
11316 * 001000 x0011010101
11317 * rt -----
11318 * rs -----
11319 * rd -----
11320 */
11321 std::string NMD::MULEU_S_PH_QBR(uint64 instruction)
11322 {
11323 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11324 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11325 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11326
11327 std::string rd = GPR(copy(rd_value));
11328 std::string rs = GPR(copy(rs_value));
11329 std::string rt = GPR(copy(rt_value));
11330
11331 return img::format("MULEU_S.PH.QBR %s, %s, %s", rd, rs, rt);
11332 }
11333
11334
11335 /*
11336 * [DSP] MULQ_RS.PH rd, rs, rt - Multiply vector fractional halfwords
11337 * to fractional halfword products
11338 *
11339 * 3 2 1
11340 * 10987654321098765432109876543210
11341 * 001000 x0100010101
11342 * rt -----
11343 * rs -----
11344 * rd -----
11345 */
11346 std::string NMD::MULQ_RS_PH(uint64 instruction)
11347 {
11348 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11349 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11350 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11351
11352 std::string rd = GPR(copy(rd_value));
11353 std::string rs = GPR(copy(rs_value));
11354 std::string rt = GPR(copy(rt_value));
11355
11356 return img::format("MULQ_RS.PH %s, %s, %s", rd, rs, rt);
11357 }
11358
11359
11360 /*
11361 * [DSP] MULQ_RS.W rd, rs, rt - Multiply fractional words to same size
11362 * product with saturation and rounding
11363 *
11364 * 3 2 1
11365 * 10987654321098765432109876543210
11366 * 001000 x0110010101
11367 * rt -----
11368 * rs -----
11369 * rd -----
11370 */
11371 std::string NMD::MULQ_RS_W(uint64 instruction)
11372 {
11373 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11374 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11375 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11376
11377 std::string rd = GPR(copy(rd_value));
11378 std::string rs = GPR(copy(rs_value));
11379 std::string rt = GPR(copy(rt_value));
11380
11381 return img::format("MULQ_RS.W %s, %s, %s", rd, rs, rt);
11382 }
11383
11384
11385 /*
11386 * [DSP] MULQ_S.PH rd, rs, rt - Multiply fractional halfwords to same size
11387 * products
11388 *
11389 * 3 2 1
11390 * 10987654321098765432109876543210
11391 * 001000 x0101010101
11392 * rt -----
11393 * rs -----
11394 * rd -----
11395 */
11396 std::string NMD::MULQ_S_PH(uint64 instruction)
11397 {
11398 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11399 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11400 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11401
11402 std::string rd = GPR(copy(rd_value));
11403 std::string rs = GPR(copy(rs_value));
11404 std::string rt = GPR(copy(rt_value));
11405
11406 return img::format("MULQ_S.PH %s, %s, %s", rd, rs, rt);
11407 }
11408
11409
11410 /*
11411 * [DSP] MULQ_S.W rd, rs, rt - Multiply fractional words to same size product
11412 * with saturation
11413 *
11414 * 3 2 1
11415 * 10987654321098765432109876543210
11416 * 001000 x0111010101
11417 * rt -----
11418 * rs -----
11419 * rd -----
11420 */
11421 std::string NMD::MULQ_S_W(uint64 instruction)
11422 {
11423 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11424 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11425 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11426
11427 std::string rd = GPR(copy(rd_value));
11428 std::string rs = GPR(copy(rs_value));
11429 std::string rt = GPR(copy(rt_value));
11430
11431 return img::format("MULQ_S.W %s, %s, %s", rd, rs, rt);
11432 }
11433
11434
11435 /*
11436 * [DSP] MULSA.W.PH ac, rs, rt - Multiply and subtract vector integer halfword
11437 * elements and accumulate
11438 *
11439 * 3 2 1
11440 * 10987654321098765432109876543210
11441 * 001000 10110010111111
11442 * rt -----
11443 * rs -----
11444 * ac --
11445 */
11446 std::string NMD::MULSA_W_PH(uint64 instruction)
11447 {
11448 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11449 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11450 uint64 ac_value = extract_ac_15_14(instruction);
11451
11452 std::string ac = AC(copy(ac_value));
11453 std::string rs = GPR(copy(rs_value));
11454 std::string rt = GPR(copy(rt_value));
11455
11456 return img::format("MULSA.W.PH %s, %s, %s", ac, rs, rt);
11457 }
11458
11459
11460 /*
11461 * [DSP] MULSAQ_S.W.PH ac, rs, rt - Multiply and subtract vector fractional
11462 * halfwords and accumulate
11463 *
11464 * 3 2 1
11465 * 10987654321098765432109876543210
11466 * 001000 11110010111111
11467 * rt -----
11468 * rs -----
11469 * ac --
11470 */
11471 std::string NMD::MULSAQ_S_W_PH(uint64 instruction)
11472 {
11473 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11474 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11475 uint64 ac_value = extract_ac_15_14(instruction);
11476
11477 std::string ac = AC(copy(ac_value));
11478 std::string rs = GPR(copy(rs_value));
11479 std::string rt = GPR(copy(rt_value));
11480
11481 return img::format("MULSAQ_S.W.PH %s, %s, %s", ac, rs, rt);
11482 }
11483
11484
11485 /*
11486 * [DSP] MULT ac, rs, rt - Multiply word
11487 *
11488 * 3 2 1
11489 * 10987654321098765432109876543210
11490 * 001000 00110010111111
11491 * rt -----
11492 * rs -----
11493 * ac --
11494 */
11495 std::string NMD::MULT_DSP_(uint64 instruction)
11496 {
11497 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11498 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11499 uint64 ac_value = extract_ac_15_14(instruction);
11500
11501 std::string ac = AC(copy(ac_value));
11502 std::string rs = GPR(copy(rs_value));
11503 std::string rt = GPR(copy(rt_value));
11504
11505 return img::format("MULT %s, %s, %s", ac, rs, rt);
11506 }
11507
11508
11509 /*
11510 * [DSP] MULTU ac, rs, rt - Multiply unsigned word
11511 *
11512 * 3 2 1
11513 * 10987654321098765432109876543210
11514 * 001000 01110010111111
11515 * rt -----
11516 * rs -----
11517 * ac --
11518 */
11519 std::string NMD::MULTU_DSP_(uint64 instruction)
11520 {
11521 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11522 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11523 uint64 ac_value = extract_ac_15_14(instruction);
11524
11525 std::string ac = AC(copy(ac_value));
11526 std::string rs = GPR(copy(rs_value));
11527 std::string rt = GPR(copy(rt_value));
11528
11529 return img::format("MULTU %s, %s, %s", ac, rs, rt);
11530 }
11531
11532
11533 /*
11534 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11535 *
11536 * 3 2 1
11537 * 10987654321098765432109876543210
11538 * 001000 00010001101
11539 * rt -----
11540 * rs -----
11541 * rd -----
11542 */
11543 std::string NMD::MULU(uint64 instruction)
11544 {
11545 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11546 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11547 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11548
11549 std::string rd = GPR(copy(rd_value));
11550 std::string rs = GPR(copy(rs_value));
11551 std::string rt = GPR(copy(rt_value));
11552
11553 return img::format("MULU %s, %s, %s", rd, rs, rt);
11554 }
11555
11556
11557 /*
11558 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11559 *
11560 * 3 2 1
11561 * 10987654321098765432109876543210
11562 * 001000 00010001101
11563 * rt -----
11564 * rs -----
11565 * rd -----
11566 */
11567 std::string NMD::NEG_D(uint64 instruction)
11568 {
11569 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11570 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11571
11572 std::string ft = FPR(copy(ft_value));
11573 std::string fs = FPR(copy(fs_value));
11574
11575 return img::format("NEG.D %s, %s", ft, fs);
11576 }
11577
11578
11579 /*
11580 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11581 *
11582 * 3 2 1
11583 * 10987654321098765432109876543210
11584 * 001000 00010001101
11585 * rt -----
11586 * rs -----
11587 * rd -----
11588 */
11589 std::string NMD::NEG_S(uint64 instruction)
11590 {
11591 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11592 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11593
11594 std::string ft = FPR(copy(ft_value));
11595 std::string fs = FPR(copy(fs_value));
11596
11597 return img::format("NEG.S %s, %s", ft, fs);
11598 }
11599
11600
11601 /*
11602 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11603 *
11604 * 3 2 1
11605 * 10987654321098765432109876543210
11606 * 001000 00010001101
11607 * rt -----
11608 * rs -----
11609 * rd -----
11610 */
11611 std::string NMD::NOP_16_(uint64 instruction)
11612 {
11613 (void)instruction;
11614
11615 return "NOP ";
11616 }
11617
11618
11619 /*
11620 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11621 *
11622 * 3 2 1
11623 * 10987654321098765432109876543210
11624 * 001000 00010001101
11625 * rt -----
11626 * rs -----
11627 * rd -----
11628 */
11629 std::string NMD::NOP_32_(uint64 instruction)
11630 {
11631 (void)instruction;
11632
11633 return "NOP ";
11634 }
11635
11636
11637 /*
11638 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11639 *
11640 * 3 2 1
11641 * 10987654321098765432109876543210
11642 * 001000 00010001101
11643 * rt -----
11644 * rs -----
11645 * rd -----
11646 */
11647 std::string NMD::NOR(uint64 instruction)
11648 {
11649 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11650 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11651 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11652
11653 std::string rd = GPR(copy(rd_value));
11654 std::string rs = GPR(copy(rs_value));
11655 std::string rt = GPR(copy(rt_value));
11656
11657 return img::format("NOR %s, %s, %s", rd, rs, rt);
11658 }
11659
11660
11661 /*
11662 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11663 *
11664 * 3 2 1
11665 * 10987654321098765432109876543210
11666 * 001000 00010001101
11667 * rt -----
11668 * rs -----
11669 * rd -----
11670 */
11671 std::string NMD::NOT_16_(uint64 instruction)
11672 {
11673 uint64 rt3_value = extract_rt3_9_8_7(instruction);
11674 uint64 rs3_value = extract_rs3_6_5_4(instruction);
11675
11676 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
11677 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
11678
11679 return img::format("NOT %s, %s", rt3, rs3);
11680 }
11681
11682
11683 /*
11684 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11685 *
11686 * 3 2 1
11687 * 10987654321098765432109876543210
11688 * 001000 00010001101
11689 * rt -----
11690 * rs -----
11691 * rd -----
11692 */
11693 std::string NMD::OR_16_(uint64 instruction)
11694 {
11695 uint64 rt3_value = extract_rt3_9_8_7(instruction);
11696 uint64 rs3_value = extract_rs3_6_5_4(instruction);
11697
11698 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
11699 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
11700
11701 return img::format("OR %s, %s", rs3, rt3);
11702 }
11703
11704
11705 /*
11706 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11707 *
11708 * 3 2 1
11709 * 10987654321098765432109876543210
11710 * 001000 00010001101
11711 * rt -----
11712 * rs -----
11713 * rd -----
11714 */
11715 std::string NMD::OR_32_(uint64 instruction)
11716 {
11717 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11718 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11719 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11720
11721 std::string rd = GPR(copy(rd_value));
11722 std::string rs = GPR(copy(rs_value));
11723 std::string rt = GPR(copy(rt_value));
11724
11725 return img::format("OR %s, %s, %s", rd, rs, rt);
11726 }
11727
11728
11729 /*
11730 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11731 *
11732 * 3 2 1
11733 * 10987654321098765432109876543210
11734 * 001000 00010001101
11735 * rt -----
11736 * rs -----
11737 * rd -----
11738 */
11739 std::string NMD::ORI(uint64 instruction)
11740 {
11741 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11742 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11743 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
11744
11745 std::string rt = GPR(copy(rt_value));
11746 std::string rs = GPR(copy(rs_value));
11747 std::string u = IMMEDIATE(copy(u_value));
11748
11749 return img::format("ORI %s, %s, %s", rt, rs, u);
11750 }
11751
11752
11753 /*
11754 * [DSP] PACKRL.PH rd, rs, rt - Pack a word using the right halfword from one
11755 * source register and left halfword from another source register
11756 *
11757 * 3 2 1
11758 * 10987654321098765432109876543210
11759 * 001000 00010001101
11760 * rt -----
11761 * rs -----
11762 * rd -----
11763 */
11764 std::string NMD::PACKRL_PH(uint64 instruction)
11765 {
11766 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11767 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11768 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11769
11770 std::string rd = GPR(copy(rd_value));
11771 std::string rs = GPR(copy(rs_value));
11772 std::string rt = GPR(copy(rt_value));
11773
11774 return img::format("PACKRL.PH %s, %s, %s", rd, rs, rt);
11775 }
11776
11777
11778 /*
11779 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11780 *
11781 * 3 2 1
11782 * 10987654321098765432109876543210
11783 * 001000 00010001101
11784 * rt -----
11785 * rs -----
11786 * rd -----
11787 */
11788 std::string NMD::PAUSE(uint64 instruction)
11789 {
11790 (void)instruction;
11791
11792 return "PAUSE ";
11793 }
11794
11795
11796 /*
11797 * [DSP] PICK.PH rd, rs, rt - Pick a vector of halfwords based on condition
11798 * code bits
11799 *
11800 * 3 2 1
11801 * 10987654321098765432109876543210
11802 * 001000 00010001101
11803 * rt -----
11804 * rs -----
11805 * rd -----
11806 */
11807 std::string NMD::PICK_PH(uint64 instruction)
11808 {
11809 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11810 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11811 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11812
11813 std::string rd = GPR(copy(rd_value));
11814 std::string rs = GPR(copy(rs_value));
11815 std::string rt = GPR(copy(rt_value));
11816
11817 return img::format("PICK.PH %s, %s, %s", rd, rs, rt);
11818 }
11819
11820
11821 /*
11822 * [DSP] PICK.QB rd, rs, rt - Pick a vector of byte values based on condition
11823 * code bits
11824 *
11825 * 3 2 1
11826 * 10987654321098765432109876543210
11827 * 001000 00010001101
11828 * rt -----
11829 * rs -----
11830 * rd -----
11831 */
11832 std::string NMD::PICK_QB(uint64 instruction)
11833 {
11834 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11835 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11836 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11837
11838 std::string rd = GPR(copy(rd_value));
11839 std::string rs = GPR(copy(rs_value));
11840 std::string rt = GPR(copy(rt_value));
11841
11842 return img::format("PICK.QB %s, %s, %s", rd, rs, rt);
11843 }
11844
11845
11846 /*
11847 * [DSP] PRECEQ.W.PHL rt, rs - Expand the precision of the left-most element
11848 * of a paired halfword
11849 *
11850 * 3 2 1
11851 * 10987654321098765432109876543210
11852 * 001000 00010001101
11853 * rt -----
11854 * rs -----
11855 * rd -----
11856 */
11857 std::string NMD::PRECEQ_W_PHL(uint64 instruction)
11858 {
11859 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11860 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11861
11862 std::string rt = GPR(copy(rt_value));
11863 std::string rs = GPR(copy(rs_value));
11864
11865 return img::format("PRECEQ.W.PHL %s, %s", rt, rs);
11866 }
11867
11868
11869 /*
11870 * [DSP] PRECEQ.W.PHR rt, rs - Expand the precision of the right-most element
11871 * of a paired halfword
11872 *
11873 * 3 2 1
11874 * 10987654321098765432109876543210
11875 * 001000 00010001101
11876 * rt -----
11877 * rs -----
11878 * rd -----
11879 */
11880 std::string NMD::PRECEQ_W_PHR(uint64 instruction)
11881 {
11882 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11883 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11884
11885 std::string rt = GPR(copy(rt_value));
11886 std::string rs = GPR(copy(rs_value));
11887
11888 return img::format("PRECEQ.W.PHR %s, %s", rt, rs);
11889 }
11890
11891
11892 /*
11893 * [DSP] PRECEQU.PH.QBLA rt, rs - Expand the precision of the two
11894 * left-alternate elements of a quad byte vector
11895 *
11896 * 3 2 1
11897 * 10987654321098765432109876543210
11898 * 001000 00010001101
11899 * rt -----
11900 * rs -----
11901 * rd -----
11902 */
11903 std::string NMD::PRECEQU_PH_QBLA(uint64 instruction)
11904 {
11905 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11906 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11907
11908 std::string rt = GPR(copy(rt_value));
11909 std::string rs = GPR(copy(rs_value));
11910
11911 return img::format("PRECEQU.PH.QBLA %s, %s", rt, rs);
11912 }
11913
11914
11915 /*
11916 * [DSP] PRECEQU.PH.QBL rt, rs - Expand the precision of the two left-most
11917 * elements of a quad byte vector
11918 *
11919 * 3 2 1
11920 * 10987654321098765432109876543210
11921 * 001000 00010001101
11922 * rt -----
11923 * rs -----
11924 * rd -----
11925 */
11926 std::string NMD::PRECEQU_PH_QBL(uint64 instruction)
11927 {
11928 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11929 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11930
11931 std::string rt = GPR(copy(rt_value));
11932 std::string rs = GPR(copy(rs_value));
11933
11934 return img::format("PRECEQU.PH.QBL %s, %s", rt, rs);
11935 }
11936
11937
11938 /*
11939 * [DSP] PRECEQU.PH.QBRA rt, rs - Expand the precision of the two
11940 * right-alternate elements of a quad byte vector
11941 *
11942 * 3 2 1
11943 * 10987654321098765432109876543210
11944 * 001000 00010001101
11945 * rt -----
11946 * rs -----
11947 * rd -----
11948 */
11949 std::string NMD::PRECEQU_PH_QBRA(uint64 instruction)
11950 {
11951 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11952 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11953
11954 std::string rt = GPR(copy(rt_value));
11955 std::string rs = GPR(copy(rs_value));
11956
11957 return img::format("PRECEQU.PH.QBRA %s, %s", rt, rs);
11958 }
11959
11960
11961 /*
11962 * [DSP] PRECEQU.PH.QBR rt, rs - Expand the precision of the two right-most
11963 * elements of a quad byte vector
11964 *
11965 * 3 2 1
11966 * 10987654321098765432109876543210
11967 * 001000 00010001101
11968 * rt -----
11969 * rs -----
11970 * rd -----
11971 */
11972 std::string NMD::PRECEQU_PH_QBR(uint64 instruction)
11973 {
11974 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11975 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11976
11977 std::string rt = GPR(copy(rt_value));
11978 std::string rs = GPR(copy(rs_value));
11979
11980 return img::format("PRECEQU.PH.QBR %s, %s", rt, rs);
11981 }
11982
11983
11984 /*
11985 * [DSP] PRECEU.PH.QBLA rt, rs - Expand the precision of the two
11986 * left-alternate elements of a quad byte vector to four unsigned
11987 * halfwords
11988 *
11989 * 3 2 1
11990 * 10987654321098765432109876543210
11991 * 001000 00010001101
11992 * rt -----
11993 * rs -----
11994 * rd -----
11995 */
11996 std::string NMD::PRECEU_PH_QBLA(uint64 instruction)
11997 {
11998 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11999 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12000
12001 std::string rt = GPR(copy(rt_value));
12002 std::string rs = GPR(copy(rs_value));
12003
12004 return img::format("PRECEU.PH.QBLA %s, %s", rt, rs);
12005 }
12006
12007
12008 /*
12009 * [DSP] PRECEU.PH.QBL rt, rs - Expand the precision of the two left-most
12010 * elements of a quad byte vector to form unsigned halfwords
12011 *
12012 * 3 2 1
12013 * 10987654321098765432109876543210
12014 * 001000 00010001101
12015 * rt -----
12016 * rs -----
12017 * rd -----
12018 */
12019 std::string NMD::PRECEU_PH_QBL(uint64 instruction)
12020 {
12021 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12022 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12023
12024 std::string rt = GPR(copy(rt_value));
12025 std::string rs = GPR(copy(rs_value));
12026
12027 return img::format("PRECEU.PH.QBL %s, %s", rt, rs);
12028 }
12029
12030
12031 /*
12032 * [DSP] PRECEU.PH.QBRA rt, rs - Expand the precision of the two
12033 * right-alternate elements of a quad byte vector to form four
12034 * unsigned halfwords
12035 *
12036 * 3 2 1
12037 * 10987654321098765432109876543210
12038 * 001000 00010001101
12039 * rt -----
12040 * rs -----
12041 * rd -----
12042 */
12043 std::string NMD::PRECEU_PH_QBRA(uint64 instruction)
12044 {
12045 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12046 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12047
12048 std::string rt = GPR(copy(rt_value));
12049 std::string rs = GPR(copy(rs_value));
12050
12051 return img::format("PRECEU.PH.QBRA %s, %s", rt, rs);
12052 }
12053
12054
12055 /*
12056 * [DSP] PRECEU.PH.QBR rt, rs - Expand the precision of the two right-most
12057 * elements of a quad byte vector to form unsigned halfwords
12058 *
12059 * 3 2 1
12060 * 10987654321098765432109876543210
12061 * 001000 00010001101
12062 * rt -----
12063 * rs -----
12064 * rd -----
12065 */
12066 std::string NMD::PRECEU_PH_QBR(uint64 instruction)
12067 {
12068 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12069 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12070
12071 std::string rt = GPR(copy(rt_value));
12072 std::string rs = GPR(copy(rs_value));
12073
12074 return img::format("PRECEU.PH.QBR %s, %s", rt, rs);
12075 }
12076
12077
12078 /*
12079 * [DSP] PRECR.QB.PH rd, rs, rt - Reduce the precision of four integer
12080 * halfwords to four bytes
12081 *
12082 * 3 2 1
12083 * 10987654321098765432109876543210
12084 * 001000 x0001101101
12085 * rt -----
12086 * rs -----
12087 * rd -----
12088 */
12089 std::string NMD::PRECR_QB_PH(uint64 instruction)
12090 {
12091 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12092 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12093 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12094
12095 std::string rd = GPR(copy(rd_value));
12096 std::string rs = GPR(copy(rs_value));
12097 std::string rt = GPR(copy(rt_value));
12098
12099 return img::format("PRECR.QB.PH %s, %s, %s", rd, rs, rt);
12100 }
12101
12102
12103 /*
12104 * [DSP] PRECR_SRA.PH.W rt, rs, sa - Reduce the precision of two integer
12105 * words to halfwords after a right shift
12106 *
12107 * 3 2 1
12108 * 10987654321098765432109876543210
12109 * 001000 x1110000101
12110 * rt -----
12111 * rs -----
12112 * rd -----
12113 */
12114 std::string NMD::PRECR_SRA_PH_W(uint64 instruction)
12115 {
12116 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12117 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12118 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
12119
12120 std::string rt = GPR(copy(rt_value));
12121 std::string rs = GPR(copy(rs_value));
12122 std::string sa = IMMEDIATE(copy(sa_value));
12123
12124 return img::format("PRECR_SRA.PH.W %s, %s, %s", rt, rs, sa);
12125 }
12126
12127
12128 /*
12129 * [DSP] PRECR_SRA_R.PH.W rt, rs, sa - Reduce the precision of two integer
12130 * words to halfwords after a right shift with rounding
12131 *
12132 * 3 2 1
12133 * 10987654321098765432109876543210
12134 * 001000 x1110000101
12135 * rt -----
12136 * rs -----
12137 * rd -----
12138 */
12139 std::string NMD::PRECR_SRA_R_PH_W(uint64 instruction)
12140 {
12141 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12142 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12143 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
12144
12145 std::string rt = GPR(copy(rt_value));
12146 std::string rs = GPR(copy(rs_value));
12147 std::string sa = IMMEDIATE(copy(sa_value));
12148
12149 return img::format("PRECR_SRA_R.PH.W %s, %s, %s", rt, rs, sa);
12150 }
12151
12152
12153 /*
12154 * [DSP] PRECRQ.PH.W rd, rs, rt - Reduce the precision of fractional
12155 * words to fractional halfwords
12156 *
12157 * 3 2 1
12158 * 10987654321098765432109876543210
12159 * 001000 x1110000101
12160 * rt -----
12161 * rs -----
12162 * rd -----
12163 */
12164 std::string NMD::PRECRQ_PH_W(uint64 instruction)
12165 {
12166 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12167 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12168 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12169
12170 std::string rd = GPR(copy(rd_value));
12171 std::string rs = GPR(copy(rs_value));
12172 std::string rt = GPR(copy(rt_value));
12173
12174 return img::format("PRECRQ.PH.W %s, %s, %s", rd, rs, rt);
12175 }
12176
12177
12178 /*
12179 * [DSP] PRECRQ.QB.PH rd, rs, rt - Reduce the precision of four fractional
12180 * halfwords to four bytes
12181 *
12182 * 3 2 1
12183 * 10987654321098765432109876543210
12184 * 001000 x0010101101
12185 * rt -----
12186 * rs -----
12187 * rd -----
12188 */
12189 std::string NMD::PRECRQ_QB_PH(uint64 instruction)
12190 {
12191 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12192 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12193 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12194
12195 std::string rd = GPR(copy(rd_value));
12196 std::string rs = GPR(copy(rs_value));
12197 std::string rt = GPR(copy(rt_value));
12198
12199 return img::format("PRECRQ.QB.PH %s, %s, %s", rd, rs, rt);
12200 }
12201
12202
12203 /*
12204 * [DSP] PRECRQ_RS.PH.W rd, rs, rt - Reduce the precision of fractional
12205 * words to halfwords with rounding and saturation
12206 *
12207 * 3 2 1
12208 * 10987654321098765432109876543210
12209 * 001000 x1110000101
12210 * rt -----
12211 * rs -----
12212 * rd -----
12213 */
12214 std::string NMD::PRECRQ_RS_PH_W(uint64 instruction)
12215 {
12216 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12217 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12218 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12219
12220 std::string rd = GPR(copy(rd_value));
12221 std::string rs = GPR(copy(rs_value));
12222 std::string rt = GPR(copy(rt_value));
12223
12224 return img::format("PRECRQ_RS.PH.W %s, %s, %s", rd, rs, rt);
12225 }
12226
12227
12228 /*
12229 * [DSP] PRECRQU_S.QB.PH rd, rs, rt - Reduce the precision of fractional
12230 * halfwords to unsigned bytes with saturation
12231 *
12232 * 3 2 1
12233 * 10987654321098765432109876543210
12234 * 001000 x1110000101
12235 * rt -----
12236 * rs -----
12237 * rd -----
12238 */
12239 std::string NMD::PRECRQU_S_QB_PH(uint64 instruction)
12240 {
12241 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12242 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12243 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12244
12245 std::string rd = GPR(copy(rd_value));
12246 std::string rs = GPR(copy(rs_value));
12247 std::string rt = GPR(copy(rt_value));
12248
12249 return img::format("PRECRQU_S.QB.PH %s, %s, %s", rd, rs, rt);
12250 }
12251
12252
12253 /*
12254 *
12255 *
12256 * 3 2 1
12257 * 10987654321098765432109876543210
12258 * 001000 x1110000101
12259 * rt -----
12260 * rs -----
12261 * rd -----
12262 */
12263 std::string NMD::PREF_S9_(uint64 instruction)
12264 {
12265 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12266 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12267 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12268
12269 std::string hint = IMMEDIATE(copy(hint_value));
12270 std::string s = IMMEDIATE(copy(s_value));
12271 std::string rs = GPR(copy(rs_value));
12272
12273 return img::format("PREF %s, %s(%s)", hint, s, rs);
12274 }
12275
12276
12277 /*
12278 *
12279 *
12280 * 3 2 1
12281 * 10987654321098765432109876543210
12282 * 001000 x1110000101
12283 * rt -----
12284 * rs -----
12285 * rd -----
12286 */
12287 std::string NMD::PREF_U12_(uint64 instruction)
12288 {
12289 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12290 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12291 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12292
12293 std::string hint = IMMEDIATE(copy(hint_value));
12294 std::string u = IMMEDIATE(copy(u_value));
12295 std::string rs = GPR(copy(rs_value));
12296
12297 return img::format("PREF %s, %s(%s)", hint, u, rs);
12298 }
12299
12300
12301 /*
12302 *
12303 *
12304 * 3 2 1
12305 * 10987654321098765432109876543210
12306 * 001000 x1110000101
12307 * rt -----
12308 * rs -----
12309 * rd -----
12310 */
12311 std::string NMD::PREFE(uint64 instruction)
12312 {
12313 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12314 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12315 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12316
12317 std::string hint = IMMEDIATE(copy(hint_value));
12318 std::string s = IMMEDIATE(copy(s_value));
12319 std::string rs = GPR(copy(rs_value));
12320
12321 return img::format("PREFE %s, %s(%s)", hint, s, rs);
12322 }
12323
12324
12325 /*
12326 * [DSP] PREPEND rt, rs, sa - Right shift and prepend bits to the MSB
12327 *
12328 * 3 2 1
12329 * 10987654321098765432109876543210
12330 * 001000 x1110000101
12331 * rt -----
12332 * rs -----
12333 * rd -----
12334 */
12335 std::string NMD::PREPEND(uint64 instruction)
12336 {
12337 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12338 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12339 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
12340
12341 std::string rt = GPR(copy(rt_value));
12342 std::string rs = GPR(copy(rs_value));
12343 std::string sa = IMMEDIATE(copy(sa_value));
12344
12345 return img::format("PREPEND %s, %s, %s", rt, rs, sa);
12346 }
12347
12348
12349 /*
12350 * [DSP] RADDU.W.QB rt, rs - Unsigned reduction add of vector quad bytes
12351 *
12352 * 3 2 1
12353 * 10987654321098765432109876543210
12354 * 001000 1111000100111111
12355 * rt -----
12356 * rs -----
12357 */
12358 std::string NMD::RADDU_W_QB(uint64 instruction)
12359 {
12360 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12361 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12362
12363 std::string rt = GPR(copy(rt_value));
12364 std::string rs = GPR(copy(rs_value));
12365
12366 return img::format("RADDU.W.QB %s, %s", rt, rs);
12367 }
12368
12369
12370 /*
12371 * [DSP] RDDSP rt, mask - Read DSPControl register fields to a GPR
12372 *
12373 * 3 2 1
12374 * 10987654321098765432109876543210
12375 * 001000 00011001111111
12376 * rt -----
12377 * mask -------
12378 */
12379 std::string NMD::RDDSP(uint64 instruction)
12380 {
12381 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12382 uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
12383
12384 std::string rt = GPR(copy(rt_value));
12385 std::string mask = IMMEDIATE(copy(mask_value));
12386
12387 return img::format("RDDSP %s, %s", rt, mask);
12388 }
12389
12390
12391 /*
12392 *
12393 *
12394 * 3 2 1
12395 * 10987654321098765432109876543210
12396 * 001000 x1110000101
12397 * rt -----
12398 * rs -----
12399 * rd -----
12400 */
12401 std::string NMD::RDHWR(uint64 instruction)
12402 {
12403 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12404 uint64 hs_value = extract_hs_20_19_18_17_16(instruction);
12405 uint64 sel_value = extract_sel_13_12_11(instruction);
12406
12407 std::string rt = GPR(copy(rt_value));
12408 std::string hs = CPR(copy(hs_value));
12409 std::string sel = IMMEDIATE(copy(sel_value));
12410
12411 return img::format("RDHWR %s, %s, %s", rt, hs, sel);
12412 }
12413
12414
12415 /*
12416 *
12417 *
12418 * 3 2 1
12419 * 10987654321098765432109876543210
12420 * 001000 x1110000101
12421 * rt -----
12422 * rs -----
12423 * rd -----
12424 */
12425 std::string NMD::RDPGPR(uint64 instruction)
12426 {
12427 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12428 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12429
12430 std::string rt = GPR(copy(rt_value));
12431 std::string rs = GPR(copy(rs_value));
12432
12433 return img::format("RDPGPR %s, %s", rt, rs);
12434 }
12435
12436
12437 /*
12438 *
12439 *
12440 * 3 2 1
12441 * 10987654321098765432109876543210
12442 * 001000 x1110000101
12443 * rt -----
12444 * rs -----
12445 * rd -----
12446 */
12447 std::string NMD::RECIP_D(uint64 instruction)
12448 {
12449 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12450 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12451
12452 std::string ft = FPR(copy(ft_value));
12453 std::string fs = FPR(copy(fs_value));
12454
12455 return img::format("RECIP.D %s, %s", ft, fs);
12456 }
12457
12458
12459 /*
12460 *
12461 *
12462 * 3 2 1
12463 * 10987654321098765432109876543210
12464 * 001000 x1110000101
12465 * rt -----
12466 * rs -----
12467 * rd -----
12468 */
12469 std::string NMD::RECIP_S(uint64 instruction)
12470 {
12471 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12472 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12473
12474 std::string ft = FPR(copy(ft_value));
12475 std::string fs = FPR(copy(fs_value));
12476
12477 return img::format("RECIP.S %s, %s", ft, fs);
12478 }
12479
12480
12481 /*
12482 * [DSP] REPL.PH rd, s - Replicate immediate integer into all vector element
12483 * positions
12484 *
12485 * 3 2 1
12486 * 10987654321098765432109876543210
12487 * 001000 x0000111101
12488 * rt -----
12489 * s ----------
12490 */
12491 std::string NMD::REPL_PH(uint64 instruction)
12492 {
12493 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12494 int64 s_value = extract_s__se9_20_19_18_17_16_15_14_13_12_11(instruction);
12495
12496 std::string rt = GPR(copy(rt_value));
12497 std::string s = IMMEDIATE(copy(s_value));
12498
12499 return img::format("REPL.PH %s, %s", rt, s);
12500 }
12501
12502
12503 /*
12504 * [DSP] REPL.QB rd, u - Replicate immediate integer into all vector element
12505 * positions
12506 *
12507 * 3 2 1
12508 * 10987654321098765432109876543210
12509 * 001000 x010111111111
12510 * rt -----
12511 * u --------
12512 */
12513 std::string NMD::REPL_QB(uint64 instruction)
12514 {
12515 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12516 uint64 u_value = extract_u_20_19_18_17_16_15_14_13(instruction);
12517
12518 std::string rt = GPR(copy(rt_value));
12519 std::string u = IMMEDIATE(copy(u_value));
12520
12521 return img::format("REPL.QB %s, %s", rt, u);
12522 }
12523
12524
12525 /*
12526 * [DSP] REPLV.PH rt, rs - Replicate a halfword into all vector element
12527 * positions
12528 *
12529 * 3 2 1
12530 * 10987654321098765432109876543210
12531 * 001000 0000001100111111
12532 * rt -----
12533 * rs -----
12534 */
12535 std::string NMD::REPLV_PH(uint64 instruction)
12536 {
12537 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12538 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12539
12540 std::string rt = GPR(copy(rt_value));
12541 std::string rs = GPR(copy(rs_value));
12542
12543 return img::format("REPLV.PH %s, %s", rt, rs);
12544 }
12545
12546
12547 /*
12548 * [DSP] REPLV.QB rt, rs - Replicate byte into all vector element positions
12549 *
12550 * 3 2 1
12551 * 10987654321098765432109876543210
12552 * 001000 0001001100111111
12553 * rt -----
12554 * rs -----
12555 */
12556 std::string NMD::REPLV_QB(uint64 instruction)
12557 {
12558 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12559 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12560
12561 std::string rt = GPR(copy(rt_value));
12562 std::string rs = GPR(copy(rs_value));
12563
12564 return img::format("REPLV.QB %s, %s", rt, rs);
12565 }
12566
12567
12568 /*
12569 *
12570 *
12571 * 3 2 1
12572 * 10987654321098765432109876543210
12573 * 001000 x1110000101
12574 * rt -----
12575 * rs -----
12576 * rd -----
12577 */
12578 std::string NMD::RESTORE_32_(uint64 instruction)
12579 {
12580 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12581 uint64 count_value = extract_count_19_18_17_16(instruction);
12582 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12583 uint64 gp_value = extract_gp_2(instruction);
12584
12585 std::string u = IMMEDIATE(copy(u_value));
12586 return img::format("RESTORE %s%s", u,
12587 save_restore_list(rt_value, count_value, gp_value));
12588 }
12589
12590
12591 /*
12592 *
12593 *
12594 * 3 2 1
12595 * 10987654321098765432109876543210
12596 * 001000 x1110000101
12597 * rt -----
12598 * rs -----
12599 * rd -----
12600 */
12601 std::string NMD::RESTORE_JRC_16_(uint64 instruction)
12602 {
12603 uint64 rt1_value = extract_rtl_11(instruction);
12604 uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12605 uint64 count_value = extract_count_3_2_1_0(instruction);
12606
12607 std::string u = IMMEDIATE(copy(u_value));
12608 return img::format("RESTORE.JRC %s%s", u,
12609 save_restore_list(encode_rt1_from_rt(rt1_value), count_value, 0));
12610 }
12611
12612
12613 /*
12614 *
12615 *
12616 * 3 2 1
12617 * 10987654321098765432109876543210
12618 * 001000 x1110000101
12619 * rt -----
12620 * rs -----
12621 * rd -----
12622 */
12623 std::string NMD::RESTORE_JRC_32_(uint64 instruction)
12624 {
12625 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12626 uint64 count_value = extract_count_19_18_17_16(instruction);
12627 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12628 uint64 gp_value = extract_gp_2(instruction);
12629
12630 std::string u = IMMEDIATE(copy(u_value));
12631 return img::format("RESTORE.JRC %s%s", u,
12632 save_restore_list(rt_value, count_value, gp_value));
12633 }
12634
12635
12636 /*
12637 *
12638 *
12639 * 3 2 1
12640 * 10987654321098765432109876543210
12641 * 001000 x1110000101
12642 * rt -----
12643 * rs -----
12644 * rd -----
12645 */
12646 std::string NMD::RESTOREF(uint64 instruction)
12647 {
12648 uint64 count_value = extract_count_19_18_17_16(instruction);
12649 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12650
12651 std::string u = IMMEDIATE(copy(u_value));
12652 std::string count = IMMEDIATE(copy(count_value));
12653
12654 return img::format("RESTOREF %s, %s", u, count);
12655 }
12656
12657
12658 /*
12659 *
12660 *
12661 * 3 2 1
12662 * 10987654321098765432109876543210
12663 * 001000 x1110000101
12664 * rt -----
12665 * rs -----
12666 * rd -----
12667 */
12668 std::string NMD::RINT_D(uint64 instruction)
12669 {
12670 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12671 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12672
12673 std::string ft = FPR(copy(ft_value));
12674 std::string fs = FPR(copy(fs_value));
12675
12676 return img::format("RINT.D %s, %s", ft, fs);
12677 }
12678
12679
12680 /*
12681 *
12682 *
12683 * 3 2 1
12684 * 10987654321098765432109876543210
12685 * 001000 x1110000101
12686 * rt -----
12687 * rs -----
12688 * rd -----
12689 */
12690 std::string NMD::RINT_S(uint64 instruction)
12691 {
12692 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12693 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12694
12695 std::string ft = FPR(copy(ft_value));
12696 std::string fs = FPR(copy(fs_value));
12697
12698 return img::format("RINT.S %s, %s", ft, fs);
12699 }
12700
12701
12702 /*
12703 *
12704 *
12705 * 3 2 1
12706 * 10987654321098765432109876543210
12707 * 001000 x1110000101
12708 * rt -----
12709 * rs -----
12710 * rd -----
12711 */
12712 std::string NMD::ROTR(uint64 instruction)
12713 {
12714 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12715 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12716 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12717
12718 std::string rt = GPR(copy(rt_value));
12719 std::string rs = GPR(copy(rs_value));
12720 std::string shift = IMMEDIATE(copy(shift_value));
12721
12722 return img::format("ROTR %s, %s, %s", rt, rs, shift);
12723 }
12724
12725
12726 /*
12727 *
12728 *
12729 * 3 2 1
12730 * 10987654321098765432109876543210
12731 * 001000 x1110000101
12732 * rt -----
12733 * rs -----
12734 * rd -----
12735 */
12736 std::string NMD::ROTRV(uint64 instruction)
12737 {
12738 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12739 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12740 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12741
12742 std::string rd = GPR(copy(rd_value));
12743 std::string rs = GPR(copy(rs_value));
12744 std::string rt = GPR(copy(rt_value));
12745
12746 return img::format("ROTRV %s, %s, %s", rd, rs, rt);
12747 }
12748
12749
12750 /*
12751 *
12752 *
12753 * 3 2 1
12754 * 10987654321098765432109876543210
12755 * 001000 x1110000101
12756 * rt -----
12757 * rs -----
12758 * rd -----
12759 */
12760 std::string NMD::ROTX(uint64 instruction)
12761 {
12762 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12763 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12764 uint64 shiftx_value = extract_shiftx_10_9_8_7__s1(instruction);
12765 uint64 stripe_value = extract_stripe_6(instruction);
12766 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12767
12768 std::string rt = GPR(copy(rt_value));
12769 std::string rs = GPR(copy(rs_value));
12770 std::string shift = IMMEDIATE(copy(shift_value));
12771 std::string shiftx = IMMEDIATE(copy(shiftx_value));
12772 std::string stripe = IMMEDIATE(copy(stripe_value));
12773
12774 return img::format("ROTX %s, %s, %s, %s, %s",
12775 rt, rs, shift, shiftx, stripe);
12776 }
12777
12778
12779 /*
12780 *
12781 *
12782 * 3 2 1
12783 * 10987654321098765432109876543210
12784 * 001000 x1110000101
12785 * rt -----
12786 * rs -----
12787 * rd -----
12788 */
12789 std::string NMD::ROUND_L_D(uint64 instruction)
12790 {
12791 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12792 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12793
12794 std::string ft = FPR(copy(ft_value));
12795 std::string fs = FPR(copy(fs_value));
12796
12797 return img::format("ROUND.L.D %s, %s", ft, fs);
12798 }
12799
12800
12801 /*
12802 *
12803 *
12804 * 3 2 1
12805 * 10987654321098765432109876543210
12806 * 001000 x1110000101
12807 * rt -----
12808 * rs -----
12809 * rd -----
12810 */
12811 std::string NMD::ROUND_L_S(uint64 instruction)
12812 {
12813 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12814 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12815
12816 std::string ft = FPR(copy(ft_value));
12817 std::string fs = FPR(copy(fs_value));
12818
12819 return img::format("ROUND.L.S %s, %s", ft, fs);
12820 }
12821
12822
12823 /*
12824 *
12825 *
12826 * 3 2 1
12827 * 10987654321098765432109876543210
12828 * 001000 x1110000101
12829 * rt -----
12830 * rs -----
12831 * rd -----
12832 */
12833 std::string NMD::ROUND_W_D(uint64 instruction)
12834 {
12835 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12836 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12837
12838 std::string ft = FPR(copy(ft_value));
12839 std::string fs = FPR(copy(fs_value));
12840
12841 return img::format("ROUND.W.D %s, %s", ft, fs);
12842 }
12843
12844
12845 /*
12846 *
12847 *
12848 * 3 2 1
12849 * 10987654321098765432109876543210
12850 * 001000 x1110000101
12851 * rt -----
12852 * rs -----
12853 * rd -----
12854 */
12855 std::string NMD::ROUND_W_S(uint64 instruction)
12856 {
12857 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12858 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12859
12860 std::string ft = FPR(copy(ft_value));
12861 std::string fs = FPR(copy(fs_value));
12862
12863 return img::format("ROUND.W.S %s, %s", ft, fs);
12864 }
12865
12866
12867 /*
12868 *
12869 *
12870 * 3 2 1
12871 * 10987654321098765432109876543210
12872 * 001000 x1110000101
12873 * rt -----
12874 * rs -----
12875 * rd -----
12876 */
12877 std::string NMD::RSQRT_D(uint64 instruction)
12878 {
12879 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12880 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12881
12882 std::string ft = FPR(copy(ft_value));
12883 std::string fs = FPR(copy(fs_value));
12884
12885 return img::format("RSQRT.D %s, %s", ft, fs);
12886 }
12887
12888
12889 /*
12890 *
12891 *
12892 * 3 2 1
12893 * 10987654321098765432109876543210
12894 * 001000 x1110000101
12895 * rt -----
12896 * rs -----
12897 * rd -----
12898 */
12899 std::string NMD::RSQRT_S(uint64 instruction)
12900 {
12901 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12902 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12903
12904 std::string ft = FPR(copy(ft_value));
12905 std::string fs = FPR(copy(fs_value));
12906
12907 return img::format("RSQRT.S %s, %s", ft, fs);
12908 }
12909
12910
12911 /*
12912 *
12913 *
12914 * 3 2 1
12915 * 10987654321098765432109876543210
12916 * 001000 01001001101
12917 * rt -----
12918 * rs -----
12919 * rd -----
12920 */
12921 std::string NMD::SAVE_16_(uint64 instruction)
12922 {
12923 uint64 rt1_value = extract_rtl_11(instruction);
12924 uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12925 uint64 count_value = extract_count_3_2_1_0(instruction);
12926
12927 std::string u = IMMEDIATE(copy(u_value));
12928 return img::format("SAVE %s%s", u,
12929 save_restore_list(encode_rt1_from_rt(rt1_value), count_value, 0));
12930 }
12931
12932
12933 /*
12934 *
12935 *
12936 * 3 2 1
12937 * 10987654321098765432109876543210
12938 * 001000 01001001101
12939 * rt -----
12940 * rs -----
12941 * rd -----
12942 */
12943 std::string NMD::SAVE_32_(uint64 instruction)
12944 {
12945 uint64 count_value = extract_count_19_18_17_16(instruction);
12946 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12947 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12948 uint64 gp_value = extract_gp_2(instruction);
12949
12950 std::string u = IMMEDIATE(copy(u_value));
12951 return img::format("SAVE %s%s", u,
12952 save_restore_list(rt_value, count_value, gp_value));
12953 }
12954
12955
12956 /*
12957 *
12958 *
12959 * 3 2 1
12960 * 10987654321098765432109876543210
12961 * 001000 01001001101
12962 * rt -----
12963 * rs -----
12964 * rd -----
12965 */
12966 std::string NMD::SAVEF(uint64 instruction)
12967 {
12968 uint64 count_value = extract_count_19_18_17_16(instruction);
12969 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12970
12971 std::string u = IMMEDIATE(copy(u_value));
12972 std::string count = IMMEDIATE(copy(count_value));
12973
12974 return img::format("SAVEF %s, %s", u, count);
12975 }
12976
12977
12978 /*
12979 *
12980 *
12981 * 3 2 1
12982 * 10987654321098765432109876543210
12983 * 001000 01001001101
12984 * rt -----
12985 * rs -----
12986 * rd -----
12987 */
12988 std::string NMD::SB_16_(uint64 instruction)
12989 {
12990 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
12991 uint64 rs3_value = extract_rs3_6_5_4(instruction);
12992 uint64 u_value = extract_u_1_0(instruction);
12993
12994 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
12995 std::string u = IMMEDIATE(copy(u_value));
12996 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
12997
12998 return img::format("SB %s, %s(%s)", rtz3, u, rs3);
12999 }
13000
13001
13002 /*
13003 *
13004 *
13005 * 3 2 1
13006 * 10987654321098765432109876543210
13007 * 001000 01001001101
13008 * rt -----
13009 * rs -----
13010 * rd -----
13011 */
13012 std::string NMD::SB_GP_(uint64 instruction)
13013 {
13014 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13015 uint64 u_value = extract_u_17_to_0(instruction);
13016
13017 std::string rt = GPR(copy(rt_value));
13018 std::string u = IMMEDIATE(copy(u_value));
13019
13020 return img::format("SB %s, %s($%d)", rt, u, 28);
13021 }
13022
13023
13024 /*
13025 *
13026 *
13027 * 3 2 1
13028 * 10987654321098765432109876543210
13029 * 001000 01001001101
13030 * rt -----
13031 * rs -----
13032 * rd -----
13033 */
13034 std::string NMD::SB_S9_(uint64 instruction)
13035 {
13036 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13037 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13038 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13039
13040 std::string rt = GPR(copy(rt_value));
13041 std::string s = IMMEDIATE(copy(s_value));
13042 std::string rs = GPR(copy(rs_value));
13043
13044 return img::format("SB %s, %s(%s)", rt, s, rs);
13045 }
13046
13047
13048 /*
13049 *
13050 *
13051 * 3 2 1
13052 * 10987654321098765432109876543210
13053 * 001000 01001001101
13054 * rt -----
13055 * rs -----
13056 * rd -----
13057 */
13058 std::string NMD::SB_U12_(uint64 instruction)
13059 {
13060 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13061 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13062 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13063
13064 std::string rt = GPR(copy(rt_value));
13065 std::string u = IMMEDIATE(copy(u_value));
13066 std::string rs = GPR(copy(rs_value));
13067
13068 return img::format("SB %s, %s(%s)", rt, u, rs);
13069 }
13070
13071
13072 /*
13073 *
13074 *
13075 * 3 2 1
13076 * 10987654321098765432109876543210
13077 * 001000 01001001101
13078 * rt -----
13079 * rs -----
13080 * rd -----
13081 */
13082 std::string NMD::SBE(uint64 instruction)
13083 {
13084 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13085 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13086 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13087
13088 std::string rt = GPR(copy(rt_value));
13089 std::string s = IMMEDIATE(copy(s_value));
13090 std::string rs = GPR(copy(rs_value));
13091
13092 return img::format("SBE %s, %s(%s)", rt, s, rs);
13093 }
13094
13095
13096 /*
13097 *
13098 *
13099 * 3 2 1
13100 * 10987654321098765432109876543210
13101 * 001000 01001001101
13102 * rt -----
13103 * rs -----
13104 * rd -----
13105 */
13106 std::string NMD::SBX(uint64 instruction)
13107 {
13108 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13109 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13110 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13111
13112 std::string rd = GPR(copy(rd_value));
13113 std::string rs = GPR(copy(rs_value));
13114 std::string rt = GPR(copy(rt_value));
13115
13116 return img::format("SBX %s, %s(%s)", rd, rs, rt);
13117 }
13118
13119
13120 /*
13121 *
13122 *
13123 * 3 2 1
13124 * 10987654321098765432109876543210
13125 * 001000 01001001101
13126 * rt -----
13127 * rs -----
13128 * rd -----
13129 */
13130 std::string NMD::SC(uint64 instruction)
13131 {
13132 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13133 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13134 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
13135
13136 std::string rt = GPR(copy(rt_value));
13137 std::string s = IMMEDIATE(copy(s_value));
13138 std::string rs = GPR(copy(rs_value));
13139
13140 return img::format("SC %s, %s(%s)", rt, s, rs);
13141 }
13142
13143
13144 /*
13145 *
13146 *
13147 * 3 2 1
13148 * 10987654321098765432109876543210
13149 * 001000 01001001101
13150 * rt -----
13151 * rs -----
13152 * rd -----
13153 */
13154 std::string NMD::SCD(uint64 instruction)
13155 {
13156 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13157 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13158 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
13159
13160 std::string rt = GPR(copy(rt_value));
13161 std::string s = IMMEDIATE(copy(s_value));
13162 std::string rs = GPR(copy(rs_value));
13163
13164 return img::format("SCD %s, %s(%s)", rt, s, rs);
13165 }
13166
13167
13168 /*
13169 *
13170 *
13171 * 3 2 1
13172 * 10987654321098765432109876543210
13173 * 001000 01001001101
13174 * rt -----
13175 * rs -----
13176 * rd -----
13177 */
13178 std::string NMD::SCDP(uint64 instruction)
13179 {
13180 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13181 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13182 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
13183
13184 std::string rt = GPR(copy(rt_value));
13185 std::string ru = GPR(copy(ru_value));
13186 std::string rs = GPR(copy(rs_value));
13187
13188 return img::format("SCDP %s, %s, (%s)", rt, ru, rs);
13189 }
13190
13191
13192 /*
13193 *
13194 *
13195 * 3 2 1
13196 * 10987654321098765432109876543210
13197 * 001000 01001001101
13198 * rt -----
13199 * rs -----
13200 * rd -----
13201 */
13202 std::string NMD::SCE(uint64 instruction)
13203 {
13204 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13205 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13206 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
13207
13208 std::string rt = GPR(copy(rt_value));
13209 std::string s = IMMEDIATE(copy(s_value));
13210 std::string rs = GPR(copy(rs_value));
13211
13212 return img::format("SCE %s, %s(%s)", rt, s, rs);
13213 }
13214
13215
13216 /*
13217 *
13218 *
13219 * 3 2 1
13220 * 10987654321098765432109876543210
13221 * 001000 01001001101
13222 * rt -----
13223 * rs -----
13224 * rd -----
13225 */
13226 std::string NMD::SCWP(uint64 instruction)
13227 {
13228 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13229 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13230 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
13231
13232 std::string rt = GPR(copy(rt_value));
13233 std::string ru = GPR(copy(ru_value));
13234 std::string rs = GPR(copy(rs_value));
13235
13236 return img::format("SCWP %s, %s, (%s)", rt, ru, rs);
13237 }
13238
13239
13240 /*
13241 *
13242 *
13243 * 3 2 1
13244 * 10987654321098765432109876543210
13245 * 001000 01001001101
13246 * rt -----
13247 * rs -----
13248 * rd -----
13249 */
13250 std::string NMD::SCWPE(uint64 instruction)
13251 {
13252 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13253 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13254 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
13255
13256 std::string rt = GPR(copy(rt_value));
13257 std::string ru = GPR(copy(ru_value));
13258 std::string rs = GPR(copy(rs_value));
13259
13260 return img::format("SCWPE %s, %s, (%s)", rt, ru, rs);
13261 }
13262
13263
13264 /*
13265 *
13266 *
13267 * 3 2 1
13268 * 10987654321098765432109876543210
13269 * 001000 01001001101
13270 * rt -----
13271 * rs -----
13272 * rd -----
13273 */
13274 std::string NMD::SD_GP_(uint64 instruction)
13275 {
13276 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13277 uint64 u_value = extract_u_20_to_3__s3(instruction);
13278
13279 std::string rt = GPR(copy(rt_value));
13280 std::string u = IMMEDIATE(copy(u_value));
13281
13282 return img::format("SD %s, %s($%d)", rt, u, 28);
13283 }
13284
13285
13286 /*
13287 *
13288 *
13289 * 3 2 1
13290 * 10987654321098765432109876543210
13291 * 001000 01001001101
13292 * rt -----
13293 * rs -----
13294 * rd -----
13295 */
13296 std::string NMD::SD_S9_(uint64 instruction)
13297 {
13298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13299 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13300 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13301
13302 std::string rt = GPR(copy(rt_value));
13303 std::string s = IMMEDIATE(copy(s_value));
13304 std::string rs = GPR(copy(rs_value));
13305
13306 return img::format("SD %s, %s(%s)", rt, s, rs);
13307 }
13308
13309
13310 /*
13311 *
13312 *
13313 * 3 2 1
13314 * 10987654321098765432109876543210
13315 * 001000 01001001101
13316 * rt -----
13317 * rs -----
13318 * rd -----
13319 */
13320 std::string NMD::SD_U12_(uint64 instruction)
13321 {
13322 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13323 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13324 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13325
13326 std::string rt = GPR(copy(rt_value));
13327 std::string u = IMMEDIATE(copy(u_value));
13328 std::string rs = GPR(copy(rs_value));
13329
13330 return img::format("SD %s, %s(%s)", rt, u, rs);
13331 }
13332
13333
13334 /*
13335 *
13336 *
13337 * 3 2 1
13338 * 10987654321098765432109876543210
13339 * 001000 01001001101
13340 * rt -----
13341 * rs -----
13342 * rd -----
13343 */
13344 std::string NMD::SDBBP_16_(uint64 instruction)
13345 {
13346 uint64 code_value = extract_code_2_1_0(instruction);
13347
13348 std::string code = IMMEDIATE(copy(code_value));
13349
13350 return img::format("SDBBP %s", code);
13351 }
13352
13353
13354 /*
13355 *
13356 *
13357 * 3 2 1
13358 * 10987654321098765432109876543210
13359 * 001000 01001001101
13360 * rt -----
13361 * rs -----
13362 * rd -----
13363 */
13364 std::string NMD::SDBBP_32_(uint64 instruction)
13365 {
13366 uint64 code_value = extract_code_18_to_0(instruction);
13367
13368 std::string code = IMMEDIATE(copy(code_value));
13369
13370 return img::format("SDBBP %s", code);
13371 }
13372
13373
13374 /*
13375 *
13376 *
13377 * 3 2 1
13378 * 10987654321098765432109876543210
13379 * 001000 01001001101
13380 * rt -----
13381 * rs -----
13382 * rd -----
13383 */
13384 std::string NMD::SDC1_GP_(uint64 instruction)
13385 {
13386 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13387 uint64 u_value = extract_u_17_to_2__s2(instruction);
13388
13389 std::string ft = FPR(copy(ft_value));
13390 std::string u = IMMEDIATE(copy(u_value));
13391
13392 return img::format("SDC1 %s, %s($%d)", ft, u, 28);
13393 }
13394
13395
13396 /*
13397 *
13398 *
13399 * 3 2 1
13400 * 10987654321098765432109876543210
13401 * 001000 01001001101
13402 * rt -----
13403 * rs -----
13404 * rd -----
13405 */
13406 std::string NMD::SDC1_S9_(uint64 instruction)
13407 {
13408 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13409 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13410 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13411
13412 std::string ft = FPR(copy(ft_value));
13413 std::string s = IMMEDIATE(copy(s_value));
13414 std::string rs = GPR(copy(rs_value));
13415
13416 return img::format("SDC1 %s, %s(%s)", ft, s, rs);
13417 }
13418
13419
13420 /*
13421 *
13422 *
13423 * 3 2 1
13424 * 10987654321098765432109876543210
13425 * 001000 01001001101
13426 * rt -----
13427 * rs -----
13428 * rd -----
13429 */
13430 std::string NMD::SDC1_U12_(uint64 instruction)
13431 {
13432 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13433 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13434 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13435
13436 std::string ft = FPR(copy(ft_value));
13437 std::string u = IMMEDIATE(copy(u_value));
13438 std::string rs = GPR(copy(rs_value));
13439
13440 return img::format("SDC1 %s, %s(%s)", ft, u, rs);
13441 }
13442
13443
13444 /*
13445 *
13446 *
13447 * 3 2 1
13448 * 10987654321098765432109876543210
13449 * 001000 01001001101
13450 * rt -----
13451 * rs -----
13452 * rd -----
13453 */
13454 std::string NMD::SDC1X(uint64 instruction)
13455 {
13456 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13457 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13458 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
13459
13460 std::string ft = FPR(copy(ft_value));
13461 std::string rs = GPR(copy(rs_value));
13462 std::string rt = GPR(copy(rt_value));
13463
13464 return img::format("SDC1X %s, %s(%s)", ft, rs, rt);
13465 }
13466
13467
13468 /*
13469 *
13470 *
13471 * 3 2 1
13472 * 10987654321098765432109876543210
13473 * 001000 01001001101
13474 * rt -----
13475 * rs -----
13476 * rd -----
13477 */
13478 std::string NMD::SDC1XS(uint64 instruction)
13479 {
13480 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13481 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13482 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
13483
13484 std::string ft = FPR(copy(ft_value));
13485 std::string rs = GPR(copy(rs_value));
13486 std::string rt = GPR(copy(rt_value));
13487
13488 return img::format("SDC1XS %s, %s(%s)", ft, rs, rt);
13489 }
13490
13491
13492 /*
13493 *
13494 *
13495 * 3 2 1
13496 * 10987654321098765432109876543210
13497 * 001000 01001001101
13498 * rt -----
13499 * rs -----
13500 * rd -----
13501 */
13502 std::string NMD::SDC2(uint64 instruction)
13503 {
13504 uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
13505 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13506 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13507
13508 std::string cs = CPR(copy(cs_value));
13509 std::string s = IMMEDIATE(copy(s_value));
13510 std::string rs = GPR(copy(rs_value));
13511
13512 return img::format("SDC2 %s, %s(%s)", cs, s, rs);
13513 }
13514
13515
13516 /*
13517 *
13518 *
13519 * 3 2 1
13520 * 10987654321098765432109876543210
13521 * 001000 01001001101
13522 * rt -----
13523 * rs -----
13524 * rd -----
13525 */
13526 std::string NMD::SDM(uint64 instruction)
13527 {
13528 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13529 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13530 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13531 uint64 count3_value = extract_count3_14_13_12(instruction);
13532
13533 std::string rt = GPR(copy(rt_value));
13534 std::string s = IMMEDIATE(copy(s_value));
13535 std::string rs = GPR(copy(rs_value));
13536 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
13537
13538 return img::format("SDM %s, %s(%s), %s", rt, s, rs, count3);
13539 }
13540
13541
13542 /*
13543 *
13544 *
13545 * 3 2 1
13546 * 10987654321098765432109876543210
13547 * 001000 01001001101
13548 * rt -----
13549 * rs -----
13550 * rd -----
13551 */
13552 std::string NMD::SDPC_48_(uint64 instruction)
13553 {
13554 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
13555 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
13556
13557 std::string rt = GPR(copy(rt_value));
13558 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
13559
13560 return img::format("SDPC %s, %s", rt, s);
13561 }
13562
13563
13564 /*
13565 *
13566 *
13567 * 3 2 1
13568 * 10987654321098765432109876543210
13569 * 001000 01001001101
13570 * rt -----
13571 * rs -----
13572 * rd -----
13573 */
13574 std::string NMD::SDXS(uint64 instruction)
13575 {
13576 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13577 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13578 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13579
13580 std::string rd = GPR(copy(rd_value));
13581 std::string rs = GPR(copy(rs_value));
13582 std::string rt = GPR(copy(rt_value));
13583
13584 return img::format("SDXS %s, %s(%s)", rd, rs, rt);
13585 }
13586
13587
13588 /*
13589 *
13590 *
13591 * 3 2 1
13592 * 10987654321098765432109876543210
13593 * 001000 01001001101
13594 * rt -----
13595 * rs -----
13596 * rd -----
13597 */
13598 std::string NMD::SDX(uint64 instruction)
13599 {
13600 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13601 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13602 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13603
13604 std::string rd = GPR(copy(rd_value));
13605 std::string rs = GPR(copy(rs_value));
13606 std::string rt = GPR(copy(rt_value));
13607
13608 return img::format("SDX %s, %s(%s)", rd, rs, rt);
13609 }
13610
13611
13612 /*
13613 *
13614 *
13615 * 3 2 1
13616 * 10987654321098765432109876543210
13617 * 001000 01001001101
13618 * rt -----
13619 * rs -----
13620 * rd -----
13621 */
13622 std::string NMD::SEB(uint64 instruction)
13623 {
13624 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13625 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13626
13627 std::string rt = GPR(copy(rt_value));
13628 std::string rs = GPR(copy(rs_value));
13629
13630 return img::format("SEB %s, %s", rt, rs);
13631 }
13632
13633
13634 /*
13635 *
13636 *
13637 * 3 2 1
13638 * 10987654321098765432109876543210
13639 * 001000 01001001101
13640 * rt -----
13641 * rs -----
13642 * rd -----
13643 */
13644 std::string NMD::SEH(uint64 instruction)
13645 {
13646 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13647 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13648
13649 std::string rt = GPR(copy(rt_value));
13650 std::string rs = GPR(copy(rs_value));
13651
13652 return img::format("SEH %s, %s", rt, rs);
13653 }
13654
13655
13656 /*
13657 *
13658 *
13659 * 3 2 1
13660 * 10987654321098765432109876543210
13661 * 001000 01001001101
13662 * rt -----
13663 * rs -----
13664 * rd -----
13665 */
13666 std::string NMD::SEL_D(uint64 instruction)
13667 {
13668 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13669 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13670 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13671
13672 std::string fd = FPR(copy(fd_value));
13673 std::string fs = FPR(copy(fs_value));
13674 std::string ft = FPR(copy(ft_value));
13675
13676 return img::format("SEL.D %s, %s, %s", fd, fs, ft);
13677 }
13678
13679
13680 /*
13681 *
13682 *
13683 * 3 2 1
13684 * 10987654321098765432109876543210
13685 * 001000 01001001101
13686 * rt -----
13687 * rs -----
13688 * rd -----
13689 */
13690 std::string NMD::SEL_S(uint64 instruction)
13691 {
13692 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13693 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13694 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13695
13696 std::string fd = FPR(copy(fd_value));
13697 std::string fs = FPR(copy(fs_value));
13698 std::string ft = FPR(copy(ft_value));
13699
13700 return img::format("SEL.S %s, %s, %s", fd, fs, ft);
13701 }
13702
13703
13704 /*
13705 *
13706 *
13707 * 3 2 1
13708 * 10987654321098765432109876543210
13709 * 001000 01001001101
13710 * rt -----
13711 * rs -----
13712 * rd -----
13713 */
13714 std::string NMD::SELEQZ_D(uint64 instruction)
13715 {
13716 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13717 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13718 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13719
13720 std::string fd = FPR(copy(fd_value));
13721 std::string fs = FPR(copy(fs_value));
13722 std::string ft = FPR(copy(ft_value));
13723
13724 return img::format("SELEQZ.D %s, %s, %s", fd, fs, ft);
13725 }
13726
13727
13728 /*
13729 *
13730 *
13731 * 3 2 1
13732 * 10987654321098765432109876543210
13733 * 001000 01001001101
13734 * rt -----
13735 * rs -----
13736 * rd -----
13737 */
13738 std::string NMD::SELEQZ_S(uint64 instruction)
13739 {
13740 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13741 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13742 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13743
13744 std::string fd = FPR(copy(fd_value));
13745 std::string fs = FPR(copy(fs_value));
13746 std::string ft = FPR(copy(ft_value));
13747
13748 return img::format("SELEQZ.S %s, %s, %s", fd, fs, ft);
13749 }
13750
13751
13752 /*
13753 *
13754 *
13755 * 3 2 1
13756 * 10987654321098765432109876543210
13757 * 001000 01001001101
13758 * rt -----
13759 * rs -----
13760 * rd -----
13761 */
13762 std::string NMD::SELNEZ_D(uint64 instruction)
13763 {
13764 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13765 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13766 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13767
13768 std::string fd = FPR(copy(fd_value));
13769 std::string fs = FPR(copy(fs_value));
13770 std::string ft = FPR(copy(ft_value));
13771
13772 return img::format("SELNEZ.D %s, %s, %s", fd, fs, ft);
13773 }
13774
13775
13776 /*
13777 *
13778 *
13779 * 3 2 1
13780 * 10987654321098765432109876543210
13781 * 001000 01001001101
13782 * rt -----
13783 * rs -----
13784 * rd -----
13785 */
13786 std::string NMD::SELNEZ_S(uint64 instruction)
13787 {
13788 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13789 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13790 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13791
13792 std::string fd = FPR(copy(fd_value));
13793 std::string fs = FPR(copy(fs_value));
13794 std::string ft = FPR(copy(ft_value));
13795
13796 return img::format("SELNEZ.S %s, %s, %s", fd, fs, ft);
13797 }
13798
13799
13800 /*
13801 *
13802 *
13803 * 3 2 1
13804 * 10987654321098765432109876543210
13805 * 001000 01001001101
13806 * rt -----
13807 * rs -----
13808 * rd -----
13809 */
13810 std::string NMD::SEQI(uint64 instruction)
13811 {
13812 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13813 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13814 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13815
13816 std::string rt = GPR(copy(rt_value));
13817 std::string rs = GPR(copy(rs_value));
13818 std::string u = IMMEDIATE(copy(u_value));
13819
13820 return img::format("SEQI %s, %s, %s", rt, rs, u);
13821 }
13822
13823
13824 /*
13825 *
13826 *
13827 * 3 2 1
13828 * 10987654321098765432109876543210
13829 * 001000 01001001101
13830 * rt -----
13831 * rs -----
13832 * rd -----
13833 */
13834 std::string NMD::SH_16_(uint64 instruction)
13835 {
13836 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
13837 uint64 rs3_value = extract_rs3_6_5_4(instruction);
13838 uint64 u_value = extract_u_2_1__s1(instruction);
13839
13840 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
13841 std::string u = IMMEDIATE(copy(u_value));
13842 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
13843
13844 return img::format("SH %s, %s(%s)", rtz3, u, rs3);
13845 }
13846
13847
13848 /*
13849 *
13850 *
13851 * 3 2 1
13852 * 10987654321098765432109876543210
13853 * 001000 01001001101
13854 * rt -----
13855 * rs -----
13856 * rd -----
13857 */
13858 std::string NMD::SH_GP_(uint64 instruction)
13859 {
13860 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13861 uint64 u_value = extract_u_17_to_1__s1(instruction);
13862
13863 std::string rt = GPR(copy(rt_value));
13864 std::string u = IMMEDIATE(copy(u_value));
13865
13866 return img::format("SH %s, %s($%d)", rt, u, 28);
13867 }
13868
13869
13870 /*
13871 *
13872 *
13873 * 3 2 1
13874 * 10987654321098765432109876543210
13875 * 001000 01001001101
13876 * rt -----
13877 * rs -----
13878 * rd -----
13879 */
13880 std::string NMD::SH_S9_(uint64 instruction)
13881 {
13882 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13883 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13884 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13885
13886 std::string rt = GPR(copy(rt_value));
13887 std::string s = IMMEDIATE(copy(s_value));
13888 std::string rs = GPR(copy(rs_value));
13889
13890 return img::format("SH %s, %s(%s)", rt, s, rs);
13891 }
13892
13893
13894 /*
13895 *
13896 *
13897 * 3 2 1
13898 * 10987654321098765432109876543210
13899 * 001000 01001001101
13900 * rt -----
13901 * rs -----
13902 * rd -----
13903 */
13904 std::string NMD::SH_U12_(uint64 instruction)
13905 {
13906 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13907 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13908 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13909
13910 std::string rt = GPR(copy(rt_value));
13911 std::string u = IMMEDIATE(copy(u_value));
13912 std::string rs = GPR(copy(rs_value));
13913
13914 return img::format("SH %s, %s(%s)", rt, u, rs);
13915 }
13916
13917
13918 /*
13919 *
13920 *
13921 * 3 2 1
13922 * 10987654321098765432109876543210
13923 * 001000 01001001101
13924 * rt -----
13925 * rs -----
13926 * rd -----
13927 */
13928 std::string NMD::SHE(uint64 instruction)
13929 {
13930 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13931 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13932 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13933
13934 std::string rt = GPR(copy(rt_value));
13935 std::string s = IMMEDIATE(copy(s_value));
13936 std::string rs = GPR(copy(rs_value));
13937
13938 return img::format("SHE %s, %s(%s)", rt, s, rs);
13939 }
13940
13941
13942 /*
13943 * [DSP] SHILO ac, shift - Shift an accumulator value leaving the result in
13944 * the same accumulator
13945 *
13946 * 3 2 1
13947 * 10987654321098765432109876543210
13948 * 001000xxxx xxxx0000011101
13949 * shift ------
13950 * ac --
13951 */
13952 std::string NMD::SHILO(uint64 instruction)
13953 {
13954 int64 shift_value = extract_shift__se5_21_20_19_18_17_16(instruction);
13955 uint64 ac_value = extract_ac_15_14(instruction);
13956
13957 std::string shift = IMMEDIATE(copy(shift_value));
13958 std::string ac = AC(copy(ac_value));
13959
13960 return img::format("SHILO %s, %s", ac, shift);
13961 }
13962
13963
13964 /*
13965 * [DSP] SHILOV ac, rs - Variable shift of accumulator value leaving the result
13966 * in the same accumulator
13967 *
13968 * 3 2 1
13969 * 10987654321098765432109876543210
13970 * 001000xxxxx 01001001111111
13971 * rs -----
13972 * ac --
13973 */
13974 std::string NMD::SHILOV(uint64 instruction)
13975 {
13976 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13977 uint64 ac_value = extract_ac_15_14(instruction);
13978
13979 std::string rs = GPR(copy(rs_value));
13980 std::string ac = AC(copy(ac_value));
13981
13982 return img::format("SHILOV %s, %s", ac, rs);
13983 }
13984
13985
13986 /*
13987 * [DSP] SHLL.PH rt, rs, sa - Shift left logical vector pair halfwords
13988 *
13989 * 3 2 1
13990 * 10987654321098765432109876543210
13991 * 001000 001110110101
13992 * rt -----
13993 * rs -----
13994 * sa ----
13995 */
13996 std::string NMD::SHLL_PH(uint64 instruction)
13997 {
13998 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13999 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14000 uint64 sa_value = extract_sa_15_14_13_12(instruction);
14001
14002 std::string rt = GPR(copy(rt_value));
14003 std::string rs = GPR(copy(rs_value));
14004 std::string sa = IMMEDIATE(copy(sa_value));
14005
14006 return img::format("SHLL.PH %s, %s, %s", rt, rs, sa);
14007 }
14008
14009
14010 /*
14011 * [DSP] SHLL.QB rt, rs, sa - Shift left logical vector quad bytes
14012 *
14013 * 3 2 1
14014 * 10987654321098765432109876543210
14015 * 001000 0100001111111
14016 * rt -----
14017 * rs -----
14018 * sa ---
14019 */
14020 std::string NMD::SHLL_QB(uint64 instruction)
14021 {
14022 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14023 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14024 uint64 sa_value = extract_sa_15_14_13(instruction);
14025
14026 std::string rt = GPR(copy(rt_value));
14027 std::string rs = GPR(copy(rs_value));
14028 std::string sa = IMMEDIATE(copy(sa_value));
14029
14030 return img::format("SHLL.QB %s, %s, %s", rt, rs, sa);
14031 }
14032
14033
14034 /*
14035 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical vector pair halfwords
14036 * with saturation
14037 *
14038 * 3 2 1
14039 * 10987654321098765432109876543210
14040 * 001000 001110110101
14041 * rt -----
14042 * rs -----
14043 * sa ----
14044 */
14045 std::string NMD::SHLL_S_PH(uint64 instruction)
14046 {
14047 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14048 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14049 uint64 sa_value = extract_sa_15_14_13_12(instruction);
14050
14051 std::string rt = GPR(copy(rt_value));
14052 std::string rs = GPR(copy(rs_value));
14053 std::string sa = IMMEDIATE(copy(sa_value));
14054
14055 return img::format("SHLL_S.PH %s, %s, %s", rt, rs, sa);
14056 }
14057
14058
14059 /*
14060 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical word with saturation
14061 *
14062 * 3 2 1
14063 * 10987654321098765432109876543210
14064 * 001000 x1111110101
14065 * rt -----
14066 * rs -----
14067 * sa -----
14068 */
14069 std::string NMD::SHLL_S_W(uint64 instruction)
14070 {
14071 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14072 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14073 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
14074
14075 std::string rt = GPR(copy(rt_value));
14076 std::string rs = GPR(copy(rs_value));
14077 std::string sa = IMMEDIATE(copy(sa_value));
14078
14079 return img::format("SHLL_S.W %s, %s, %s", rt, rs, sa);
14080 }
14081
14082
14083 /*
14084 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
14085 * halfwords
14086 *
14087 * 3 2 1
14088 * 10987654321098765432109876543210
14089 * 001000 01110001101
14090 * rt -----
14091 * rs -----
14092 * rd -----
14093 */
14094 std::string NMD::SHLLV_PH(uint64 instruction)
14095 {
14096 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14097 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14098 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14099
14100 std::string rd = GPR(copy(rd_value));
14101 std::string rt = GPR(copy(rt_value));
14102 std::string rs = GPR(copy(rs_value));
14103
14104 return img::format("SHLLV.PH %s, %s, %s", rd, rt, rs);
14105 }
14106
14107
14108 /*
14109 * [DSP] SHLLV_S.QB rd, rt, rs - Shift left logical variable vector quad bytes
14110 *
14111 * 3 2 1
14112 * 10987654321098765432109876543210
14113 * 001000 x1110010101
14114 * rt -----
14115 * rs -----
14116 * rd -----
14117 */
14118 std::string NMD::SHLLV_QB(uint64 instruction)
14119 {
14120 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14121 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14122 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14123
14124 std::string rd = GPR(copy(rd_value));
14125 std::string rt = GPR(copy(rt_value));
14126 std::string rs = GPR(copy(rs_value));
14127
14128 return img::format("SHLLV.QB %s, %s, %s", rd, rt, rs);
14129 }
14130
14131
14132 /*
14133 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
14134 * halfwords with saturation
14135 *
14136 * 3 2 1
14137 * 10987654321098765432109876543210
14138 * 001000 11110001101
14139 * rt -----
14140 * rs -----
14141 * rd -----
14142 */
14143 std::string NMD::SHLLV_S_PH(uint64 instruction)
14144 {
14145 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14146 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14147 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14148
14149 std::string rd = GPR(copy(rd_value));
14150 std::string rt = GPR(copy(rt_value));
14151 std::string rs = GPR(copy(rs_value));
14152
14153 return img::format("SHLLV_S.PH %s, %s, %s", rd, rt, rs);
14154 }
14155
14156
14157 /*
14158 * [DSP] SHLLV_S.W rd, rt, rs - Shift left logical variable vector word
14159 *
14160 * 3 2 1
14161 * 10987654321098765432109876543210
14162 * 001000 x1111010101
14163 * rt -----
14164 * rs -----
14165 * rd -----
14166 */
14167 std::string NMD::SHLLV_S_W(uint64 instruction)
14168 {
14169 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14170 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14171 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14172
14173 std::string rd = GPR(copy(rd_value));
14174 std::string rt = GPR(copy(rt_value));
14175 std::string rs = GPR(copy(rs_value));
14176
14177 return img::format("SHLLV_S.W %s, %s, %s", rd, rt, rs);
14178 }
14179
14180
14181 /*
14182 *
14183 *
14184 * 3 2 1
14185 * 10987654321098765432109876543210
14186 * 001000 01001001101
14187 * rt -----
14188 * rs -----
14189 * rd -----
14190 */
14191 std::string NMD::SHRA_PH(uint64 instruction)
14192 {
14193 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14194 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14195 uint64 sa_value = extract_sa_15_14_13_12(instruction);
14196
14197 std::string rt = GPR(copy(rt_value));
14198 std::string rs = GPR(copy(rs_value));
14199 std::string sa = IMMEDIATE(copy(sa_value));
14200
14201 return img::format("SHRA.PH %s, %s, %s", rt, rs, sa);
14202 }
14203
14204
14205 /*
14206 *
14207 *
14208 * 3 2 1
14209 * 10987654321098765432109876543210
14210 * 001000 01001001101
14211 * rt -----
14212 * rs -----
14213 * rd -----
14214 */
14215 std::string NMD::SHRA_QB(uint64 instruction)
14216 {
14217 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14218 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14219 uint64 sa_value = extract_sa_15_14_13(instruction);
14220
14221 std::string rt = GPR(copy(rt_value));
14222 std::string rs = GPR(copy(rs_value));
14223 std::string sa = IMMEDIATE(copy(sa_value));
14224
14225 return img::format("SHRA.QB %s, %s, %s", rt, rs, sa);
14226 }
14227
14228
14229 /*
14230 *
14231 *
14232 * 3 2 1
14233 * 10987654321098765432109876543210
14234 * 001000 01001001101
14235 * rt -----
14236 * rs -----
14237 * rd -----
14238 */
14239 std::string NMD::SHRA_R_PH(uint64 instruction)
14240 {
14241 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14242 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14243 uint64 sa_value = extract_sa_15_14_13_12(instruction);
14244
14245 std::string rt = GPR(copy(rt_value));
14246 std::string rs = GPR(copy(rs_value));
14247 std::string sa = IMMEDIATE(copy(sa_value));
14248
14249 return img::format("SHRA_R.PH %s, %s, %s", rt, rs, sa);
14250 }
14251
14252
14253 /*
14254 *
14255 *
14256 * 3 2 1
14257 * 10987654321098765432109876543210
14258 * 001000 01001001101
14259 * rt -----
14260 * rs -----
14261 * rd -----
14262 */
14263 std::string NMD::SHRA_R_QB(uint64 instruction)
14264 {
14265 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14266 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14267 uint64 sa_value = extract_sa_15_14_13(instruction);
14268
14269 std::string rt = GPR(copy(rt_value));
14270 std::string rs = GPR(copy(rs_value));
14271 std::string sa = IMMEDIATE(copy(sa_value));
14272
14273 return img::format("SHRA_R.QB %s, %s, %s", rt, rs, sa);
14274 }
14275
14276
14277 /*
14278 *
14279 *
14280 * 3 2 1
14281 * 10987654321098765432109876543210
14282 * 001000 01001001101
14283 * rt -----
14284 * rs -----
14285 * rd -----
14286 */
14287 std::string NMD::SHRA_R_W(uint64 instruction)
14288 {
14289 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14290 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14291 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
14292
14293 std::string rt = GPR(copy(rt_value));
14294 std::string rs = GPR(copy(rs_value));
14295 std::string sa = IMMEDIATE(copy(sa_value));
14296
14297 return img::format("SHRA_R.W %s, %s, %s", rt, rs, sa);
14298 }
14299
14300
14301 /*
14302 *
14303 *
14304 * 3 2 1
14305 * 10987654321098765432109876543210
14306 * 001000 01001001101
14307 * rt -----
14308 * rs -----
14309 * rd -----
14310 */
14311 std::string NMD::SHRAV_PH(uint64 instruction)
14312 {
14313 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14314 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14315 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14316
14317 std::string rd = GPR(copy(rd_value));
14318 std::string rt = GPR(copy(rt_value));
14319 std::string rs = GPR(copy(rs_value));
14320
14321 return img::format("SHRAV.PH %s, %s, %s", rd, rt, rs);
14322 }
14323
14324
14325 /*
14326 *
14327 *
14328 * 3 2 1
14329 * 10987654321098765432109876543210
14330 * 001000 01001001101
14331 * rt -----
14332 * rs -----
14333 * rd -----
14334 */
14335 std::string NMD::SHRAV_QB(uint64 instruction)
14336 {
14337 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14338 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14339 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14340
14341 std::string rd = GPR(copy(rd_value));
14342 std::string rt = GPR(copy(rt_value));
14343 std::string rs = GPR(copy(rs_value));
14344
14345 return img::format("SHRAV.QB %s, %s, %s", rd, rt, rs);
14346 }
14347
14348
14349 /*
14350 *
14351 *
14352 * 3 2 1
14353 * 10987654321098765432109876543210
14354 * 001000 01001001101
14355 * rt -----
14356 * rs -----
14357 * rd -----
14358 */
14359 std::string NMD::SHRAV_R_PH(uint64 instruction)
14360 {
14361 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14362 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14363 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14364
14365 std::string rd = GPR(copy(rd_value));
14366 std::string rt = GPR(copy(rt_value));
14367 std::string rs = GPR(copy(rs_value));
14368
14369 return img::format("SHRAV_R.PH %s, %s, %s", rd, rt, rs);
14370 }
14371
14372
14373 /*
14374 *
14375 *
14376 * 3 2 1
14377 * 10987654321098765432109876543210
14378 * 001000 01001001101
14379 * rt -----
14380 * rs -----
14381 * rd -----
14382 */
14383 std::string NMD::SHRAV_R_QB(uint64 instruction)
14384 {
14385 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14386 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14387 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14388
14389 std::string rd = GPR(copy(rd_value));
14390 std::string rt = GPR(copy(rt_value));
14391 std::string rs = GPR(copy(rs_value));
14392
14393 return img::format("SHRAV_R.QB %s, %s, %s", rd, rt, rs);
14394 }
14395
14396
14397 /*
14398 *
14399 *
14400 * 3 2 1
14401 * 10987654321098765432109876543210
14402 * 001000 01001001101
14403 * rt -----
14404 * rs -----
14405 * rd -----
14406 */
14407 std::string NMD::SHRAV_R_W(uint64 instruction)
14408 {
14409 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14410 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14411 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14412
14413 std::string rd = GPR(copy(rd_value));
14414 std::string rt = GPR(copy(rt_value));
14415 std::string rs = GPR(copy(rs_value));
14416
14417 return img::format("SHRAV_R.W %s, %s, %s", rd, rt, rs);
14418 }
14419
14420
14421 /*
14422 * [DSP] SHRL.PH rt, rs, sa - Shift right logical two halfwords
14423 *
14424 * 3 2 1
14425 * 10987654321098765432109876543210
14426 * 001000 001111111111
14427 * rt -----
14428 * rs -----
14429 * sa ----
14430 */
14431 std::string NMD::SHRL_PH(uint64 instruction)
14432 {
14433 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14434 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14435 uint64 sa_value = extract_sa_15_14_13_12(instruction);
14436
14437 std::string rt = GPR(copy(rt_value));
14438 std::string rs = GPR(copy(rs_value));
14439 std::string sa = IMMEDIATE(copy(sa_value));
14440
14441 return img::format("SHRL.PH %s, %s, %s", rt, rs, sa);
14442 }
14443
14444
14445 /*
14446 * [DSP] SHRL.QB rt, rs, sa - Shift right logical vector quad bytes
14447 *
14448 * 3 2 1
14449 * 10987654321098765432109876543210
14450 * 001000 1100001111111
14451 * rt -----
14452 * rs -----
14453 * sa ---
14454 */
14455 std::string NMD::SHRL_QB(uint64 instruction)
14456 {
14457 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14458 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14459 uint64 sa_value = extract_sa_15_14_13(instruction);
14460
14461 std::string rt = GPR(copy(rt_value));
14462 std::string rs = GPR(copy(rs_value));
14463 std::string sa = IMMEDIATE(copy(sa_value));
14464
14465 return img::format("SHRL.QB %s, %s, %s", rt, rs, sa);
14466 }
14467
14468
14469 /*
14470 * [DSP] SHLLV.PH rd, rt, rs - Shift right logical variable vector pair of
14471 * halfwords
14472 *
14473 * 3 2 1
14474 * 10987654321098765432109876543210
14475 * 001000 x1100010101
14476 * rt -----
14477 * rs -----
14478 * rd -----
14479 */
14480 std::string NMD::SHRLV_PH(uint64 instruction)
14481 {
14482 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14483 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14484 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14485
14486 std::string rd = GPR(copy(rd_value));
14487 std::string rt = GPR(copy(rt_value));
14488 std::string rs = GPR(copy(rs_value));
14489
14490 return img::format("SHRLV.PH %s, %s, %s", rd, rt, rs);
14491 }
14492
14493
14494 /*
14495 * [DSP] SHLLV.QB rd, rt, rs - Shift right logical variable vector quad bytes
14496 *
14497 * 3 2 1
14498 * 10987654321098765432109876543210
14499 * 001000 x1101010101
14500 * rt -----
14501 * rs -----
14502 * rd -----
14503 */
14504 std::string NMD::SHRLV_QB(uint64 instruction)
14505 {
14506 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14507 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14508 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14509
14510 std::string rd = GPR(copy(rd_value));
14511 std::string rt = GPR(copy(rt_value));
14512 std::string rs = GPR(copy(rs_value));
14513
14514 return img::format("SHRLV.QB %s, %s, %s", rd, rt, rs);
14515 }
14516
14517
14518 /*
14519 *
14520 *
14521 * 3 2 1
14522 * 10987654321098765432109876543210
14523 * 001000 01001001101
14524 * rt -----
14525 * rs -----
14526 * rd -----
14527 */
14528 std::string NMD::SHX(uint64 instruction)
14529 {
14530 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14531 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14532 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14533
14534 std::string rd = GPR(copy(rd_value));
14535 std::string rs = GPR(copy(rs_value));
14536 std::string rt = GPR(copy(rt_value));
14537
14538 return img::format("SHX %s, %s(%s)", rd, rs, rt);
14539 }
14540
14541
14542 /*
14543 *
14544 *
14545 * 3 2 1
14546 * 10987654321098765432109876543210
14547 * 001000 01001001101
14548 * rt -----
14549 * rs -----
14550 * rd -----
14551 */
14552 std::string NMD::SHXS(uint64 instruction)
14553 {
14554 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14555 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14556 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14557
14558 std::string rd = GPR(copy(rd_value));
14559 std::string rs = GPR(copy(rs_value));
14560 std::string rt = GPR(copy(rt_value));
14561
14562 return img::format("SHXS %s, %s(%s)", rd, rs, rt);
14563 }
14564
14565
14566 /*
14567 *
14568 *
14569 * 3 2 1
14570 * 10987654321098765432109876543210
14571 * 001000 01001001101
14572 * rt -----
14573 * rs -----
14574 * rd -----
14575 */
14576 std::string NMD::SIGRIE(uint64 instruction)
14577 {
14578 uint64 code_value = extract_code_18_to_0(instruction);
14579
14580 std::string code = IMMEDIATE(copy(code_value));
14581
14582 return img::format("SIGRIE %s", code);
14583 }
14584
14585
14586 /*
14587 *
14588 *
14589 * 3 2 1
14590 * 10987654321098765432109876543210
14591 * 001000 01001001101
14592 * rt -----
14593 * rs -----
14594 * rd -----
14595 */
14596 std::string NMD::SLL_16_(uint64 instruction)
14597 {
14598 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14599 uint64 rs3_value = extract_rs3_6_5_4(instruction);
14600 uint64 shift3_value = extract_shift3_2_1_0(instruction);
14601
14602 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
14603 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
14604 std::string shift3 = IMMEDIATE(encode_shift3_from_shift(shift3_value));
14605
14606 return img::format("SLL %s, %s, %s", rt3, rs3, shift3);
14607 }
14608
14609
14610 /*
14611 *
14612 *
14613 * 3 2 1
14614 * 10987654321098765432109876543210
14615 * 001000 01001001101
14616 * rt -----
14617 * rs -----
14618 * rd -----
14619 */
14620 std::string NMD::SLL_32_(uint64 instruction)
14621 {
14622 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14623 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14624 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14625
14626 std::string rt = GPR(copy(rt_value));
14627 std::string rs = GPR(copy(rs_value));
14628 std::string shift = IMMEDIATE(copy(shift_value));
14629
14630 return img::format("SLL %s, %s, %s", rt, rs, shift);
14631 }
14632
14633
14634 /*
14635 *
14636 *
14637 * 3 2 1
14638 * 10987654321098765432109876543210
14639 * 001000 01001001101
14640 * rt -----
14641 * rs -----
14642 * rd -----
14643 */
14644 std::string NMD::SLLV(uint64 instruction)
14645 {
14646 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14647 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14648 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14649
14650 std::string rd = GPR(copy(rd_value));
14651 std::string rs = GPR(copy(rs_value));
14652 std::string rt = GPR(copy(rt_value));
14653
14654 return img::format("SLLV %s, %s, %s", rd, rs, rt);
14655 }
14656
14657
14658 /*
14659 *
14660 *
14661 * 3 2 1
14662 * 10987654321098765432109876543210
14663 * 001000 01001001101
14664 * rt -----
14665 * rs -----
14666 * rd -----
14667 */
14668 std::string NMD::SLT(uint64 instruction)
14669 {
14670 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14671 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14672 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14673
14674 std::string rd = GPR(copy(rd_value));
14675 std::string rs = GPR(copy(rs_value));
14676 std::string rt = GPR(copy(rt_value));
14677
14678 return img::format("SLT %s, %s, %s", rd, rs, rt);
14679 }
14680
14681
14682 /*
14683 *
14684 *
14685 * 3 2 1
14686 * 10987654321098765432109876543210
14687 * 001000 01001001101
14688 * rt -----
14689 * rs -----
14690 * rd -----
14691 */
14692 std::string NMD::SLTI(uint64 instruction)
14693 {
14694 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14695 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14696 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14697
14698 std::string rt = GPR(copy(rt_value));
14699 std::string rs = GPR(copy(rs_value));
14700 std::string u = IMMEDIATE(copy(u_value));
14701
14702 return img::format("SLTI %s, %s, %s", rt, rs, u);
14703 }
14704
14705
14706 /*
14707 *
14708 *
14709 * 3 2 1
14710 * 10987654321098765432109876543210
14711 * 001000 01001001101
14712 * rt -----
14713 * rs -----
14714 * rd -----
14715 */
14716 std::string NMD::SLTIU(uint64 instruction)
14717 {
14718 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14719 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14720 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14721
14722 std::string rt = GPR(copy(rt_value));
14723 std::string rs = GPR(copy(rs_value));
14724 std::string u = IMMEDIATE(copy(u_value));
14725
14726 return img::format("SLTIU %s, %s, %s", rt, rs, u);
14727 }
14728
14729
14730 /*
14731 *
14732 *
14733 * 3 2 1
14734 * 10987654321098765432109876543210
14735 * 001000 01001001101
14736 * rt -----
14737 * rs -----
14738 * rd -----
14739 */
14740 std::string NMD::SLTU(uint64 instruction)
14741 {
14742 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14743 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14744 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14745
14746 std::string rd = GPR(copy(rd_value));
14747 std::string rs = GPR(copy(rs_value));
14748 std::string rt = GPR(copy(rt_value));
14749
14750 return img::format("SLTU %s, %s, %s", rd, rs, rt);
14751 }
14752
14753
14754 /*
14755 *
14756 *
14757 * 3 2 1
14758 * 10987654321098765432109876543210
14759 * 001000 01001001101
14760 * rt -----
14761 * rs -----
14762 * rd -----
14763 */
14764 std::string NMD::SOV(uint64 instruction)
14765 {
14766 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14767 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14768 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14769
14770 std::string rd = GPR(copy(rd_value));
14771 std::string rs = GPR(copy(rs_value));
14772 std::string rt = GPR(copy(rt_value));
14773
14774 return img::format("SOV %s, %s, %s", rd, rs, rt);
14775 }
14776
14777
14778 /*
14779 *
14780 *
14781 * 3 2 1
14782 * 10987654321098765432109876543210
14783 * 001000 01001001101
14784 * rt -----
14785 * rs -----
14786 * rd -----
14787 */
14788 std::string NMD::SPECIAL2(uint64 instruction)
14789 {
14790 uint64 op_value = extract_op_25_to_3(instruction);
14791
14792 std::string op = IMMEDIATE(copy(op_value));
14793
14794 return img::format("SPECIAL2 %s", op);
14795 }
14796
14797
14798 /*
14799 *
14800 *
14801 * 3 2 1
14802 * 10987654321098765432109876543210
14803 * 001000 01001001101
14804 * rt -----
14805 * rs -----
14806 * rd -----
14807 */
14808 std::string NMD::SQRT_D(uint64 instruction)
14809 {
14810 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14811 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14812
14813 std::string ft = FPR(copy(ft_value));
14814 std::string fs = FPR(copy(fs_value));
14815
14816 return img::format("SQRT.D %s, %s", ft, fs);
14817 }
14818
14819
14820 /*
14821 *
14822 *
14823 * 3 2 1
14824 * 10987654321098765432109876543210
14825 * 001000 01001001101
14826 * rt -----
14827 * rs -----
14828 * rd -----
14829 */
14830 std::string NMD::SQRT_S(uint64 instruction)
14831 {
14832 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14833 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14834
14835 std::string ft = FPR(copy(ft_value));
14836 std::string fs = FPR(copy(fs_value));
14837
14838 return img::format("SQRT.S %s, %s", ft, fs);
14839 }
14840
14841
14842 /*
14843 * SRA rd, rt, sa - Shift Word Right Arithmetic
14844 *
14845 * 3 2 1
14846 * 10987654321098765432109876543210
14847 * 00000000000 000011
14848 * rt -----
14849 * rd -----
14850 * sa -----
14851 */
14852 std::string NMD::SRA(uint64 instruction)
14853 {
14854 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14855 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14856 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14857
14858 std::string rt = GPR(copy(rt_value));
14859 std::string rs = GPR(copy(rs_value));
14860 std::string shift = IMMEDIATE(copy(shift_value));
14861
14862 return img::format("SRA %s, %s, %s", rt, rs, shift);
14863 }
14864
14865
14866 /*
14867 * SRAV rd, rt, rs - Shift Word Right Arithmetic Variable
14868 *
14869 * 3 2 1
14870 * 10987654321098765432109876543210
14871 * 001000 00000000111
14872 * rs -----
14873 * rt -----
14874 * rd -----
14875 */
14876 std::string NMD::SRAV(uint64 instruction)
14877 {
14878 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14879 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14880 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14881
14882 std::string rd = GPR(copy(rd_value));
14883 std::string rs = GPR(copy(rs_value));
14884 std::string rt = GPR(copy(rt_value));
14885
14886 return img::format("SRAV %s, %s, %s", rd, rs, rt);
14887 }
14888
14889
14890 /*
14891 *
14892 *
14893 * 3 2 1
14894 * 10987654321098765432109876543210
14895 * 001000 00000000111
14896 * rs -----
14897 * rt -----
14898 * rd -----
14899 */
14900 std::string NMD::SRL_16_(uint64 instruction)
14901 {
14902 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14903 uint64 rs3_value = extract_rs3_6_5_4(instruction);
14904 uint64 shift3_value = extract_shift3_2_1_0(instruction);
14905
14906 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
14907 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
14908 std::string shift3 = IMMEDIATE(encode_shift3_from_shift(shift3_value));
14909
14910 return img::format("SRL %s, %s, %s", rt3, rs3, shift3);
14911 }
14912
14913
14914 /*
14915 *
14916 *
14917 * 3 2 1
14918 * 10987654321098765432109876543210
14919 * 001000 01001001101
14920 * rt -----
14921 * rs -----
14922 * rd -----
14923 */
14924 std::string NMD::SRL_32_(uint64 instruction)
14925 {
14926 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14927 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14928 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14929
14930 std::string rt = GPR(copy(rt_value));
14931 std::string rs = GPR(copy(rs_value));
14932 std::string shift = IMMEDIATE(copy(shift_value));
14933
14934 return img::format("SRL %s, %s, %s", rt, rs, shift);
14935 }
14936
14937
14938 /*
14939 *
14940 *
14941 * 3 2 1
14942 * 10987654321098765432109876543210
14943 * 001000 01001001101
14944 * rt -----
14945 * rs -----
14946 * rd -----
14947 */
14948 std::string NMD::SRLV(uint64 instruction)
14949 {
14950 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14951 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14952 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14953
14954 std::string rd = GPR(copy(rd_value));
14955 std::string rs = GPR(copy(rs_value));
14956 std::string rt = GPR(copy(rt_value));
14957
14958 return img::format("SRLV %s, %s, %s", rd, rs, rt);
14959 }
14960
14961
14962 /*
14963 *
14964 *
14965 * 3 2 1
14966 * 10987654321098765432109876543210
14967 * 001000 01001001101
14968 * rt -----
14969 * rs -----
14970 * rd -----
14971 */
14972 std::string NMD::SUB(uint64 instruction)
14973 {
14974 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14975 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14976 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14977
14978 std::string rd = GPR(copy(rd_value));
14979 std::string rs = GPR(copy(rs_value));
14980 std::string rt = GPR(copy(rt_value));
14981
14982 return img::format("SUB %s, %s, %s", rd, rs, rt);
14983 }
14984
14985
14986 /*
14987 *
14988 *
14989 * 3 2 1
14990 * 10987654321098765432109876543210
14991 * 001000 01001001101
14992 * rt -----
14993 * rs -----
14994 * rd -----
14995 */
14996 std::string NMD::SUB_D(uint64 instruction)
14997 {
14998 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14999 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15000 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
15001
15002 std::string fd = FPR(copy(fd_value));
15003 std::string fs = FPR(copy(fs_value));
15004 std::string ft = FPR(copy(ft_value));
15005
15006 return img::format("SUB.D %s, %s, %s", fd, fs, ft);
15007 }
15008
15009
15010 /*
15011 *
15012 *
15013 * 3 2 1
15014 * 10987654321098765432109876543210
15015 * 001000 01001001101
15016 * rt -----
15017 * rs -----
15018 * rd -----
15019 */
15020 std::string NMD::SUB_S(uint64 instruction)
15021 {
15022 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15023 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15024 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
15025
15026 std::string fd = FPR(copy(fd_value));
15027 std::string fs = FPR(copy(fs_value));
15028 std::string ft = FPR(copy(ft_value));
15029
15030 return img::format("SUB.S %s, %s, %s", fd, fs, ft);
15031 }
15032
15033
15034 /*
15035 *
15036 *
15037 * 3 2 1
15038 * 10987654321098765432109876543210
15039 * 001000 01001001101
15040 * rt -----
15041 * rs -----
15042 * rd -----
15043 */
15044 std::string NMD::SUBQ_PH(uint64 instruction)
15045 {
15046 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15047 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15048 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15049
15050 std::string rd = GPR(copy(rd_value));
15051 std::string rs = GPR(copy(rs_value));
15052 std::string rt = GPR(copy(rt_value));
15053
15054 return img::format("SUBQ.PH %s, %s, %s", rd, rs, rt);
15055 }
15056
15057
15058 /*
15059 * [DSP] SUBQ.S.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15060 * right to halve results
15061 *
15062 * 3 2 1
15063 * 10987654321098765432109876543210
15064 * 001000 01001001101
15065 * rt -----
15066 * rs -----
15067 * rd -----
15068 */
15069 std::string NMD::SUBQ_S_PH(uint64 instruction)
15070 {
15071 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15072 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15073 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15074
15075 std::string rd = GPR(copy(rd_value));
15076 std::string rs = GPR(copy(rs_value));
15077 std::string rt = GPR(copy(rt_value));
15078
15079 return img::format("SUBQ_S.PH %s, %s, %s", rd, rs, rt);
15080 }
15081
15082
15083 /*
15084 * [DSP] SUBQ.S.W rd, rt, rs - Subtract fractional halfword vectors and shift
15085 * right to halve results
15086 *
15087 * 3 2 1
15088 * 10987654321098765432109876543210
15089 * 001000 01001001101
15090 * rt -----
15091 * rs -----
15092 * rd -----
15093 */
15094 std::string NMD::SUBQ_S_W(uint64 instruction)
15095 {
15096 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15097 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15098 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15099
15100 std::string rd = GPR(copy(rd_value));
15101 std::string rs = GPR(copy(rs_value));
15102 std::string rt = GPR(copy(rt_value));
15103
15104 return img::format("SUBQ_S.W %s, %s, %s", rd, rs, rt);
15105 }
15106
15107
15108 /*
15109 * [DSP] SUBQH.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15110 * right to halve results
15111 *
15112 * 3 2 1
15113 * 10987654321098765432109876543210
15114 * 001000 01001001101
15115 * rt -----
15116 * rs -----
15117 * rd -----
15118 */
15119 std::string NMD::SUBQH_PH(uint64 instruction)
15120 {
15121 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15122 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15123 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15124
15125 std::string rd = GPR(copy(rd_value));
15126 std::string rs = GPR(copy(rs_value));
15127 std::string rt = GPR(copy(rt_value));
15128
15129 return img::format("SUBQH.PH %s, %s, %s", rd, rs, rt);
15130 }
15131
15132
15133 /*
15134 * [DSP] SUBQH_R.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15135 * right to halve results
15136 *
15137 * 3 2 1
15138 * 10987654321098765432109876543210
15139 * 001000 01001001101
15140 * rt -----
15141 * rs -----
15142 * rd -----
15143 */
15144 std::string NMD::SUBQH_R_PH(uint64 instruction)
15145 {
15146 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15147 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15148 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15149
15150 std::string rd = GPR(copy(rd_value));
15151 std::string rs = GPR(copy(rs_value));
15152 std::string rt = GPR(copy(rt_value));
15153
15154 return img::format("SUBQH_R.PH %s, %s, %s", rd, rs, rt);
15155 }
15156
15157
15158 /*
15159 * [DSP] SUBQH_R.W rd, rt, rs - Subtract fractional halfword vectors and shift
15160 * right to halve results with rounding
15161 *
15162 * 3 2 1
15163 * 10987654321098765432109876543210
15164 * 001000 11001001101
15165 * rt -----
15166 * rs -----
15167 * rd -----
15168 */
15169 std::string NMD::SUBQH_R_W(uint64 instruction)
15170 {
15171 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15172 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15173 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15174
15175 std::string rd = GPR(copy(rd_value));
15176 std::string rs = GPR(copy(rs_value));
15177 std::string rt = GPR(copy(rt_value));
15178
15179 return img::format("SUBQH_R.W %s, %s, %s", rd, rs, rt);
15180 }
15181
15182
15183 /*
15184 * [DSP] SUBQH.W rd, rs, rt - Subtract fractional words and shift right to
15185 * halve results
15186 *
15187 * 3 2 1
15188 * 10987654321098765432109876543210
15189 * 001000 01010001101
15190 * rt -----
15191 * rs -----
15192 * rd -----
15193 */
15194 std::string NMD::SUBQH_W(uint64 instruction)
15195 {
15196 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15197 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15198 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15199
15200 std::string rd = GPR(copy(rd_value));
15201 std::string rs = GPR(copy(rs_value));
15202 std::string rt = GPR(copy(rt_value));
15203
15204 return img::format("SUBQH.W %s, %s, %s", rd, rs, rt);
15205 }
15206
15207
15208 /*
15209 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15210 *
15211 * 3 2 1
15212 * 10987654321098765432109876543210
15213 * 001000 00010001101
15214 * rt -----
15215 * rs -----
15216 * rd -----
15217 */
15218 std::string NMD::SUBU_16_(uint64 instruction)
15219 {
15220 uint64 rt3_value = extract_rt3_9_8_7(instruction);
15221 uint64 rs3_value = extract_rs3_6_5_4(instruction);
15222 uint64 rd3_value = extract_rd3_3_2_1(instruction);
15223
15224 std::string rd3 = GPR(decode_gpr_gpr3(rd3_value));
15225 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
15226 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
15227
15228 return img::format("SUBU %s, %s, %s", rd3, rs3, rt3);
15229 }
15230
15231
15232 /*
15233 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15234 *
15235 * 3 2 1
15236 * 10987654321098765432109876543210
15237 * 001000 00010001101
15238 * rt -----
15239 * rs -----
15240 * rd -----
15241 */
15242 std::string NMD::SUBU_32_(uint64 instruction)
15243 {
15244 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15245 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15246 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15247
15248 std::string rd = GPR(copy(rd_value));
15249 std::string rs = GPR(copy(rs_value));
15250 std::string rt = GPR(copy(rt_value));
15251
15252 return img::format("SUBU %s, %s, %s", rd, rs, rt);
15253 }
15254
15255
15256 /*
15257 * [DSP] SUBU.PH rd, rs, rt - Subtract unsigned unsigned halfwords
15258 *
15259 * 3 2 1
15260 * 10987654321098765432109876543210
15261 * 001000 01100001101
15262 * rt -----
15263 * rs -----
15264 * rd -----
15265 */
15266 std::string NMD::SUBU_PH(uint64 instruction)
15267 {
15268 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15269 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15270 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15271
15272 std::string rd = GPR(copy(rd_value));
15273 std::string rs = GPR(copy(rs_value));
15274 std::string rt = GPR(copy(rt_value));
15275
15276 return img::format("SUBU.PH %s, %s, %s", rd, rs, rt);
15277 }
15278
15279
15280 /*
15281 * [DSP] SUBU.QB rd, rs, rt - Subtract unsigned quad byte vectors
15282 *
15283 * 3 2 1
15284 * 10987654321098765432109876543210
15285 * 001000 01011001101
15286 * rt -----
15287 * rs -----
15288 * rd -----
15289 */
15290 std::string NMD::SUBU_QB(uint64 instruction)
15291 {
15292 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15293 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15294 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15295
15296 std::string rd = GPR(copy(rd_value));
15297 std::string rs = GPR(copy(rs_value));
15298 std::string rt = GPR(copy(rt_value));
15299
15300 return img::format("SUBU.QB %s, %s, %s", rd, rs, rt);
15301 }
15302
15303
15304 /*
15305 * [DSP] SUBU_S.PH rd, rs, rt - Subtract unsigned unsigned halfwords with
15306 * 8-bit saturation
15307 *
15308 * 3 2 1
15309 * 10987654321098765432109876543210
15310 * 001000 11100001101
15311 * rt -----
15312 * rs -----
15313 * rd -----
15314 */
15315 std::string NMD::SUBU_S_PH(uint64 instruction)
15316 {
15317 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15318 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15319 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15320
15321 std::string rd = GPR(copy(rd_value));
15322 std::string rs = GPR(copy(rs_value));
15323 std::string rt = GPR(copy(rt_value));
15324
15325 return img::format("SUBU_S.PH %s, %s, %s", rd, rs, rt);
15326 }
15327
15328
15329 /*
15330 * [DSP] SUBU_S.QB rd, rs, rt - Subtract unsigned quad byte vectors with
15331 * 8-bit saturation
15332 *
15333 * 3 2 1
15334 * 10987654321098765432109876543210
15335 * 001000 11011001101
15336 * rt -----
15337 * rs -----
15338 * rd -----
15339 */
15340 std::string NMD::SUBU_S_QB(uint64 instruction)
15341 {
15342 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15343 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15344 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15345
15346 std::string rd = GPR(copy(rd_value));
15347 std::string rs = GPR(copy(rs_value));
15348 std::string rt = GPR(copy(rt_value));
15349
15350 return img::format("SUBU_S.QB %s, %s, %s", rd, rs, rt);
15351 }
15352
15353
15354 /*
15355 * [DSP] SUBUH.QB rd, rs, rt - Subtract unsigned bytes and right shift
15356 * to halve results
15357 *
15358 * 3 2 1
15359 * 10987654321098765432109876543210
15360 * 001000 01101001101
15361 * rt -----
15362 * rs -----
15363 * rd -----
15364 */
15365 std::string NMD::SUBUH_QB(uint64 instruction)
15366 {
15367 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15368 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15369 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15370
15371 std::string rd = GPR(copy(rd_value));
15372 std::string rs = GPR(copy(rs_value));
15373 std::string rt = GPR(copy(rt_value));
15374
15375 return img::format("SUBUH.QB %s, %s, %s", rd, rs, rt);
15376 }
15377
15378
15379 /*
15380 * [DSP] SUBUH_R.QB rd, rs, rt - Subtract unsigned bytes and right shift
15381 * to halve results with rounding
15382 *
15383 * 3 2 1
15384 * 10987654321098765432109876543210
15385 * 001000 11101001101
15386 * rt -----
15387 * rs -----
15388 * rd -----
15389 */
15390 std::string NMD::SUBUH_R_QB(uint64 instruction)
15391 {
15392 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15393 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15394 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15395
15396 std::string rd = GPR(copy(rd_value));
15397 std::string rs = GPR(copy(rs_value));
15398 std::string rt = GPR(copy(rt_value));
15399
15400 return img::format("SUBUH_R.QB %s, %s, %s", rd, rs, rt);
15401 }
15402
15403
15404 /*
15405 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15406 *
15407 * 3 2 1
15408 * 10987654321098765432109876543210
15409 * 001000 00010001101
15410 * rt -----
15411 * rs -----
15412 * rd -----
15413 */
15414 std::string NMD::SW_16_(uint64 instruction)
15415 {
15416 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
15417 uint64 rs3_value = extract_rs3_6_5_4(instruction);
15418 uint64 u_value = extract_u_3_2_1_0__s2(instruction);
15419
15420 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
15421 std::string u = IMMEDIATE(copy(u_value));
15422 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
15423
15424 return img::format("SW %s, %s(%s)", rtz3, u, rs3);
15425 }
15426
15427
15428 /*
15429 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15430 *
15431 * 3 2 1
15432 * 10987654321098765432109876543210
15433 * 001000 00010001101
15434 * rt -----
15435 * rs -----
15436 * rd -----
15437 */
15438 std::string NMD::SW_4X4_(uint64 instruction)
15439 {
15440 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
15441 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
15442 uint64 u_value = extract_u_3_8__s2(instruction);
15443
15444 std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
15445 std::string u = IMMEDIATE(copy(u_value));
15446 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
15447
15448 return img::format("SW %s, %s(%s)", rtz4, u, rs4);
15449 }
15450
15451
15452 /*
15453 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15454 *
15455 * 3 2 1
15456 * 10987654321098765432109876543210
15457 * 001000 00010001101
15458 * rt -----
15459 * rs -----
15460 * rd -----
15461 */
15462 std::string NMD::SW_GP16_(uint64 instruction)
15463 {
15464 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
15465 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
15466
15467 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
15468 std::string u = IMMEDIATE(copy(u_value));
15469
15470 return img::format("SW %s, %s($%d)", rtz3, u, 28);
15471 }
15472
15473
15474 /*
15475 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15476 *
15477 * 3 2 1
15478 * 10987654321098765432109876543210
15479 * 001000 00010001101
15480 * rt -----
15481 * rs -----
15482 * rd -----
15483 */
15484 std::string NMD::SW_GP_(uint64 instruction)
15485 {
15486 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15487 uint64 u_value = extract_u_20_to_2__s2(instruction);
15488
15489 std::string rt = GPR(copy(rt_value));
15490 std::string u = IMMEDIATE(copy(u_value));
15491
15492 return img::format("SW %s, %s($%d)", rt, u, 28);
15493 }
15494
15495
15496 /*
15497 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15498 *
15499 * 3 2 1
15500 * 10987654321098765432109876543210
15501 * 001000 00010001101
15502 * rt -----
15503 * rs -----
15504 * rd -----
15505 */
15506 std::string NMD::SW_S9_(uint64 instruction)
15507 {
15508 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15509 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15510 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15511
15512 std::string rt = GPR(copy(rt_value));
15513 std::string s = IMMEDIATE(copy(s_value));
15514 std::string rs = GPR(copy(rs_value));
15515
15516 return img::format("SW %s, %s(%s)", rt, s, rs);
15517 }
15518
15519
15520 /*
15521 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15522 *
15523 * 3 2 1
15524 * 10987654321098765432109876543210
15525 * 001000 00010001101
15526 * rt -----
15527 * rs -----
15528 * rd -----
15529 */
15530 std::string NMD::SW_SP_(uint64 instruction)
15531 {
15532 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
15533 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
15534
15535 std::string rt = GPR(copy(rt_value));
15536 std::string u = IMMEDIATE(copy(u_value));
15537
15538 return img::format("SW %s, %s($%d)", rt, u, 29);
15539 }
15540
15541
15542 /*
15543 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15544 *
15545 * 3 2 1
15546 * 10987654321098765432109876543210
15547 * 001000 00010001101
15548 * rt -----
15549 * rs -----
15550 * rd -----
15551 */
15552 std::string NMD::SW_U12_(uint64 instruction)
15553 {
15554 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15555 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15556 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15557
15558 std::string rt = GPR(copy(rt_value));
15559 std::string u = IMMEDIATE(copy(u_value));
15560 std::string rs = GPR(copy(rs_value));
15561
15562 return img::format("SW %s, %s(%s)", rt, u, rs);
15563 }
15564
15565
15566 /*
15567 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15568 *
15569 * 3 2 1
15570 * 10987654321098765432109876543210
15571 * 001000 00010001101
15572 * rt -----
15573 * rs -----
15574 * rd -----
15575 */
15576 std::string NMD::SWC1_GP_(uint64 instruction)
15577 {
15578 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15579 uint64 u_value = extract_u_17_to_2__s2(instruction);
15580
15581 std::string ft = FPR(copy(ft_value));
15582 std::string u = IMMEDIATE(copy(u_value));
15583
15584 return img::format("SWC1 %s, %s($%d)", ft, u, 28);
15585 }
15586
15587
15588 /*
15589 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15590 *
15591 * 3 2 1
15592 * 10987654321098765432109876543210
15593 * 001000 00010001101
15594 * rt -----
15595 * rs -----
15596 * rd -----
15597 */
15598 std::string NMD::SWC1_S9_(uint64 instruction)
15599 {
15600 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15601 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15602 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15603
15604 std::string ft = FPR(copy(ft_value));
15605 std::string s = IMMEDIATE(copy(s_value));
15606 std::string rs = GPR(copy(rs_value));
15607
15608 return img::format("SWC1 %s, %s(%s)", ft, s, rs);
15609 }
15610
15611
15612 /*
15613 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15614 *
15615 * 3 2 1
15616 * 10987654321098765432109876543210
15617 * 001000 00010001101
15618 * rt -----
15619 * rs -----
15620 * rd -----
15621 */
15622 std::string NMD::SWC1_U12_(uint64 instruction)
15623 {
15624 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15625 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15626 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15627
15628 std::string ft = FPR(copy(ft_value));
15629 std::string u = IMMEDIATE(copy(u_value));
15630 std::string rs = GPR(copy(rs_value));
15631
15632 return img::format("SWC1 %s, %s(%s)", ft, u, rs);
15633 }
15634
15635
15636 /*
15637 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15638 *
15639 * 3 2 1
15640 * 10987654321098765432109876543210
15641 * 001000 00010001101
15642 * rt -----
15643 * rs -----
15644 * rd -----
15645 */
15646 std::string NMD::SWC1X(uint64 instruction)
15647 {
15648 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15649 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15650 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15651
15652 std::string ft = FPR(copy(ft_value));
15653 std::string rs = GPR(copy(rs_value));
15654 std::string rt = GPR(copy(rt_value));
15655
15656 return img::format("SWC1X %s, %s(%s)", ft, rs, rt);
15657 }
15658
15659
15660 /*
15661 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15662 *
15663 * 3 2 1
15664 * 10987654321098765432109876543210
15665 * 001000 00010001101
15666 * rt -----
15667 * rs -----
15668 * rd -----
15669 */
15670 std::string NMD::SWC1XS(uint64 instruction)
15671 {
15672 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15673 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15674 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15675
15676 std::string ft = FPR(copy(ft_value));
15677 std::string rs = GPR(copy(rs_value));
15678 std::string rt = GPR(copy(rt_value));
15679
15680 return img::format("SWC1XS %s, %s(%s)", ft, rs, rt);
15681 }
15682
15683
15684 /*
15685 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15686 *
15687 * 3 2 1
15688 * 10987654321098765432109876543210
15689 * 001000 00010001101
15690 * rt -----
15691 * rs -----
15692 * rd -----
15693 */
15694 std::string NMD::SWC2(uint64 instruction)
15695 {
15696 uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
15697 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15698 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15699
15700 std::string cs = CPR(copy(cs_value));
15701 std::string s = IMMEDIATE(copy(s_value));
15702 std::string rs = GPR(copy(rs_value));
15703
15704 return img::format("SWC2 %s, %s(%s)", cs, s, rs);
15705 }
15706
15707
15708 /*
15709 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15710 *
15711 * 3 2 1
15712 * 10987654321098765432109876543210
15713 * 001000 00010001101
15714 * rt -----
15715 * rs -----
15716 * rd -----
15717 */
15718 std::string NMD::SWE(uint64 instruction)
15719 {
15720 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15721 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15722 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15723
15724 std::string rt = GPR(copy(rt_value));
15725 std::string s = IMMEDIATE(copy(s_value));
15726 std::string rs = GPR(copy(rs_value));
15727
15728 return img::format("SWE %s, %s(%s)", rt, s, rs);
15729 }
15730
15731
15732 /*
15733 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15734 *
15735 * 3 2 1
15736 * 10987654321098765432109876543210
15737 * 001000 00010001101
15738 * rt -----
15739 * rs -----
15740 * rd -----
15741 */
15742 std::string NMD::SWM(uint64 instruction)
15743 {
15744 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15745 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15746 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15747 uint64 count3_value = extract_count3_14_13_12(instruction);
15748
15749 std::string rt = GPR(copy(rt_value));
15750 std::string s = IMMEDIATE(copy(s_value));
15751 std::string rs = GPR(copy(rs_value));
15752 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
15753
15754 return img::format("SWM %s, %s(%s), %s", rt, s, rs, count3);
15755 }
15756
15757
15758 /*
15759 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15760 *
15761 * 3 2 1
15762 * 10987654321098765432109876543210
15763 * 001000 00010001101
15764 * rt -----
15765 * rs -----
15766 * rd -----
15767 */
15768 std::string NMD::SWPC_48_(uint64 instruction)
15769 {
15770 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
15771 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
15772
15773 std::string rt = GPR(copy(rt_value));
15774 std::string s = ADDRESS(encode_s_from_address(s_value), 6);
15775
15776 return img::format("SWPC %s, %s", rt, s);
15777 }
15778
15779
15780 /*
15781 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15782 *
15783 * 3 2 1
15784 * 10987654321098765432109876543210
15785 * 001000 00010001101
15786 * rt -----
15787 * rs -----
15788 * rd -----
15789 */
15790 std::string NMD::SWX(uint64 instruction)
15791 {
15792 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15793 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15794 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15795
15796 std::string rd = GPR(copy(rd_value));
15797 std::string rs = GPR(copy(rs_value));
15798 std::string rt = GPR(copy(rt_value));
15799
15800 return img::format("SWX %s, %s(%s)", rd, rs, rt);
15801 }
15802
15803
15804 /*
15805 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15806 *
15807 * 3 2 1
15808 * 10987654321098765432109876543210
15809 * 001000 00010001101
15810 * rt -----
15811 * rs -----
15812 * rd -----
15813 */
15814 std::string NMD::SWXS(uint64 instruction)
15815 {
15816 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15817 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15818 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15819
15820 std::string rd = GPR(copy(rd_value));
15821 std::string rs = GPR(copy(rs_value));
15822 std::string rt = GPR(copy(rt_value));
15823
15824 return img::format("SWXS %s, %s(%s)", rd, rs, rt);
15825 }
15826
15827
15828 /*
15829 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15830 *
15831 * 3 2 1
15832 * 10987654321098765432109876543210
15833 * 001000 00010001101
15834 * rt -----
15835 * rs -----
15836 * rd -----
15837 */
15838 std::string NMD::SYNC(uint64 instruction)
15839 {
15840 uint64 stype_value = extract_stype_20_19_18_17_16(instruction);
15841
15842 std::string stype = IMMEDIATE(copy(stype_value));
15843
15844 return img::format("SYNC %s", stype);
15845 }
15846
15847
15848 /*
15849 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15850 *
15851 * 3 2 1
15852 * 10987654321098765432109876543210
15853 * 001000 00010001101
15854 * rt -----
15855 * rs -----
15856 * rd -----
15857 */
15858 std::string NMD::SYNCI(uint64 instruction)
15859 {
15860 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15861 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15862
15863 std::string s = IMMEDIATE(copy(s_value));
15864 std::string rs = GPR(copy(rs_value));
15865
15866 return img::format("SYNCI %s(%s)", s, rs);
15867 }
15868
15869
15870 /*
15871 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15872 *
15873 * 3 2 1
15874 * 10987654321098765432109876543210
15875 * 001000 00010001101
15876 * rt -----
15877 * rs -----
15878 * rd -----
15879 */
15880 std::string NMD::SYNCIE(uint64 instruction)
15881 {
15882 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15883 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15884
15885 std::string s = IMMEDIATE(copy(s_value));
15886 std::string rs = GPR(copy(rs_value));
15887
15888 return img::format("SYNCIE %s(%s)", s, rs);
15889 }
15890
15891
15892 /*
15893 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15894 *
15895 * 3 2 1
15896 * 10987654321098765432109876543210
15897 * 001000 00010001101
15898 * rt -----
15899 * rs -----
15900 * rd -----
15901 */
15902 std::string NMD::SYSCALL_16_(uint64 instruction)
15903 {
15904 uint64 code_value = extract_code_1_0(instruction);
15905
15906 std::string code = IMMEDIATE(copy(code_value));
15907
15908 return img::format("SYSCALL %s", code);
15909 }
15910
15911
15912 /*
15913 * SYSCALL code - System Call. Cause a System Call Exception
15914 *
15915 * 3 2 1
15916 * 10987654321098765432109876543210
15917 * 00000000000010
15918 * code ------------------
15919 */
15920 std::string NMD::SYSCALL_32_(uint64 instruction)
15921 {
15922 uint64 code_value = extract_code_17_to_0(instruction);
15923
15924 std::string code = IMMEDIATE(copy(code_value));
15925
15926 return img::format("SYSCALL %s", code);
15927 }
15928
15929
15930 /*
15931 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15932 *
15933 * 3 2 1
15934 * 10987654321098765432109876543210
15935 * 001000 00010001101
15936 * rt -----
15937 * rs -----
15938 * rd -----
15939 */
15940 std::string NMD::TEQ(uint64 instruction)
15941 {
15942 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15943 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15944
15945 std::string rs = GPR(copy(rs_value));
15946 std::string rt = GPR(copy(rt_value));
15947
15948 return img::format("TEQ %s, %s", rs, rt);
15949 }
15950
15951
15952 /*
15953 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15954 *
15955 * 3 2 1
15956 * 10987654321098765432109876543210
15957 * 001000 00010001101
15958 * rt -----
15959 * rs -----
15960 * rd -----
15961 */
15962 std::string NMD::TLBGINV(uint64 instruction)
15963 {
15964 (void)instruction;
15965
15966 return "TLBGINV ";
15967 }
15968
15969
15970 /*
15971 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15972 *
15973 * 3 2 1
15974 * 10987654321098765432109876543210
15975 * 001000 00010001101
15976 * rt -----
15977 * rs -----
15978 * rd -----
15979 */
15980 std::string NMD::TLBGINVF(uint64 instruction)
15981 {
15982 (void)instruction;
15983
15984 return "TLBGINVF ";
15985 }
15986
15987
15988 /*
15989 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15990 *
15991 * 3 2 1
15992 * 10987654321098765432109876543210
15993 * 001000 00010001101
15994 * rt -----
15995 * rs -----
15996 * rd -----
15997 */
15998 std::string NMD::TLBGP(uint64 instruction)
15999 {
16000 (void)instruction;
16001
16002 return "TLBGP ";
16003 }
16004
16005
16006 /*
16007 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16008 *
16009 * 3 2 1
16010 * 10987654321098765432109876543210
16011 * 001000 00010001101
16012 * rt -----
16013 * rs -----
16014 * rd -----
16015 */
16016 std::string NMD::TLBGR(uint64 instruction)
16017 {
16018 (void)instruction;
16019
16020 return "TLBGR ";
16021 }
16022
16023
16024 /*
16025 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16026 *
16027 * 3 2 1
16028 * 10987654321098765432109876543210
16029 * 001000 00010001101
16030 * rt -----
16031 * rs -----
16032 * rd -----
16033 */
16034 std::string NMD::TLBGWI(uint64 instruction)
16035 {
16036 (void)instruction;
16037
16038 return "TLBGWI ";
16039 }
16040
16041
16042 /*
16043 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16044 *
16045 * 3 2 1
16046 * 10987654321098765432109876543210
16047 * 001000 00010001101
16048 * rt -----
16049 * rs -----
16050 * rd -----
16051 */
16052 std::string NMD::TLBGWR(uint64 instruction)
16053 {
16054 (void)instruction;
16055
16056 return "TLBGWR ";
16057 }
16058
16059
16060 /*
16061 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16062 *
16063 * 3 2 1
16064 * 10987654321098765432109876543210
16065 * 001000 00010001101
16066 * rt -----
16067 * rs -----
16068 * rd -----
16069 */
16070 std::string NMD::TLBINV(uint64 instruction)
16071 {
16072 (void)instruction;
16073
16074 return "TLBINV ";
16075 }
16076
16077
16078 /*
16079 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16080 *
16081 * 3 2 1
16082 * 10987654321098765432109876543210
16083 * 001000 00010001101
16084 * rt -----
16085 * rs -----
16086 * rd -----
16087 */
16088 std::string NMD::TLBINVF(uint64 instruction)
16089 {
16090 (void)instruction;
16091
16092 return "TLBINVF ";
16093 }
16094
16095
16096 /*
16097 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16098 *
16099 * 3 2 1
16100 * 10987654321098765432109876543210
16101 * 001000 00010001101
16102 * rt -----
16103 * rs -----
16104 * rd -----
16105 */
16106 std::string NMD::TLBP(uint64 instruction)
16107 {
16108 (void)instruction;
16109
16110 return "TLBP ";
16111 }
16112
16113
16114 /*
16115 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16116 *
16117 * 3 2 1
16118 * 10987654321098765432109876543210
16119 * 001000 00010001101
16120 * rt -----
16121 * rs -----
16122 * rd -----
16123 */
16124 std::string NMD::TLBR(uint64 instruction)
16125 {
16126 (void)instruction;
16127
16128 return "TLBR ";
16129 }
16130
16131
16132 /*
16133 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16134 *
16135 * 3 2 1
16136 * 10987654321098765432109876543210
16137 * 001000 00010001101
16138 * rt -----
16139 * rs -----
16140 * rd -----
16141 */
16142 std::string NMD::TLBWI(uint64 instruction)
16143 {
16144 (void)instruction;
16145
16146 return "TLBWI ";
16147 }
16148
16149
16150 /*
16151 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16152 *
16153 * 3 2 1
16154 * 10987654321098765432109876543210
16155 * 001000 00010001101
16156 * rt -----
16157 * rs -----
16158 * rd -----
16159 */
16160 std::string NMD::TLBWR(uint64 instruction)
16161 {
16162 (void)instruction;
16163
16164 return "TLBWR ";
16165 }
16166
16167
16168 /*
16169 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16170 *
16171 * 3 2 1
16172 * 10987654321098765432109876543210
16173 * 001000 00010001101
16174 * rt -----
16175 * rs -----
16176 * rd -----
16177 */
16178 std::string NMD::TNE(uint64 instruction)
16179 {
16180 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16181 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16182
16183 std::string rs = GPR(copy(rs_value));
16184 std::string rt = GPR(copy(rt_value));
16185
16186 return img::format("TNE %s, %s", rs, rt);
16187 }
16188
16189
16190 /*
16191 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16192 *
16193 * 3 2 1
16194 * 10987654321098765432109876543210
16195 * 001000 00010001101
16196 * rt -----
16197 * rs -----
16198 * rd -----
16199 */
16200 std::string NMD::TRUNC_L_D(uint64 instruction)
16201 {
16202 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
16203 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
16204
16205 std::string ft = FPR(copy(ft_value));
16206 std::string fs = FPR(copy(fs_value));
16207
16208 return img::format("TRUNC.L.D %s, %s", ft, fs);
16209 }
16210
16211
16212 /*
16213 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16214 *
16215 * 3 2 1
16216 * 10987654321098765432109876543210
16217 * 001000 00010001101
16218 * rt -----
16219 * rs -----
16220 * rd -----
16221 */
16222 std::string NMD::TRUNC_L_S(uint64 instruction)
16223 {
16224 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
16225 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
16226
16227 std::string ft = FPR(copy(ft_value));
16228 std::string fs = FPR(copy(fs_value));
16229
16230 return img::format("TRUNC.L.S %s, %s", ft, fs);
16231 }
16232
16233
16234 /*
16235 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16236 *
16237 * 3 2 1
16238 * 10987654321098765432109876543210
16239 * 001000 00010001101
16240 * rt -----
16241 * rs -----
16242 * rd -----
16243 */
16244 std::string NMD::TRUNC_W_D(uint64 instruction)
16245 {
16246 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
16247 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
16248
16249 std::string ft = FPR(copy(ft_value));
16250 std::string fs = FPR(copy(fs_value));
16251
16252 return img::format("TRUNC.W.D %s, %s", ft, fs);
16253 }
16254
16255
16256 /*
16257 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16258 *
16259 * 3 2 1
16260 * 10987654321098765432109876543210
16261 * 001000 00010001101
16262 * rt -----
16263 * rs -----
16264 * rd -----
16265 */
16266 std::string NMD::TRUNC_W_S(uint64 instruction)
16267 {
16268 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
16269 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
16270
16271 std::string ft = FPR(copy(ft_value));
16272 std::string fs = FPR(copy(fs_value));
16273
16274 return img::format("TRUNC.W.S %s, %s", ft, fs);
16275 }
16276
16277
16278 /*
16279 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16280 *
16281 * 3 2 1
16282 * 10987654321098765432109876543210
16283 * 001000 00010001101
16284 * rt -----
16285 * rs -----
16286 * rd -----
16287 */
16288 std::string NMD::UALDM(uint64 instruction)
16289 {
16290 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16291 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16292 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16293 uint64 count3_value = extract_count3_14_13_12(instruction);
16294
16295 std::string rt = GPR(copy(rt_value));
16296 std::string s = IMMEDIATE(copy(s_value));
16297 std::string rs = GPR(copy(rs_value));
16298 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16299
16300 return img::format("UALDM %s, %s(%s), %s", rt, s, rs, count3);
16301 }
16302
16303
16304 /*
16305 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16306 *
16307 * 3 2 1
16308 * 10987654321098765432109876543210
16309 * 001000 00010001101
16310 * rt -----
16311 * rs -----
16312 * rd -----
16313 */
16314 std::string NMD::UALH(uint64 instruction)
16315 {
16316 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16317 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16318 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16319
16320 std::string rt = GPR(copy(rt_value));
16321 std::string s = IMMEDIATE(copy(s_value));
16322 std::string rs = GPR(copy(rs_value));
16323
16324 return img::format("UALH %s, %s(%s)", rt, s, rs);
16325 }
16326
16327
16328 /*
16329 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16330 *
16331 * 3 2 1
16332 * 10987654321098765432109876543210
16333 * 001000 00010001101
16334 * rt -----
16335 * rs -----
16336 * rd -----
16337 */
16338 std::string NMD::UALWM(uint64 instruction)
16339 {
16340 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16341 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16342 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16343 uint64 count3_value = extract_count3_14_13_12(instruction);
16344
16345 std::string rt = GPR(copy(rt_value));
16346 std::string s = IMMEDIATE(copy(s_value));
16347 std::string rs = GPR(copy(rs_value));
16348 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16349
16350 return img::format("UALWM %s, %s(%s), %s", rt, s, rs, count3);
16351 }
16352
16353
16354 /*
16355 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16356 *
16357 * 3 2 1
16358 * 10987654321098765432109876543210
16359 * 001000 00010001101
16360 * rt -----
16361 * rs -----
16362 * rd -----
16363 */
16364 std::string NMD::UASDM(uint64 instruction)
16365 {
16366 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16367 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16368 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16369 uint64 count3_value = extract_count3_14_13_12(instruction);
16370
16371 std::string rt = GPR(copy(rt_value));
16372 std::string s = IMMEDIATE(copy(s_value));
16373 std::string rs = GPR(copy(rs_value));
16374 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16375
16376 return img::format("UASDM %s, %s(%s), %s", rt, s, rs, count3);
16377 }
16378
16379
16380 /*
16381 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16382 *
16383 * 3 2 1
16384 * 10987654321098765432109876543210
16385 * 001000 00010001101
16386 * rt -----
16387 * rs -----
16388 * rd -----
16389 */
16390 std::string NMD::UASH(uint64 instruction)
16391 {
16392 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16393 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16394 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16395
16396 std::string rt = GPR(copy(rt_value));
16397 std::string s = IMMEDIATE(copy(s_value));
16398 std::string rs = GPR(copy(rs_value));
16399
16400 return img::format("UASH %s, %s(%s)", rt, s, rs);
16401 }
16402
16403
16404 /*
16405 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16406 *
16407 * 3 2 1
16408 * 10987654321098765432109876543210
16409 * 001000 00010001101
16410 * rt -----
16411 * rs -----
16412 * rd -----
16413 */
16414 std::string NMD::UASWM(uint64 instruction)
16415 {
16416 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16417 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16418 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
16419 uint64 count3_value = extract_count3_14_13_12(instruction);
16420
16421 std::string rt = GPR(copy(rt_value));
16422 std::string s = IMMEDIATE(copy(s_value));
16423 std::string rs = GPR(copy(rs_value));
16424 std::string count3 = IMMEDIATE(encode_count3_from_count(count3_value));
16425
16426 return img::format("UASWM %s, %s(%s), %s", rt, s, rs, count3);
16427 }
16428
16429
16430 /*
16431 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16432 *
16433 * 3 2 1
16434 * 10987654321098765432109876543210
16435 * 001000 00010001101
16436 * rt -----
16437 * rs -----
16438 * rd -----
16439 */
16440 std::string NMD::UDI(uint64 instruction)
16441 {
16442 uint64 op_value = extract_op_25_to_3(instruction);
16443
16444 std::string op = IMMEDIATE(copy(op_value));
16445
16446 return img::format("UDI %s", op);
16447 }
16448
16449
16450 /*
16451 * WAIT code - Enter Wait State
16452 *
16453 * 3 2 1
16454 * 10987654321098765432109876543210
16455 * 001000 1100001101111111
16456 * code ----------
16457 */
16458 std::string NMD::WAIT(uint64 instruction)
16459 {
16460 uint64 code_value = extract_code_25_24_23_22_21_20_19_18_17_16(instruction);
16461
16462 std::string code = IMMEDIATE(copy(code_value));
16463
16464 return img::format("WAIT %s", code);
16465 }
16466
16467
16468 /*
16469 * [DSP] WRDSP rt, mask - Write selected fields from a GPR to the DSPControl
16470 * register
16471 *
16472 * 3 2 1
16473 * 10987654321098765432109876543210
16474 * 001000 01011001111111
16475 * rt -----
16476 * mask -------
16477 */
16478 std::string NMD::WRDSP(uint64 instruction)
16479 {
16480 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16481 uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
16482
16483 std::string rt = GPR(copy(rt_value));
16484 std::string mask = IMMEDIATE(copy(mask_value));
16485
16486 return img::format("WRDSP %s, %s", rt, mask);
16487 }
16488
16489
16490 /*
16491 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16492 *
16493 * 3 2 1
16494 * 10987654321098765432109876543210
16495 * 001000 00010001101
16496 * rt -----
16497 * rs -----
16498 * rd -----
16499 */
16500 std::string NMD::WRPGPR(uint64 instruction)
16501 {
16502 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16503 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16504
16505 std::string rt = GPR(copy(rt_value));
16506 std::string rs = GPR(copy(rs_value));
16507
16508 return img::format("WRPGPR %s, %s", rt, rs);
16509 }
16510
16511
16512 /*
16513 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16514 *
16515 * 3 2 1
16516 * 10987654321098765432109876543210
16517 * 001000 00010001101
16518 * rt -----
16519 * rs -----
16520 * rd -----
16521 */
16522 std::string NMD::XOR_16_(uint64 instruction)
16523 {
16524 uint64 rt3_value = extract_rt3_9_8_7(instruction);
16525 uint64 rs3_value = extract_rs3_6_5_4(instruction);
16526
16527 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
16528 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
16529
16530 return img::format("XOR %s, %s", rs3, rt3);
16531 }
16532
16533
16534 /*
16535 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16536 *
16537 * 3 2 1
16538 * 10987654321098765432109876543210
16539 * 001000 00010001101
16540 * rt -----
16541 * rs -----
16542 * rd -----
16543 */
16544 std::string NMD::XOR_32_(uint64 instruction)
16545 {
16546 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16547 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16548 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
16549
16550 std::string rd = GPR(copy(rd_value));
16551 std::string rs = GPR(copy(rs_value));
16552 std::string rt = GPR(copy(rt_value));
16553
16554 return img::format("XOR %s, %s, %s", rd, rs, rt);
16555 }
16556
16557
16558 /*
16559 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
16560 *
16561 * 3 2 1
16562 * 10987654321098765432109876543210
16563 * 001000 00010001101
16564 * rt -----
16565 * rs -----
16566 * rd -----
16567 */
16568 std::string NMD::XORI(uint64 instruction)
16569 {
16570 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16571 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16572 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
16573
16574 std::string rt = GPR(copy(rt_value));
16575 std::string rs = GPR(copy(rs_value));
16576 std::string u = IMMEDIATE(copy(u_value));
16577
16578 return img::format("XORI %s, %s, %s", rt, rs, u);
16579 }
16580
16581
16582 /*
16583 * YIELD rt, rs -
16584 *
16585 * 3 2 1
16586 * 10987654321098765432109876543210
16587 * 001000 00010001101
16588 * rt -----
16589 * rs -----
16590 */
16591 std::string NMD::YIELD(uint64 instruction)
16592 {
16593 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16594 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16595
16596 std::string rt = GPR(copy(rt_value));
16597 std::string rs = GPR(copy(rs_value));
16598
16599 return img::format("YIELD %s, %s", rt, rs);
16600 }
16601
16602
16603
16604 /*
16605 * nanoMIPS instruction pool organization
16606 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16607 *
16608 *
16609 * ā”Œā”€ P.ADDIU ā”€ā”€ā”€ P.RI ā”€ā”€ā”€ P.SYSCALL
16610 * ā”‚
16611 * ā”‚ ā”Œā”€ P.TRAP
16612 * ā”‚ ā”‚
16613 * ā”‚ ā”Œā”€ _POOL32A0_0 ā”€ā”¼ā”€ P.CMOVE
16614 * ā”‚ ā”‚ ā”‚
16615 * ā”‚ ā”‚ ā””ā”€ P.SLTU
16616 * ā”‚ ā”Œā”€ _POOL32A0 ā”€ā”¤
16617 * ā”‚ ā”‚ ā”‚
16618 * ā”‚ ā”‚ ā”‚
16619 * ā”‚ ā”‚ ā””ā”€ _POOL32A0_1 ā”€ā”€ā”€ CRC32
16620 * ā”‚ ā”‚
16621 * ā”œā”€ P32A ā”€ā”¤
16622 * ā”‚ ā”‚ ā”Œā”€ PP.LSX
16623 * ā”‚ ā”‚ ā”Œā”€ P.LSX ā”€ā”€ā”€ā”€ā”€ā”¤
16624 * ā”‚ ā”‚ ā”‚ ā””ā”€ PP.LSXS
16625 * ā”‚ ā””ā”€ _POOL32A7 ā”€ā”¤
16626 * ā”‚ ā”‚ ā”Œā”€ POOL32Axf_4
16627 * ā”‚ ā””ā”€ POOL32Axf ā”€ā”¤
16628 * ā”‚ ā””ā”€ POOL32Axf_5
16629 * ā”‚
16630 * ā”œā”€ PBAL
16631 * ā”‚
16632 * ā”œā”€ P.GP.W ā”Œā”€ PP.LSX
16633 * ā”Œā”€ P32 ā”€ā”¤ ā”‚
16634 * ā”‚ ā”œā”€ P.GP.BH ā”€ā”“ā”€ PP.LSXS
16635 * ā”‚ ā”‚
16636 * ā”‚ ā”œā”€ P.J ā”€ā”€ā”€ā”€ā”€ā”€ā”€ PP.BALRSC
16637 * ā”‚ ā”‚
16638 * ā”‚ ā”œā”€ P48I
16639 * ā”‚ ā”‚ ā”Œā”€ P.SR
16640 * ā”‚ ā”‚ ā”‚
16641 * ā”‚ ā”‚ ā”œā”€ P.SHIFT
16642 * ā”‚ ā”‚ ā”‚
16643 * ā”‚ ā”œā”€ P.U12 ā”€ā”€ā”€ā”¼ā”€ P.ROTX
16644 * ā”‚ ā”‚ ā”‚
16645 * ā”‚ ā”‚ ā”œā”€ P.INS
16646 * ā”‚ ā”‚ ā”‚
16647 * ā”‚ ā”‚ ā””ā”€ P.EXT
16648 * ā”‚ ā”‚
16649 * ā”‚ ā”œā”€ P.LS.U12 ā”€ā”€ P.PREF.U12
16650 * ā”‚ ā”‚
16651 * ā”‚ ā”œā”€ P.BR1 ā”€ā”€ā”€ā”€ā”€ P.BR3A
16652 * ā”‚ ā”‚
16653 * ā”‚ ā”‚ ā”Œā”€ P.LS.S0 ā”€ā”€ā”€ P16.SYSCALL
16654 * ā”‚ ā”‚ ā”‚
16655 * ā”‚ ā”‚ ā”‚ ā”Œā”€ P.LL
16656 * ā”‚ ā”‚ ā”œā”€ P.LS.S1 ā”€ā”¤
16657 * ā”‚ ā”‚ ā”‚ ā””ā”€ P.SC
16658 * ā”‚ ā”‚ ā”‚
16659 * ā”‚ ā”‚ ā”‚ ā”Œā”€ P.PREFE
16660 * MAJOR ā”€ā”¤ ā”œā”€ P.LS.S9 ā”€ā”¤ ā”‚
16661 * ā”‚ ā”‚ ā”œā”€ P.LS.E0 ā”€ā”¼ā”€ P.LLE
16662 * ā”‚ ā”‚ ā”‚ ā”‚
16663 * ā”‚ ā”‚ ā”‚ ā””ā”€ P.SCE
16664 * ā”‚ ā”‚ ā”‚
16665 * ā”‚ ā”‚ ā”œā”€ P.LS.WM
16666 * ā”‚ ā”‚ ā”‚
16667 * ā”‚ ā”‚ ā””ā”€ P.LS.UAWM
16668 * ā”‚ ā”‚
16669 * ā”‚ ā”‚
16670 * ā”‚ ā”œā”€ P.BR2
16671 * ā”‚ ā”‚
16672 * ā”‚ ā”œā”€ P.BRI
16673 * ā”‚ ā”‚
16674 * ā”‚ ā””ā”€ P.LUI
16675 * ā”‚
16676 * ā”‚
16677 * ā”‚ ā”Œā”€ P16.MV ā”€ā”€ā”€ā”€ P16.RI ā”€ā”€ā”€ P16.SYSCALL
16678 * ā”‚ ā”‚
16679 * ā”‚ ā”œā”€ P16.SR
16680 * ā”‚ ā”‚
16681 * ā”‚ ā”œā”€ P16.SHIFT
16682 * ā”‚ ā”‚
16683 * ā”‚ ā”œā”€ P16.4x4
16684 * ā”‚ ā”‚
16685 * ā”‚ ā”œā”€ P16C ā”€ā”€ā”€ā”€ā”€ā”€ POOL16C_0 ā”€ā”€ POOL16C_00
16686 * ā”‚ ā”‚
16687 * ā””ā”€ P16 ā”€ā”¼ā”€ P16.LB
16688 * ā”‚
16689 * ā”œā”€ P16.A1
16690 * ā”‚
16691 * ā”œā”€ P16.LH
16692 * ā”‚
16693 * ā”œā”€ P16.A2 ā”€ā”€ā”€ā”€ P.ADDIU[RS5]
16694 * ā”‚
16695 * ā”œā”€ P16.ADDU
16696 * ā”‚
16697 * ā””ā”€ P16.BR ā”€ā”€ā”¬ā”€ P16.JRC
16698 * ā”‚
16699 * ā””ā”€ P16.BR1
16700 *
16701 *
16702 * (FP, DPS, and some minor instruction pools are omitted from the diagram)
16703 *
16704 */
16705
16706 NMD::Pool NMD::P_SYSCALL[2] = {
16707 { instruction , 0 , 0 , 32,
16708 0xfffc0000, 0x00080000, &NMD::SYSCALL_32_ , 0,
16709 0x0 }, /* SYSCALL[32] */
16710 { instruction , 0 , 0 , 32,
16711 0xfffc0000, 0x000c0000, &NMD::HYPCALL , 0,
16712 CP0_ | VZ_ }, /* HYPCALL */
16713 };
16714
16715
16716 NMD::Pool NMD::P_RI[4] = {
16717 { instruction , 0 , 0 , 32,
16718 0xfff80000, 0x00000000, &NMD::SIGRIE , 0,
16719 0x0 }, /* SIGRIE */
16720 { pool , P_SYSCALL , 2 , 32,
16721 0xfff80000, 0x00080000, 0 , 0,
16722 0x0 }, /* P.SYSCALL */
16723 { instruction , 0 , 0 , 32,
16724 0xfff80000, 0x00100000, &NMD::BREAK_32_ , 0,
16725 0x0 }, /* BREAK[32] */
16726 { instruction , 0 , 0 , 32,
16727 0xfff80000, 0x00180000, &NMD::SDBBP_32_ , 0,
16728 EJTAG_ }, /* SDBBP[32] */
16729 };
16730
16731
16732 NMD::Pool NMD::P_ADDIU[2] = {
16733 { pool , P_RI , 4 , 32,
16734 0xffe00000, 0x00000000, 0 , 0,
16735 0x0 }, /* P.RI */
16736 { instruction , 0 , 0 , 32,
16737 0xfc000000, 0x00000000, &NMD::ADDIU_32_ , &NMD::ADDIU_32__cond ,
16738 0x0 }, /* ADDIU[32] */
16739 };
16740
16741
16742 NMD::Pool NMD::P_TRAP[2] = {
16743 { instruction , 0 , 0 , 32,
16744 0xfc0007ff, 0x20000000, &NMD::TEQ , 0,
16745 XMMS_ }, /* TEQ */
16746 { instruction , 0 , 0 , 32,
16747 0xfc0007ff, 0x20000400, &NMD::TNE , 0,
16748 XMMS_ }, /* TNE */
16749 };
16750
16751
16752 NMD::Pool NMD::P_CMOVE[2] = {
16753 { instruction , 0 , 0 , 32,
16754 0xfc0007ff, 0x20000210, &NMD::MOVZ , 0,
16755 0x0 }, /* MOVZ */
16756 { instruction , 0 , 0 , 32,
16757 0xfc0007ff, 0x20000610, &NMD::MOVN , 0,
16758 0x0 }, /* MOVN */
16759 };
16760
16761
16762 NMD::Pool NMD::P_D_MT_VPE[2] = {
16763 { instruction , 0 , 0 , 32,
16764 0xfc1f3fff, 0x20010ab0, &NMD::DMT , 0,
16765 MT_ }, /* DMT */
16766 { instruction , 0 , 0 , 32,
16767 0xfc1f3fff, 0x20000ab0, &NMD::DVPE , 0,
16768 MT_ }, /* DVPE */
16769 };
16770
16771
16772 NMD::Pool NMD::P_E_MT_VPE[2] = {
16773 { instruction , 0 , 0 , 32,
16774 0xfc1f3fff, 0x20010eb0, &NMD::EMT , 0,
16775 MT_ }, /* EMT */
16776 { instruction , 0 , 0 , 32,
16777 0xfc1f3fff, 0x20000eb0, &NMD::EVPE , 0,
16778 MT_ }, /* EVPE */
16779 };
16780
16781
16782 NMD::Pool NMD::_P_MT_VPE[2] = {
16783 { pool , P_D_MT_VPE , 2 , 32,
16784 0xfc003fff, 0x20000ab0, 0 , 0,
16785 0x0 }, /* P.D_MT_VPE */
16786 { pool , P_E_MT_VPE , 2 , 32,
16787 0xfc003fff, 0x20000eb0, 0 , 0,
16788 0x0 }, /* P.E_MT_VPE */
16789 };
16790
16791
16792 NMD::Pool NMD::P_MT_VPE[8] = {
16793 { reserved_block , 0 , 0 , 32,
16794 0xfc003bff, 0x200002b0, 0 , 0,
16795 0x0 }, /* P.MT_VPE~*(0) */
16796 { pool , _P_MT_VPE , 2 , 32,
16797 0xfc003bff, 0x20000ab0, 0 , 0,
16798 0x0 }, /* _P.MT_VPE */
16799 { reserved_block , 0 , 0 , 32,
16800 0xfc003bff, 0x200012b0, 0 , 0,
16801 0x0 }, /* P.MT_VPE~*(2) */
16802 { reserved_block , 0 , 0 , 32,
16803 0xfc003bff, 0x20001ab0, 0 , 0,
16804 0x0 }, /* P.MT_VPE~*(3) */
16805 { reserved_block , 0 , 0 , 32,
16806 0xfc003bff, 0x200022b0, 0 , 0,
16807 0x0 }, /* P.MT_VPE~*(4) */
16808 { reserved_block , 0 , 0 , 32,
16809 0xfc003bff, 0x20002ab0, 0 , 0,
16810 0x0 }, /* P.MT_VPE~*(5) */
16811 { reserved_block , 0 , 0 , 32,
16812 0xfc003bff, 0x200032b0, 0 , 0,
16813 0x0 }, /* P.MT_VPE~*(6) */
16814 { reserved_block , 0 , 0 , 32,
16815 0xfc003bff, 0x20003ab0, 0 , 0,
16816 0x0 }, /* P.MT_VPE~*(7) */
16817 };
16818
16819
16820 NMD::Pool NMD::P_DVP[2] = {
16821 { instruction , 0 , 0 , 32,
16822 0xfc00ffff, 0x20000390, &NMD::DVP , 0,
16823 0x0 }, /* DVP */
16824 { instruction , 0 , 0 , 32,
16825 0xfc00ffff, 0x20000790, &NMD::EVP , 0,
16826 0x0 }, /* EVP */
16827 };
16828
16829
16830 NMD::Pool NMD::P_SLTU[2] = {
16831 { pool , P_DVP , 2 , 32,
16832 0xfc00fbff, 0x20000390, 0 , 0,
16833 0x0 }, /* P.DVP */
16834 { instruction , 0 , 0 , 32,
16835 0xfc0003ff, 0x20000390, &NMD::SLTU , &NMD::SLTU_cond ,
16836 0x0 }, /* SLTU */
16837 };
16838
16839
16840 NMD::Pool NMD::_POOL32A0[128] = {
16841 { pool , P_TRAP , 2 , 32,
16842 0xfc0003ff, 0x20000000, 0 , 0,
16843 0x0 }, /* P.TRAP */
16844 { instruction , 0 , 0 , 32,
16845 0xfc0003ff, 0x20000008, &NMD::SEB , 0,
16846 XMMS_ }, /* SEB */
16847 { instruction , 0 , 0 , 32,
16848 0xfc0003ff, 0x20000010, &NMD::SLLV , 0,
16849 0x0 }, /* SLLV */
16850 { instruction , 0 , 0 , 32,
16851 0xfc0003ff, 0x20000018, &NMD::MUL_32_ , 0,
16852 0x0 }, /* MUL[32] */
16853 { reserved_block , 0 , 0 , 32,
16854 0xfc0003ff, 0x20000020, 0 , 0,
16855 0x0 }, /* _POOL32A0~*(4) */
16856 { reserved_block , 0 , 0 , 32,
16857 0xfc0003ff, 0x20000028, 0 , 0,
16858 0x0 }, /* _POOL32A0~*(5) */
16859 { instruction , 0 , 0 , 32,
16860 0xfc0003ff, 0x20000030, &NMD::MFC0 , 0,
16861 0x0 }, /* MFC0 */
16862 { instruction , 0 , 0 , 32,
16863 0xfc0003ff, 0x20000038, &NMD::MFHC0 , 0,
16864 CP0_ | MVH_ }, /* MFHC0 */
16865 { reserved_block , 0 , 0 , 32,
16866 0xfc0003ff, 0x20000040, 0 , 0,
16867 0x0 }, /* _POOL32A0~*(8) */
16868 { instruction , 0 , 0 , 32,
16869 0xfc0003ff, 0x20000048, &NMD::SEH , 0,
16870 0x0 }, /* SEH */
16871 { instruction , 0 , 0 , 32,
16872 0xfc0003ff, 0x20000050, &NMD::SRLV , 0,
16873 0x0 }, /* SRLV */
16874 { instruction , 0 , 0 , 32,
16875 0xfc0003ff, 0x20000058, &NMD::MUH , 0,
16876 0x0 }, /* MUH */
16877 { reserved_block , 0 , 0 , 32,
16878 0xfc0003ff, 0x20000060, 0 , 0,
16879 0x0 }, /* _POOL32A0~*(12) */
16880 { reserved_block , 0 , 0 , 32,
16881 0xfc0003ff, 0x20000068, 0 , 0,
16882 0x0 }, /* _POOL32A0~*(13) */
16883 { instruction , 0 , 0 , 32,
16884 0xfc0003ff, 0x20000070, &NMD::MTC0 , 0,
16885 CP0_ }, /* MTC0 */
16886 { instruction , 0 , 0 , 32,
16887 0xfc0003ff, 0x20000078, &NMD::MTHC0 , 0,
16888 CP0_ | MVH_ }, /* MTHC0 */
16889 { reserved_block , 0 , 0 , 32,
16890 0xfc0003ff, 0x20000080, 0 , 0,
16891 0x0 }, /* _POOL32A0~*(16) */
16892 { reserved_block , 0 , 0 , 32,
16893 0xfc0003ff, 0x20000088, 0 , 0,
16894 0x0 }, /* _POOL32A0~*(17) */
16895 { instruction , 0 , 0 , 32,
16896 0xfc0003ff, 0x20000090, &NMD::SRAV , 0,
16897 0x0 }, /* SRAV */
16898 { instruction , 0 , 0 , 32,
16899 0xfc0003ff, 0x20000098, &NMD::MULU , 0,
16900 0x0 }, /* MULU */
16901 { reserved_block , 0 , 0 , 32,
16902 0xfc0003ff, 0x200000a0, 0 , 0,
16903 0x0 }, /* _POOL32A0~*(20) */
16904 { reserved_block , 0 , 0 , 32,
16905 0xfc0003ff, 0x200000a8, 0 , 0,
16906 0x0 }, /* _POOL32A0~*(21) */
16907 { instruction , 0 , 0 , 32,
16908 0xfc0003ff, 0x200000b0, &NMD::MFGC0 , 0,
16909 CP0_ | VZ_ }, /* MFGC0 */
16910 { instruction , 0 , 0 , 32,
16911 0xfc0003ff, 0x200000b8, &NMD::MFHGC0 , 0,
16912 CP0_ | VZ_ | MVH_ }, /* MFHGC0 */
16913 { reserved_block , 0 , 0 , 32,
16914 0xfc0003ff, 0x200000c0, 0 , 0,
16915 0x0 }, /* _POOL32A0~*(24) */
16916 { reserved_block , 0 , 0 , 32,
16917 0xfc0003ff, 0x200000c8, 0 , 0,
16918 0x0 }, /* _POOL32A0~*(25) */
16919 { instruction , 0 , 0 , 32,
16920 0xfc0003ff, 0x200000d0, &NMD::ROTRV , 0,
16921 0x0 }, /* ROTRV */
16922 { instruction , 0 , 0 , 32,
16923 0xfc0003ff, 0x200000d8, &NMD::MUHU , 0,
16924 0x0 }, /* MUHU */
16925 { reserved_block , 0 , 0 , 32,
16926 0xfc0003ff, 0x200000e0, 0 , 0,
16927 0x0 }, /* _POOL32A0~*(28) */
16928 { reserved_block , 0 , 0 , 32,
16929 0xfc0003ff, 0x200000e8, 0 , 0,
16930 0x0 }, /* _POOL32A0~*(29) */
16931 { instruction , 0 , 0 , 32,
16932 0xfc0003ff, 0x200000f0, &NMD::MTGC0 , 0,
16933 CP0_ | VZ_ }, /* MTGC0 */
16934 { instruction , 0 , 0 , 32,
16935 0xfc0003ff, 0x200000f8, &NMD::MTHGC0 , 0,
16936 CP0_ | VZ_ | MVH_ }, /* MTHGC0 */
16937 { reserved_block , 0 , 0 , 32,
16938 0xfc0003ff, 0x20000100, 0 , 0,
16939 0x0 }, /* _POOL32A0~*(32) */
16940 { reserved_block , 0 , 0 , 32,
16941 0xfc0003ff, 0x20000108, 0 , 0,
16942 0x0 }, /* _POOL32A0~*(33) */
16943 { instruction , 0 , 0 , 32,
16944 0xfc0003ff, 0x20000110, &NMD::ADD , 0,
16945 XMMS_ }, /* ADD */
16946 { instruction , 0 , 0 , 32,
16947 0xfc0003ff, 0x20000118, &NMD::DIV , 0,
16948 0x0 }, /* DIV */
16949 { reserved_block , 0 , 0 , 32,
16950 0xfc0003ff, 0x20000120, 0 , 0,
16951 0x0 }, /* _POOL32A0~*(36) */
16952 { reserved_block , 0 , 0 , 32,
16953 0xfc0003ff, 0x20000128, 0 , 0,
16954 0x0 }, /* _POOL32A0~*(37) */
16955 { instruction , 0 , 0 , 32,
16956 0xfc0003ff, 0x20000130, &NMD::DMFC0 , 0,
16957 CP0_ | MIPS64_ }, /* DMFC0 */
16958 { reserved_block , 0 , 0 , 32,
16959 0xfc0003ff, 0x20000138, 0 , 0,
16960 0x0 }, /* _POOL32A0~*(39) */
16961 { reserved_block , 0 , 0 , 32,
16962 0xfc0003ff, 0x20000140, 0 , 0,
16963 0x0 }, /* _POOL32A0~*(40) */
16964 { reserved_block , 0 , 0 , 32,
16965 0xfc0003ff, 0x20000148, 0 , 0,
16966 0x0 }, /* _POOL32A0~*(41) */
16967 { instruction , 0 , 0 , 32,
16968 0xfc0003ff, 0x20000150, &NMD::ADDU_32_ , 0,
16969 0x0 }, /* ADDU[32] */
16970 { instruction , 0 , 0 , 32,
16971 0xfc0003ff, 0x20000158, &NMD::MOD , 0,
16972 0x0 }, /* MOD */
16973 { reserved_block , 0 , 0 , 32,
16974 0xfc0003ff, 0x20000160, 0 , 0,
16975 0x0 }, /* _POOL32A0~*(44) */
16976 { reserved_block , 0 , 0 , 32,
16977 0xfc0003ff, 0x20000168, 0 , 0,
16978 0x0 }, /* _POOL32A0~*(45) */
16979 { instruction , 0 , 0 , 32,
16980 0xfc0003ff, 0x20000170, &NMD::DMTC0 , 0,
16981 CP0_ | MIPS64_ }, /* DMTC0 */
16982 { reserved_block , 0 , 0 , 32,
16983 0xfc0003ff, 0x20000178, 0 , 0,
16984 0x0 }, /* _POOL32A0~*(47) */
16985 { reserved_block , 0 , 0 , 32,
16986 0xfc0003ff, 0x20000180, 0 , 0,
16987 0x0 }, /* _POOL32A0~*(48) */
16988 { reserved_block , 0 , 0 , 32,
16989 0xfc0003ff, 0x20000188, 0 , 0,
16990 0x0 }, /* _POOL32A0~*(49) */
16991 { instruction , 0 , 0 , 32,
16992 0xfc0003ff, 0x20000190, &NMD::SUB , 0,
16993 XMMS_ }, /* SUB */
16994 { instruction , 0 , 0 , 32,
16995 0xfc0003ff, 0x20000198, &NMD::DIVU , 0,
16996 0x0 }, /* DIVU */
16997 { reserved_block , 0 , 0 , 32,
16998 0xfc0003ff, 0x200001a0, 0 , 0,
16999 0x0 }, /* _POOL32A0~*(52) */
17000 { reserved_block , 0 , 0 , 32,
17001 0xfc0003ff, 0x200001a8, 0 , 0,
17002 0x0 }, /* _POOL32A0~*(53) */
17003 { instruction , 0 , 0 , 32,
17004 0xfc0003ff, 0x200001b0, &NMD::DMFGC0 , 0,
17005 CP0_ | MIPS64_ | VZ_}, /* DMFGC0 */
17006 { reserved_block , 0 , 0 , 32,
17007 0xfc0003ff, 0x200001b8, 0 , 0,
17008 0x0 }, /* _POOL32A0~*(55) */
17009 { instruction , 0 , 0 , 32,
17010 0xfc0003ff, 0x200001c0, &NMD::RDHWR , 0,
17011 XMMS_ }, /* RDHWR */
17012 { reserved_block , 0 , 0 , 32,
17013 0xfc0003ff, 0x200001c8, 0 , 0,
17014 0x0 }, /* _POOL32A0~*(57) */
17015 { instruction , 0 , 0 , 32,
17016 0xfc0003ff, 0x200001d0, &NMD::SUBU_32_ , 0,
17017 0x0 }, /* SUBU[32] */
17018 { instruction , 0 , 0 , 32,
17019 0xfc0003ff, 0x200001d8, &NMD::MODU , 0,
17020 0x0 }, /* MODU */
17021 { reserved_block , 0 , 0 , 32,
17022 0xfc0003ff, 0x200001e0, 0 , 0,
17023 0x0 }, /* _POOL32A0~*(60) */
17024 { reserved_block , 0 , 0 , 32,
17025 0xfc0003ff, 0x200001e8, 0 , 0,
17026 0x0 }, /* _POOL32A0~*(61) */
17027 { instruction , 0 , 0 , 32,
17028 0xfc0003ff, 0x200001f0, &NMD::DMTGC0 , 0,
17029 CP0_ | MIPS64_ | VZ_}, /* DMTGC0 */
17030 { reserved_block , 0 , 0 , 32,
17031 0xfc0003ff, 0x200001f8, 0 , 0,
17032 0x0 }, /* _POOL32A0~*(63) */
17033 { reserved_block , 0 , 0 , 32,
17034 0xfc0003ff, 0x20000200, 0 , 0,
17035 0x0 }, /* _POOL32A0~*(64) */
17036 { reserved_block , 0 , 0 , 32,
17037 0xfc0003ff, 0x20000208, 0 , 0,
17038 0x0 }, /* _POOL32A0~*(65) */
17039 { pool , P_CMOVE , 2 , 32,
17040 0xfc0003ff, 0x20000210, 0 , 0,
17041 0x0 }, /* P.CMOVE */
17042 { reserved_block , 0 , 0 , 32,
17043 0xfc0003ff, 0x20000218, 0 , 0,
17044 0x0 }, /* _POOL32A0~*(67) */
17045 { reserved_block , 0 , 0 , 32,
17046 0xfc0003ff, 0x20000220, 0 , 0,
17047 0x0 }, /* _POOL32A0~*(68) */
17048 { instruction , 0 , 0 , 32,
17049 0xfc0003ff, 0x20000228, &NMD::FORK , 0,
17050 MT_ }, /* FORK */
17051 { instruction , 0 , 0 , 32,
17052 0xfc0003ff, 0x20000230, &NMD::MFTR , 0,
17053 MT_ }, /* MFTR */
17054 { instruction , 0 , 0 , 32,
17055 0xfc0003ff, 0x20000238, &NMD::MFHTR , 0,
17056 MT_ }, /* MFHTR */
17057 { reserved_block , 0 , 0 , 32,
17058 0xfc0003ff, 0x20000240, 0 , 0,
17059 0x0 }, /* _POOL32A0~*(72) */
17060 { reserved_block , 0 , 0 , 32,
17061 0xfc0003ff, 0x20000248, 0 , 0,
17062 0x0 }, /* _POOL32A0~*(73) */
17063 { instruction , 0 , 0 , 32,
17064 0xfc0003ff, 0x20000250, &NMD::AND_32_ , 0,
17065 0x0 }, /* AND[32] */
17066 { reserved_block , 0 , 0 , 32,
17067 0xfc0003ff, 0x20000258, 0 , 0,
17068 0x0 }, /* _POOL32A0~*(75) */
17069 { reserved_block , 0 , 0 , 32,
17070 0xfc0003ff, 0x20000260, 0 , 0,
17071 0x0 }, /* _POOL32A0~*(76) */
17072 { instruction , 0 , 0 , 32,
17073 0xfc0003ff, 0x20000268, &NMD::YIELD , 0,
17074 MT_ }, /* YIELD */
17075 { instruction , 0 , 0 , 32,
17076 0xfc0003ff, 0x20000270, &NMD::MTTR , 0,
17077 MT_ }, /* MTTR */
17078 { instruction , 0 , 0 , 32,
17079 0xfc0003ff, 0x20000278, &NMD::MTHTR , 0,
17080 MT_ }, /* MTHTR */
17081 { reserved_block , 0 , 0 , 32,
17082 0xfc0003ff, 0x20000280, 0 , 0,
17083 0x0 }, /* _POOL32A0~*(80) */
17084 { reserved_block , 0 , 0 , 32,
17085 0xfc0003ff, 0x20000288, 0 , 0,
17086 0x0 }, /* _POOL32A0~*(81) */
17087 { instruction , 0 , 0 , 32,
17088 0xfc0003ff, 0x20000290, &NMD::OR_32_ , 0,
17089 0x0 }, /* OR[32] */
17090 { reserved_block , 0 , 0 , 32,
17091 0xfc0003ff, 0x20000298, 0 , 0,
17092 0x0 }, /* _POOL32A0~*(83) */
17093 { reserved_block , 0 , 0 , 32,
17094 0xfc0003ff, 0x200002a0, 0 , 0,
17095 0x0 }, /* _POOL32A0~*(84) */
17096 { reserved_block , 0 , 0 , 32,
17097 0xfc0003ff, 0x200002a8, 0 , 0,
17098 0x0 }, /* _POOL32A0~*(85) */
17099 { pool , P_MT_VPE , 8 , 32,
17100 0xfc0003ff, 0x200002b0, 0 , 0,
17101 0x0 }, /* P.MT_VPE */
17102 { reserved_block , 0 , 0 , 32,
17103 0xfc0003ff, 0x200002b8, 0 , 0,
17104 0x0 }, /* _POOL32A0~*(87) */
17105 { reserved_block , 0 , 0 , 32,
17106 0xfc0003ff, 0x200002c0, 0 , 0,
17107 0x0 }, /* _POOL32A0~*(88) */
17108 { reserved_block , 0 , 0 , 32,
17109 0xfc0003ff, 0x200002c8, 0 , 0,
17110 0x0 }, /* _POOL32A0~*(89) */
17111 { instruction , 0 , 0 , 32,
17112 0xfc0003ff, 0x200002d0, &NMD::NOR , 0,
17113 0x0 }, /* NOR */
17114 { reserved_block , 0 , 0 , 32,
17115 0xfc0003ff, 0x200002d8, 0 , 0,
17116 0x0 }, /* _POOL32A0~*(91) */
17117 { reserved_block , 0 , 0 , 32,
17118 0xfc0003ff, 0x200002e0, 0 , 0,
17119 0x0 }, /* _POOL32A0~*(92) */
17120 { reserved_block , 0 , 0 , 32,
17121 0xfc0003ff, 0x200002e8, 0 , 0,
17122 0x0 }, /* _POOL32A0~*(93) */
17123 { reserved_block , 0 , 0 , 32,
17124 0xfc0003ff, 0x200002f0, 0 , 0,
17125 0x0 }, /* _POOL32A0~*(94) */
17126 { reserved_block , 0 , 0 , 32,
17127 0xfc0003ff, 0x200002f8, 0 , 0,
17128 0x0 }, /* _POOL32A0~*(95) */
17129 { reserved_block , 0 , 0 , 32,
17130 0xfc0003ff, 0x20000300, 0 , 0,
17131 0x0 }, /* _POOL32A0~*(96) */
17132 { reserved_block , 0 , 0 , 32,
17133 0xfc0003ff, 0x20000308, 0 , 0,
17134 0x0 }, /* _POOL32A0~*(97) */
17135 { instruction , 0 , 0 , 32,
17136 0xfc0003ff, 0x20000310, &NMD::XOR_32_ , 0,
17137 0x0 }, /* XOR[32] */
17138 { reserved_block , 0 , 0 , 32,
17139 0xfc0003ff, 0x20000318, 0 , 0,
17140 0x0 }, /* _POOL32A0~*(99) */
17141 { reserved_block , 0 , 0 , 32,
17142 0xfc0003ff, 0x20000320, 0 , 0,
17143 0x0 }, /* _POOL32A0~*(100) */
17144 { reserved_block , 0 , 0 , 32,
17145 0xfc0003ff, 0x20000328, 0 , 0,
17146 0x0 }, /* _POOL32A0~*(101) */
17147 { reserved_block , 0 , 0 , 32,
17148 0xfc0003ff, 0x20000330, 0 , 0,
17149 0x0 }, /* _POOL32A0~*(102) */
17150 { reserved_block , 0 , 0 , 32,
17151 0xfc0003ff, 0x20000338, 0 , 0,
17152 0x0 }, /* _POOL32A0~*(103) */
17153 { reserved_block , 0 , 0 , 32,
17154 0xfc0003ff, 0x20000340, 0 , 0,
17155 0x0 }, /* _POOL32A0~*(104) */
17156 { reserved_block , 0 , 0 , 32,
17157 0xfc0003ff, 0x20000348, 0 , 0,
17158 0x0 }, /* _POOL32A0~*(105) */
17159 { instruction , 0 , 0 , 32,
17160 0xfc0003ff, 0x20000350, &NMD::SLT , 0,
17161 0x0 }, /* SLT */
17162 { reserved_block , 0 , 0 , 32,
17163 0xfc0003ff, 0x20000358, 0 , 0,
17164 0x0 }, /* _POOL32A0~*(107) */
17165 { reserved_block , 0 , 0 , 32,
17166 0xfc0003ff, 0x20000360, 0 , 0,
17167 0x0 }, /* _POOL32A0~*(108) */
17168 { reserved_block , 0 , 0 , 32,
17169 0xfc0003ff, 0x20000368, 0 , 0,
17170 0x0 }, /* _POOL32A0~*(109) */
17171 { reserved_block , 0 , 0 , 32,
17172 0xfc0003ff, 0x20000370, 0 , 0,
17173 0x0 }, /* _POOL32A0~*(110) */
17174 { reserved_block , 0 , 0 , 32,
17175 0xfc0003ff, 0x20000378, 0 , 0,
17176 0x0 }, /* _POOL32A0~*(111) */
17177 { reserved_block , 0 , 0 , 32,
17178 0xfc0003ff, 0x20000380, 0 , 0,
17179 0x0 }, /* _POOL32A0~*(112) */
17180 { reserved_block , 0 , 0 , 32,
17181 0xfc0003ff, 0x20000388, 0 , 0,
17182 0x0 }, /* _POOL32A0~*(113) */
17183 { pool , P_SLTU , 2 , 32,
17184 0xfc0003ff, 0x20000390, 0 , 0,
17185 0x0 }, /* P.SLTU */
17186 { reserved_block , 0 , 0 , 32,
17187 0xfc0003ff, 0x20000398, 0 , 0,
17188 0x0 }, /* _POOL32A0~*(115) */
17189 { reserved_block , 0 , 0 , 32,
17190 0xfc0003ff, 0x200003a0, 0 , 0,
17191 0x0 }, /* _POOL32A0~*(116) */
17192 { reserved_block , 0 , 0 , 32,
17193 0xfc0003ff, 0x200003a8, 0 , 0,
17194 0x0 }, /* _POOL32A0~*(117) */
17195 { reserved_block , 0 , 0 , 32,
17196 0xfc0003ff, 0x200003b0, 0 , 0,
17197 0x0 }, /* _POOL32A0~*(118) */
17198 { reserved_block , 0 , 0 , 32,
17199 0xfc0003ff, 0x200003b8, 0 , 0,
17200 0x0 }, /* _POOL32A0~*(119) */
17201 { reserved_block , 0 , 0 , 32,
17202 0xfc0003ff, 0x200003c0, 0 , 0,
17203 0x0 }, /* _POOL32A0~*(120) */
17204 { reserved_block , 0 , 0 , 32,
17205 0xfc0003ff, 0x200003c8, 0 , 0,
17206 0x0 }, /* _POOL32A0~*(121) */
17207 { instruction , 0 , 0 , 32,
17208 0xfc0003ff, 0x200003d0, &NMD::SOV , 0,
17209 0x0 }, /* SOV */
17210 { reserved_block , 0 , 0 , 32,
17211 0xfc0003ff, 0x200003d8, 0 , 0,
17212 0x0 }, /* _POOL32A0~*(123) */
17213 { reserved_block , 0 , 0 , 32,
17214 0xfc0003ff, 0x200003e0, 0 , 0,
17215 0x0 }, /* _POOL32A0~*(124) */
17216 { reserved_block , 0 , 0 , 32,
17217 0xfc0003ff, 0x200003e8, 0 , 0,
17218 0x0 }, /* _POOL32A0~*(125) */
17219 { reserved_block , 0 , 0 , 32,
17220 0xfc0003ff, 0x200003f0, 0 , 0,
17221 0x0 }, /* _POOL32A0~*(126) */
17222 { reserved_block , 0 , 0 , 32,
17223 0xfc0003ff, 0x200003f8, 0 , 0,
17224 0x0 }, /* _POOL32A0~*(127) */
17225 };
17226
17227
17228 NMD::Pool NMD::ADDQ__S__PH[2] = {
17229 { instruction , 0 , 0 , 32,
17230 0xfc0007ff, 0x2000000d, &NMD::ADDQ_PH , 0,
17231 DSP_ }, /* ADDQ.PH */
17232 { instruction , 0 , 0 , 32,
17233 0xfc0007ff, 0x2000040d, &NMD::ADDQ_S_PH , 0,
17234 DSP_ }, /* ADDQ_S.PH */
17235 };
17236
17237
17238 NMD::Pool NMD::MUL__S__PH[2] = {
17239 { instruction , 0 , 0 , 32,
17240 0xfc0007ff, 0x2000002d, &NMD::MUL_PH , 0,
17241 DSP_ }, /* MUL.PH */
17242 { instruction , 0 , 0 , 32,
17243 0xfc0007ff, 0x2000042d, &NMD::MUL_S_PH , 0,
17244 DSP_ }, /* MUL_S.PH */
17245 };
17246
17247
17248 NMD::Pool NMD::ADDQH__R__PH[2] = {
17249 { instruction , 0 , 0 , 32,
17250 0xfc0007ff, 0x2000004d, &NMD::ADDQH_PH , 0,
17251 DSP_ }, /* ADDQH.PH */
17252 { instruction , 0 , 0 , 32,
17253 0xfc0007ff, 0x2000044d, &NMD::ADDQH_R_PH , 0,
17254 DSP_ }, /* ADDQH_R.PH */
17255 };
17256
17257
17258 NMD::Pool NMD::ADDQH__R__W[2] = {
17259 { instruction , 0 , 0 , 32,
17260 0xfc0007ff, 0x2000008d, &NMD::ADDQH_W , 0,
17261 DSP_ }, /* ADDQH.W */
17262 { instruction , 0 , 0 , 32,
17263 0xfc0007ff, 0x2000048d, &NMD::ADDQH_R_W , 0,
17264 DSP_ }, /* ADDQH_R.W */
17265 };
17266
17267
17268 NMD::Pool NMD::ADDU__S__QB[2] = {
17269 { instruction , 0 , 0 , 32,
17270 0xfc0007ff, 0x200000cd, &NMD::ADDU_QB , 0,
17271 DSP_ }, /* ADDU.QB */
17272 { instruction , 0 , 0 , 32,
17273 0xfc0007ff, 0x200004cd, &NMD::ADDU_S_QB , 0,
17274 DSP_ }, /* ADDU_S.QB */
17275 };
17276
17277
17278 NMD::Pool NMD::ADDU__S__PH[2] = {
17279 { instruction , 0 , 0 , 32,
17280 0xfc0007ff, 0x2000010d, &NMD::ADDU_PH , 0,
17281 DSP_ }, /* ADDU.PH */
17282 { instruction , 0 , 0 , 32,
17283 0xfc0007ff, 0x2000050d, &NMD::ADDU_S_PH , 0,
17284 DSP_ }, /* ADDU_S.PH */
17285 };
17286
17287
17288 NMD::Pool NMD::ADDUH__R__QB[2] = {
17289 { instruction , 0 , 0 , 32,
17290 0xfc0007ff, 0x2000014d, &NMD::ADDUH_QB , 0,
17291 DSP_ }, /* ADDUH.QB */
17292 { instruction , 0 , 0 , 32,
17293 0xfc0007ff, 0x2000054d, &NMD::ADDUH_R_QB , 0,
17294 DSP_ }, /* ADDUH_R.QB */
17295 };
17296
17297
17298 NMD::Pool NMD::SHRAV__R__PH[2] = {
17299 { instruction , 0 , 0 , 32,
17300 0xfc0007ff, 0x2000018d, &NMD::SHRAV_PH , 0,
17301 DSP_ }, /* SHRAV.PH */
17302 { instruction , 0 , 0 , 32,
17303 0xfc0007ff, 0x2000058d, &NMD::SHRAV_R_PH , 0,
17304 DSP_ }, /* SHRAV_R.PH */
17305 };
17306
17307
17308 NMD::Pool NMD::SHRAV__R__QB[2] = {
17309 { instruction , 0 , 0 , 32,
17310 0xfc0007ff, 0x200001cd, &NMD::SHRAV_QB , 0,
17311 DSP_ }, /* SHRAV.QB */
17312 { instruction , 0 , 0 , 32,
17313 0xfc0007ff, 0x200005cd, &NMD::SHRAV_R_QB , 0,
17314 DSP_ }, /* SHRAV_R.QB */
17315 };
17316
17317
17318 NMD::Pool NMD::SUBQ__S__PH[2] = {
17319 { instruction , 0 , 0 , 32,
17320 0xfc0007ff, 0x2000020d, &NMD::SUBQ_PH , 0,
17321 DSP_ }, /* SUBQ.PH */
17322 { instruction , 0 , 0 , 32,
17323 0xfc0007ff, 0x2000060d, &NMD::SUBQ_S_PH , 0,
17324 DSP_ }, /* SUBQ_S.PH */
17325 };
17326
17327
17328 NMD::Pool NMD::SUBQH__R__PH[2] = {
17329 { instruction , 0 , 0 , 32,
17330 0xfc0007ff, 0x2000024d, &NMD::SUBQH_PH , 0,
17331 DSP_ }, /* SUBQH.PH */
17332 { instruction , 0 , 0 , 32,
17333 0xfc0007ff, 0x2000064d, &NMD::SUBQH_R_PH , 0,
17334 DSP_ }, /* SUBQH_R.PH */
17335 };
17336
17337
17338 NMD::Pool NMD::SUBQH__R__W[2] = {
17339 { instruction , 0 , 0 , 32,
17340 0xfc0007ff, 0x2000028d, &NMD::SUBQH_W , 0,
17341 DSP_ }, /* SUBQH.W */
17342 { instruction , 0 , 0 , 32,
17343 0xfc0007ff, 0x2000068d, &NMD::SUBQH_R_W , 0,
17344 DSP_ }, /* SUBQH_R.W */
17345 };
17346
17347
17348 NMD::Pool NMD::SUBU__S__QB[2] = {
17349 { instruction , 0 , 0 , 32,
17350 0xfc0007ff, 0x200002cd, &NMD::SUBU_QB , 0,
17351 DSP_ }, /* SUBU.QB */
17352 { instruction , 0 , 0 , 32,
17353 0xfc0007ff, 0x200006cd, &NMD::SUBU_S_QB , 0,
17354 DSP_ }, /* SUBU_S.QB */
17355 };
17356
17357
17358 NMD::Pool NMD::SUBU__S__PH[2] = {
17359 { instruction , 0 , 0 , 32,
17360 0xfc0007ff, 0x2000030d, &NMD::SUBU_PH , 0,
17361 DSP_ }, /* SUBU.PH */
17362 { instruction , 0 , 0 , 32,
17363 0xfc0007ff, 0x2000070d, &NMD::SUBU_S_PH , 0,
17364 DSP_ }, /* SUBU_S.PH */
17365 };
17366
17367
17368 NMD::Pool NMD::SHRA__R__PH[2] = {
17369 { instruction , 0 , 0 , 32,
17370 0xfc0007ff, 0x20000335, &NMD::SHRA_PH , 0,
17371 DSP_ }, /* SHRA.PH */
17372 { instruction , 0 , 0 , 32,
17373 0xfc0007ff, 0x20000735, &NMD::SHRA_R_PH , 0,
17374 DSP_ }, /* SHRA_R.PH */
17375 };
17376
17377
17378 NMD::Pool NMD::SUBUH__R__QB[2] = {
17379 { instruction , 0 , 0 , 32,
17380 0xfc0007ff, 0x2000034d, &NMD::SUBUH_QB , 0,
17381 DSP_ }, /* SUBUH.QB */
17382 { instruction , 0 , 0 , 32,
17383 0xfc0007ff, 0x2000074d, &NMD::SUBUH_R_QB , 0,
17384 DSP_ }, /* SUBUH_R.QB */
17385 };
17386
17387
17388 NMD::Pool NMD::SHLLV__S__PH[2] = {
17389 { instruction , 0 , 0 , 32,
17390 0xfc0007ff, 0x2000038d, &NMD::SHLLV_PH , 0,
17391 DSP_ }, /* SHLLV.PH */
17392 { instruction , 0 , 0 , 32,
17393 0xfc0007ff, 0x2000078d, &NMD::SHLLV_S_PH , 0,
17394 DSP_ }, /* SHLLV_S.PH */
17395 };
17396
17397
17398 NMD::Pool NMD::SHLL__S__PH[4] = {
17399 { instruction , 0 , 0 , 32,
17400 0xfc000fff, 0x200003b5, &NMD::SHLL_PH , 0,
17401 DSP_ }, /* SHLL.PH */
17402 { reserved_block , 0 , 0 , 32,
17403 0xfc000fff, 0x200007b5, 0 , 0,
17404 0x0 }, /* SHLL[_S].PH~*(1) */
17405 { instruction , 0 , 0 , 32,
17406 0xfc000fff, 0x20000bb5, &NMD::SHLL_S_PH , 0,
17407 DSP_ }, /* SHLL_S.PH */
17408 { reserved_block , 0 , 0 , 32,
17409 0xfc000fff, 0x20000fb5, 0 , 0,
17410 0x0 }, /* SHLL[_S].PH~*(3) */
17411 };
17412
17413
17414 NMD::Pool NMD::PRECR_SRA__R__PH_W[2] = {
17415 { instruction , 0 , 0 , 32,
17416 0xfc0007ff, 0x200003cd, &NMD::PRECR_SRA_PH_W , 0,
17417 DSP_ }, /* PRECR_SRA.PH.W */
17418 { instruction , 0 , 0 , 32,
17419 0xfc0007ff, 0x200007cd, &NMD::PRECR_SRA_R_PH_W , 0,
17420 DSP_ }, /* PRECR_SRA_R.PH.W */
17421 };
17422
17423
17424 NMD::Pool NMD::_POOL32A5[128] = {
17425 { instruction , 0 , 0 , 32,
17426 0xfc0003ff, 0x20000005, &NMD::CMP_EQ_PH , 0,
17427 DSP_ }, /* CMP.EQ.PH */
17428 { pool , ADDQ__S__PH , 2 , 32,
17429 0xfc0003ff, 0x2000000d, 0 , 0,
17430 0x0 }, /* ADDQ[_S].PH */
17431 { reserved_block , 0 , 0 , 32,
17432 0xfc0003ff, 0x20000015, 0 , 0,
17433 0x0 }, /* _POOL32A5~*(2) */
17434 { instruction , 0 , 0 , 32,
17435 0xfc0003ff, 0x2000001d, &NMD::SHILO , 0,
17436 DSP_ }, /* SHILO */
17437 { instruction , 0 , 0 , 32,
17438 0xfc0003ff, 0x20000025, &NMD::MULEQ_S_W_PHL , 0,
17439 DSP_ }, /* MULEQ_S.W.PHL */
17440 { pool , MUL__S__PH , 2 , 32,
17441 0xfc0003ff, 0x2000002d, 0 , 0,
17442 0x0 }, /* MUL[_S].PH */
17443 { reserved_block , 0 , 0 , 32,
17444 0xfc0003ff, 0x20000035, 0 , 0,
17445 0x0 }, /* _POOL32A5~*(6) */
17446 { instruction , 0 , 0 , 32,
17447 0xfc0003ff, 0x2000003d, &NMD::REPL_PH , 0,
17448 DSP_ }, /* REPL.PH */
17449 { instruction , 0 , 0 , 32,
17450 0xfc0003ff, 0x20000045, &NMD::CMP_LT_PH , 0,
17451 DSP_ }, /* CMP.LT.PH */
17452 { pool , ADDQH__R__PH , 2 , 32,
17453 0xfc0003ff, 0x2000004d, 0 , 0,
17454 0x0 }, /* ADDQH[_R].PH */
17455 { reserved_block , 0 , 0 , 32,
17456 0xfc0003ff, 0x20000055, 0 , 0,
17457 0x0 }, /* _POOL32A5~*(10) */
17458 { reserved_block , 0 , 0 , 32,
17459 0xfc0003ff, 0x2000005d, 0 , 0,
17460 0x0 }, /* _POOL32A5~*(11) */
17461 { instruction , 0 , 0 , 32,
17462 0xfc0003ff, 0x20000065, &NMD::MULEQ_S_W_PHR , 0,
17463 DSP_ }, /* MULEQ_S.W.PHR */
17464 { instruction , 0 , 0 , 32,
17465 0xfc0003ff, 0x2000006d, &NMD::PRECR_QB_PH , 0,
17466 DSP_ }, /* PRECR.QB.PH */
17467 { reserved_block , 0 , 0 , 32,
17468 0xfc0003ff, 0x20000075, 0 , 0,
17469 0x0 }, /* _POOL32A5~*(14) */
17470 { reserved_block , 0 , 0 , 32,
17471 0xfc0003ff, 0x2000007d, 0 , 0,
17472 0x0 }, /* _POOL32A5~*(15) */
17473 { instruction , 0 , 0 , 32,
17474 0xfc0003ff, 0x20000085, &NMD::CMP_LE_PH , 0,
17475 DSP_ }, /* CMP.LE.PH */
17476 { pool , ADDQH__R__W , 2 , 32,
17477 0xfc0003ff, 0x2000008d, 0 , 0,
17478 0x0 }, /* ADDQH[_R].W */
17479 { instruction , 0 , 0 , 32,
17480 0xfc0003ff, 0x20000095, &NMD::MULEU_S_PH_QBL , 0,
17481 DSP_ }, /* MULEU_S.PH.QBL */
17482 { reserved_block , 0 , 0 , 32,
17483 0xfc0003ff, 0x2000009d, 0 , 0,
17484 0x0 }, /* _POOL32A5~*(19) */
17485 { reserved_block , 0 , 0 , 32,
17486 0xfc0003ff, 0x200000a5, 0 , 0,
17487 0x0 }, /* _POOL32A5~*(20) */
17488 { instruction , 0 , 0 , 32,
17489 0xfc0003ff, 0x200000ad, &NMD::PRECRQ_QB_PH , 0,
17490 DSP_ }, /* PRECRQ.QB.PH */
17491 { reserved_block , 0 , 0 , 32,
17492 0xfc0003ff, 0x200000b5, 0 , 0,
17493 0x0 }, /* _POOL32A5~*(22) */
17494 { reserved_block , 0 , 0 , 32,
17495 0xfc0003ff, 0x200000bd, 0 , 0,
17496 0x0 }, /* _POOL32A5~*(23) */
17497 { instruction , 0 , 0 , 32,
17498 0xfc0003ff, 0x200000c5, &NMD::CMPGU_EQ_QB , 0,
17499 DSP_ }, /* CMPGU.EQ.QB */
17500 { pool , ADDU__S__QB , 2 , 32,
17501 0xfc0003ff, 0x200000cd, 0 , 0,
17502 0x0 }, /* ADDU[_S].QB */
17503 { instruction , 0 , 0 , 32,
17504 0xfc0003ff, 0x200000d5, &NMD::MULEU_S_PH_QBR , 0,
17505 DSP_ }, /* MULEU_S.PH.QBR */
17506 { reserved_block , 0 , 0 , 32,
17507 0xfc0003ff, 0x200000dd, 0 , 0,
17508 0x0 }, /* _POOL32A5~*(27) */
17509 { reserved_block , 0 , 0 , 32,
17510 0xfc0003ff, 0x200000e5, 0 , 0,
17511 0x0 }, /* _POOL32A5~*(28) */
17512 { instruction , 0 , 0 , 32,
17513 0xfc0003ff, 0x200000ed, &NMD::PRECRQ_PH_W , 0,
17514 DSP_ }, /* PRECRQ.PH.W */
17515 { reserved_block , 0 , 0 , 32,
17516 0xfc0003ff, 0x200000f5, 0 , 0,
17517 0x0 }, /* _POOL32A5~*(30) */
17518 { reserved_block , 0 , 0 , 32,
17519 0xfc0003ff, 0x200000fd, 0 , 0,
17520 0x0 }, /* _POOL32A5~*(31) */
17521 { instruction , 0 , 0 , 32,
17522 0xfc0003ff, 0x20000105, &NMD::CMPGU_LT_QB , 0,
17523 DSP_ }, /* CMPGU.LT.QB */
17524 { pool , ADDU__S__PH , 2 , 32,
17525 0xfc0003ff, 0x2000010d, 0 , 0,
17526 0x0 }, /* ADDU[_S].PH */
17527 { instruction , 0 , 0 , 32,
17528 0xfc0003ff, 0x20000115, &NMD::MULQ_RS_PH , 0,
17529 DSP_ }, /* MULQ_RS.PH */
17530 { reserved_block , 0 , 0 , 32,
17531 0xfc0003ff, 0x2000011d, 0 , 0,
17532 0x0 }, /* _POOL32A5~*(35) */
17533 { reserved_block , 0 , 0 , 32,
17534 0xfc0003ff, 0x20000125, 0 , 0,
17535 0x0 }, /* _POOL32A5~*(36) */
17536 { instruction , 0 , 0 , 32,
17537 0xfc0003ff, 0x2000012d, &NMD::PRECRQ_RS_PH_W , 0,
17538 DSP_ }, /* PRECRQ_RS.PH.W */
17539 { reserved_block , 0 , 0 , 32,
17540 0xfc0003ff, 0x20000135, 0 , 0,
17541 0x0 }, /* _POOL32A5~*(38) */
17542 { reserved_block , 0 , 0 , 32,
17543 0xfc0003ff, 0x2000013d, 0 , 0,
17544 0x0 }, /* _POOL32A5~*(39) */
17545 { instruction , 0 , 0 , 32,
17546 0xfc0003ff, 0x20000145, &NMD::CMPGU_LE_QB , 0,
17547 DSP_ }, /* CMPGU.LE.QB */
17548 { pool , ADDUH__R__QB , 2 , 32,
17549 0xfc0003ff, 0x2000014d, 0 , 0,
17550 0x0 }, /* ADDUH[_R].QB */
17551 { instruction , 0 , 0 , 32,
17552 0xfc0003ff, 0x20000155, &NMD::MULQ_S_PH , 0,
17553 DSP_ }, /* MULQ_S.PH */
17554 { reserved_block , 0 , 0 , 32,
17555 0xfc0003ff, 0x2000015d, 0 , 0,
17556 0x0 }, /* _POOL32A5~*(43) */
17557 { reserved_block , 0 , 0 , 32,
17558 0xfc0003ff, 0x20000165, 0 , 0,
17559 0x0 }, /* _POOL32A5~*(44) */
17560 { instruction , 0 , 0 , 32,
17561 0xfc0003ff, 0x2000016d, &NMD::PRECRQU_S_QB_PH , 0,
17562 DSP_ }, /* PRECRQU_S.QB.PH */
17563 { reserved_block , 0 , 0 , 32,
17564 0xfc0003ff, 0x20000175, 0 , 0,
17565 0x0 }, /* _POOL32A5~*(46) */
17566 { reserved_block , 0 , 0 , 32,
17567 0xfc0003ff, 0x2000017d, 0 , 0,
17568 0x0 }, /* _POOL32A5~*(47) */
17569 { instruction , 0 , 0 , 32,
17570 0xfc0003ff, 0x20000185, &NMD::CMPGDU_EQ_QB , 0,
17571 DSP_ }, /* CMPGDU.EQ.QB */
17572 { pool , SHRAV__R__PH , 2 , 32,
17573 0xfc0003ff, 0x2000018d, 0 , 0,
17574 0x0 }, /* SHRAV[_R].PH */
17575 { instruction , 0 , 0 , 32,
17576 0xfc0003ff, 0x20000195, &NMD::MULQ_RS_W , 0,
17577 DSP_ }, /* MULQ_RS.W */
17578 { reserved_block , 0 , 0 , 32,
17579 0xfc0003ff, 0x2000019d, 0 , 0,
17580 0x0 }, /* _POOL32A5~*(51) */
17581 { reserved_block , 0 , 0 , 32,
17582 0xfc0003ff, 0x200001a5, 0 , 0,
17583 0x0 }, /* _POOL32A5~*(52) */
17584 { instruction , 0 , 0 , 32,
17585 0xfc0003ff, 0x200001ad, &NMD::PACKRL_PH , 0,
17586 DSP_ }, /* PACKRL.PH */
17587 { reserved_block , 0 , 0 , 32,
17588 0xfc0003ff, 0x200001b5, 0 , 0,
17589 0x0 }, /* _POOL32A5~*(54) */
17590 { reserved_block , 0 , 0 , 32,
17591 0xfc0003ff, 0x200001bd, 0 , 0,
17592 0x0 }, /* _POOL32A5~*(55) */
17593 { instruction , 0 , 0 , 32,
17594 0xfc0003ff, 0x200001c5, &NMD::CMPGDU_LT_QB , 0,
17595 DSP_ }, /* CMPGDU.LT.QB */
17596 { pool , SHRAV__R__QB , 2 , 32,
17597 0xfc0003ff, 0x200001cd, 0 , 0,
17598 0x0 }, /* SHRAV[_R].QB */
17599 { instruction , 0 , 0 , 32,
17600 0xfc0003ff, 0x200001d5, &NMD::MULQ_S_W , 0,
17601 DSP_ }, /* MULQ_S.W */
17602 { reserved_block , 0 , 0 , 32,
17603 0xfc0003ff, 0x200001dd, 0 , 0,
17604 0x0 }, /* _POOL32A5~*(59) */
17605 { reserved_block , 0 , 0 , 32,
17606 0xfc0003ff, 0x200001e5, 0 , 0,
17607 0x0 }, /* _POOL32A5~*(60) */
17608 { instruction , 0 , 0 , 32,
17609 0xfc0003ff, 0x200001ed, &NMD::PICK_QB , 0,
17610 DSP_ }, /* PICK.QB */
17611 { reserved_block , 0 , 0 , 32,
17612 0xfc0003ff, 0x200001f5, 0 , 0,
17613 0x0 }, /* _POOL32A5~*(62) */
17614 { reserved_block , 0 , 0 , 32,
17615 0xfc0003ff, 0x200001fd, 0 , 0,
17616 0x0 }, /* _POOL32A5~*(63) */
17617 { instruction , 0 , 0 , 32,
17618 0xfc0003ff, 0x20000205, &NMD::CMPGDU_LE_QB , 0,
17619 DSP_ }, /* CMPGDU.LE.QB */
17620 { pool , SUBQ__S__PH , 2 , 32,
17621 0xfc0003ff, 0x2000020d, 0 , 0,
17622 0x0 }, /* SUBQ[_S].PH */
17623 { instruction , 0 , 0 , 32,
17624 0xfc0003ff, 0x20000215, &NMD::APPEND , 0,
17625 DSP_ }, /* APPEND */
17626 { reserved_block , 0 , 0 , 32,
17627 0xfc0003ff, 0x2000021d, 0 , 0,
17628 0x0 }, /* _POOL32A5~*(67) */
17629 { reserved_block , 0 , 0 , 32,
17630 0xfc0003ff, 0x20000225, 0 , 0,
17631 0x0 }, /* _POOL32A5~*(68) */
17632 { instruction , 0 , 0 , 32,
17633 0xfc0003ff, 0x2000022d, &NMD::PICK_PH , 0,
17634 DSP_ }, /* PICK.PH */
17635 { reserved_block , 0 , 0 , 32,
17636 0xfc0003ff, 0x20000235, 0 , 0,
17637 0x0 }, /* _POOL32A5~*(70) */
17638 { reserved_block , 0 , 0 , 32,
17639 0xfc0003ff, 0x2000023d, 0 , 0,
17640 0x0 }, /* _POOL32A5~*(71) */
17641 { instruction , 0 , 0 , 32,
17642 0xfc0003ff, 0x20000245, &NMD::CMPU_EQ_QB , 0,
17643 DSP_ }, /* CMPU.EQ.QB */
17644 { pool , SUBQH__R__PH , 2 , 32,
17645 0xfc0003ff, 0x2000024d, 0 , 0,
17646 0x0 }, /* SUBQH[_R].PH */
17647 { instruction , 0 , 0 , 32,
17648 0xfc0003ff, 0x20000255, &NMD::PREPEND , 0,
17649 DSP_ }, /* PREPEND */
17650 { reserved_block , 0 , 0 , 32,
17651 0xfc0003ff, 0x2000025d, 0 , 0,
17652 0x0 }, /* _POOL32A5~*(75) */
17653 { reserved_block , 0 , 0 , 32,
17654 0xfc0003ff, 0x20000265, 0 , 0,
17655 0x0 }, /* _POOL32A5~*(76) */
17656 { reserved_block , 0 , 0 , 32,
17657 0xfc0003ff, 0x2000026d, 0 , 0,
17658 0x0 }, /* _POOL32A5~*(77) */
17659 { reserved_block , 0 , 0 , 32,
17660 0xfc0003ff, 0x20000275, 0 , 0,
17661 0x0 }, /* _POOL32A5~*(78) */
17662 { reserved_block , 0 , 0 , 32,
17663 0xfc0003ff, 0x2000027d, 0 , 0,
17664 0x0 }, /* _POOL32A5~*(79) */
17665 { instruction , 0 , 0 , 32,
17666 0xfc0003ff, 0x20000285, &NMD::CMPU_LT_QB , 0,
17667 DSP_ }, /* CMPU.LT.QB */
17668 { pool , SUBQH__R__W , 2 , 32,
17669 0xfc0003ff, 0x2000028d, 0 , 0,
17670 0x0 }, /* SUBQH[_R].W */
17671 { instruction , 0 , 0 , 32,
17672 0xfc0003ff, 0x20000295, &NMD::MODSUB , 0,
17673 DSP_ }, /* MODSUB */
17674 { reserved_block , 0 , 0 , 32,
17675 0xfc0003ff, 0x2000029d, 0 , 0,
17676 0x0 }, /* _POOL32A5~*(83) */
17677 { reserved_block , 0 , 0 , 32,
17678 0xfc0003ff, 0x200002a5, 0 , 0,
17679 0x0 }, /* _POOL32A5~*(84) */
17680 { reserved_block , 0 , 0 , 32,
17681 0xfc0003ff, 0x200002ad, 0 , 0,
17682 0x0 }, /* _POOL32A5~*(85) */
17683 { reserved_block , 0 , 0 , 32,
17684 0xfc0003ff, 0x200002b5, 0 , 0,
17685 0x0 }, /* _POOL32A5~*(86) */
17686 { reserved_block , 0 , 0 , 32,
17687 0xfc0003ff, 0x200002bd, 0 , 0,
17688 0x0 }, /* _POOL32A5~*(87) */
17689 { instruction , 0 , 0 , 32,
17690 0xfc0003ff, 0x200002c5, &NMD::CMPU_LE_QB , 0,
17691 DSP_ }, /* CMPU.LE.QB */
17692 { pool , SUBU__S__QB , 2 , 32,
17693 0xfc0003ff, 0x200002cd, 0 , 0,
17694 0x0 }, /* SUBU[_S].QB */
17695 { instruction , 0 , 0 , 32,
17696 0xfc0003ff, 0x200002d5, &NMD::SHRAV_R_W , 0,
17697 DSP_ }, /* SHRAV_R.W */
17698 { reserved_block , 0 , 0 , 32,
17699 0xfc0003ff, 0x200002dd, 0 , 0,
17700 0x0 }, /* _POOL32A5~*(91) */
17701 { reserved_block , 0 , 0 , 32,
17702 0xfc0003ff, 0x200002e5, 0 , 0,
17703 0x0 }, /* _POOL32A5~*(92) */
17704 { reserved_block , 0 , 0 , 32,
17705 0xfc0003ff, 0x200002ed, 0 , 0,
17706 0x0 }, /* _POOL32A5~*(93) */
17707 { instruction , 0 , 0 , 32,
17708 0xfc0003ff, 0x200002f5, &NMD::SHRA_R_W , 0,
17709 DSP_ }, /* SHRA_R.W */
17710 { reserved_block , 0 , 0 , 32,
17711 0xfc0003ff, 0x200002fd, 0 , 0,
17712 0x0 }, /* _POOL32A5~*(95) */
17713 { instruction , 0 , 0 , 32,
17714 0xfc0003ff, 0x20000305, &NMD::ADDQ_S_W , 0,
17715 DSP_ }, /* ADDQ_S.W */
17716 { pool , SUBU__S__PH , 2 , 32,
17717 0xfc0003ff, 0x2000030d, 0 , 0,
17718 0x0 }, /* SUBU[_S].PH */
17719 { instruction , 0 , 0 , 32,
17720 0xfc0003ff, 0x20000315, &NMD::SHRLV_PH , 0,
17721 DSP_ }, /* SHRLV.PH */
17722 { reserved_block , 0 , 0 , 32,
17723 0xfc0003ff, 0x2000031d, 0 , 0,
17724 0x0 }, /* _POOL32A5~*(99) */
17725 { reserved_block , 0 , 0 , 32,
17726 0xfc0003ff, 0x20000325, 0 , 0,
17727 0x0 }, /* _POOL32A5~*(100) */
17728 { reserved_block , 0 , 0 , 32,
17729 0xfc0003ff, 0x2000032d, 0 , 0,
17730 0x0 }, /* _POOL32A5~*(101) */
17731 { pool , SHRA__R__PH , 2 , 32,
17732 0xfc0003ff, 0x20000335, 0 , 0,
17733 0x0 }, /* SHRA[_R].PH */
17734 { reserved_block , 0 , 0 , 32,
17735 0xfc0003ff, 0x2000033d, 0 , 0,
17736 0x0 }, /* _POOL32A5~*(103) */
17737 { instruction , 0 , 0 , 32,
17738 0xfc0003ff, 0x20000345, &NMD::SUBQ_S_W , 0,
17739 DSP_ }, /* SUBQ_S.W */
17740 { pool , SUBUH__R__QB , 2 , 32,
17741 0xfc0003ff, 0x2000034d, 0 , 0,
17742 0x0 }, /* SUBUH[_R].QB */
17743 { instruction , 0 , 0 , 32,
17744 0xfc0003ff, 0x20000355, &NMD::SHRLV_QB , 0,
17745 DSP_ }, /* SHRLV.QB */
17746 { reserved_block , 0 , 0 , 32,
17747 0xfc0003ff, 0x2000035d, 0 , 0,
17748 0x0 }, /* _POOL32A5~*(107) */
17749 { reserved_block , 0 , 0 , 32,
17750 0xfc0003ff, 0x20000365, 0 , 0,
17751 0x0 }, /* _POOL32A5~*(108) */
17752 { reserved_block , 0 , 0 , 32,
17753 0xfc0003ff, 0x2000036d, 0 , 0,
17754 0x0 }, /* _POOL32A5~*(109) */
17755 { reserved_block , 0 , 0 , 32,
17756 0xfc0003ff, 0x20000375, 0 , 0,
17757 0x0 }, /* _POOL32A5~*(110) */
17758 { reserved_block , 0 , 0 , 32,
17759 0xfc0003ff, 0x2000037d, 0 , 0,
17760 0x0 }, /* _POOL32A5~*(111) */
17761 { instruction , 0 , 0 , 32,
17762 0xfc0003ff, 0x20000385, &NMD::ADDSC , 0,
17763 DSP_ }, /* ADDSC */
17764 { pool , SHLLV__S__PH , 2 , 32,
17765 0xfc0003ff, 0x2000038d, 0 , 0,
17766 0x0 }, /* SHLLV[_S].PH */
17767 { instruction , 0 , 0 , 32,
17768 0xfc0003ff, 0x20000395, &NMD::SHLLV_QB , 0,
17769 DSP_ }, /* SHLLV.QB */
17770 { reserved_block , 0 , 0 , 32,
17771 0xfc0003ff, 0x2000039d, 0 , 0,
17772 0x0 }, /* _POOL32A5~*(115) */
17773 { reserved_block , 0 , 0 , 32,
17774 0xfc0003ff, 0x200003a5, 0 , 0,
17775 0x0 }, /* _POOL32A5~*(116) */
17776 { reserved_block , 0 , 0 , 32,
17777 0xfc0003ff, 0x200003ad, 0 , 0,
17778 0x0 }, /* _POOL32A5~*(117) */
17779 { pool , SHLL__S__PH , 4 , 32,
17780 0xfc0003ff, 0x200003b5, 0 , 0,
17781 0x0 }, /* SHLL[_S].PH */
17782 { reserved_block , 0 , 0 , 32,
17783 0xfc0003ff, 0x200003bd, 0 , 0,
17784 0x0 }, /* _POOL32A5~*(119) */
17785 { instruction , 0 , 0 , 32,
17786 0xfc0003ff, 0x200003c5, &NMD::ADDWC , 0,
17787 DSP_ }, /* ADDWC */
17788 { pool , PRECR_SRA__R__PH_W , 2 , 32,
17789 0xfc0003ff, 0x200003cd, 0 , 0,
17790 0x0 }, /* PRECR_SRA[_R].PH.W */
17791 { instruction , 0 , 0 , 32,
17792 0xfc0003ff, 0x200003d5, &NMD::SHLLV_S_W , 0,
17793 DSP_ }, /* SHLLV_S.W */
17794 { reserved_block , 0 , 0 , 32,
17795 0xfc0003ff, 0x200003dd, 0 , 0,
17796 0x0 }, /* _POOL32A5~*(123) */
17797 { reserved_block , 0 , 0 , 32,
17798 0xfc0003ff, 0x200003e5, 0 , 0,
17799 0x0 }, /* _POOL32A5~*(124) */
17800 { reserved_block , 0 , 0 , 32,
17801 0xfc0003ff, 0x200003ed, 0 , 0,
17802 0x0 }, /* _POOL32A5~*(125) */
17803 { instruction , 0 , 0 , 32,
17804 0xfc0003ff, 0x200003f5, &NMD::SHLL_S_W , 0,
17805 DSP_ }, /* SHLL_S.W */
17806 { reserved_block , 0 , 0 , 32,
17807 0xfc0003ff, 0x200003fd, 0 , 0,
17808 0x0 }, /* _POOL32A5~*(127) */
17809 };
17810
17811
17812 NMD::Pool NMD::PP_LSX[16] = {
17813 { instruction , 0 , 0 , 32,
17814 0xfc0007ff, 0x20000007, &NMD::LBX , 0,
17815 0x0 }, /* LBX */
17816 { instruction , 0 , 0 , 32,
17817 0xfc0007ff, 0x20000087, &NMD::SBX , 0,
17818 XMMS_ }, /* SBX */
17819 { instruction , 0 , 0 , 32,
17820 0xfc0007ff, 0x20000107, &NMD::LBUX , 0,
17821 0x0 }, /* LBUX */
17822 { reserved_block , 0 , 0 , 32,
17823 0xfc0007ff, 0x20000187, 0 , 0,
17824 0x0 }, /* PP.LSX~*(3) */
17825 { instruction , 0 , 0 , 32,
17826 0xfc0007ff, 0x20000207, &NMD::LHX , 0,
17827 0x0 }, /* LHX */
17828 { instruction , 0 , 0 , 32,
17829 0xfc0007ff, 0x20000287, &NMD::SHX , 0,
17830 XMMS_ }, /* SHX */
17831 { instruction , 0 , 0 , 32,
17832 0xfc0007ff, 0x20000307, &NMD::LHUX , 0,
17833 0x0 }, /* LHUX */
17834 { instruction , 0 , 0 , 32,
17835 0xfc0007ff, 0x20000387, &NMD::LWUX , 0,
17836 MIPS64_ }, /* LWUX */
17837 { instruction , 0 , 0 , 32,
17838 0xfc0007ff, 0x20000407, &NMD::LWX , 0,
17839 0x0 }, /* LWX */
17840 { instruction , 0 , 0 , 32,
17841 0xfc0007ff, 0x20000487, &NMD::SWX , 0,
17842 XMMS_ }, /* SWX */
17843 { instruction , 0 , 0 , 32,
17844 0xfc0007ff, 0x20000507, &NMD::LWC1X , 0,
17845 CP1_ }, /* LWC1X */
17846 { instruction , 0 , 0 , 32,
17847 0xfc0007ff, 0x20000587, &NMD::SWC1X , 0,
17848 CP1_ }, /* SWC1X */
17849 { instruction , 0 , 0 , 32,
17850 0xfc0007ff, 0x20000607, &NMD::LDX , 0,
17851 MIPS64_ }, /* LDX */
17852 { instruction , 0 , 0 , 32,
17853 0xfc0007ff, 0x20000687, &NMD::SDX , 0,
17854 MIPS64_ }, /* SDX */
17855 { instruction , 0 , 0 , 32,
17856 0xfc0007ff, 0x20000707, &NMD::LDC1X , 0,
17857 CP1_ }, /* LDC1X */
17858 { instruction , 0 , 0 , 32,
17859 0xfc0007ff, 0x20000787, &NMD::SDC1X , 0,
17860 CP1_ }, /* SDC1X */
17861 };
17862
17863
17864 NMD::Pool NMD::PP_LSXS[16] = {
17865 { reserved_block , 0 , 0 , 32,
17866 0xfc0007ff, 0x20000047, 0 , 0,
17867 0x0 }, /* PP.LSXS~*(0) */
17868 { reserved_block , 0 , 0 , 32,
17869 0xfc0007ff, 0x200000c7, 0 , 0,
17870 0x0 }, /* PP.LSXS~*(1) */
17871 { reserved_block , 0 , 0 , 32,
17872 0xfc0007ff, 0x20000147, 0 , 0,
17873 0x0 }, /* PP.LSXS~*(2) */
17874 { reserved_block , 0 , 0 , 32,
17875 0xfc0007ff, 0x200001c7, 0 , 0,
17876 0x0 }, /* PP.LSXS~*(3) */
17877 { instruction , 0 , 0 , 32,
17878 0xfc0007ff, 0x20000247, &NMD::LHXS , 0,
17879 0x0 }, /* LHXS */
17880 { instruction , 0 , 0 , 32,
17881 0xfc0007ff, 0x200002c7, &NMD::SHXS , 0,
17882 XMMS_ }, /* SHXS */
17883 { instruction , 0 , 0 , 32,
17884 0xfc0007ff, 0x20000347, &NMD::LHUXS , 0,
17885 0x0 }, /* LHUXS */
17886 { instruction , 0 , 0 , 32,
17887 0xfc0007ff, 0x200003c7, &NMD::LWUXS , 0,
17888 MIPS64_ }, /* LWUXS */
17889 { instruction , 0 , 0 , 32,
17890 0xfc0007ff, 0x20000447, &NMD::LWXS_32_ , 0,
17891 0x0 }, /* LWXS[32] */
17892 { instruction , 0 , 0 , 32,
17893 0xfc0007ff, 0x200004c7, &NMD::SWXS , 0,
17894 XMMS_ }, /* SWXS */
17895 { instruction , 0 , 0 , 32,
17896 0xfc0007ff, 0x20000547, &NMD::LWC1XS , 0,
17897 CP1_ }, /* LWC1XS */
17898 { instruction , 0 , 0 , 32,
17899 0xfc0007ff, 0x200005c7, &NMD::SWC1XS , 0,
17900 CP1_ }, /* SWC1XS */
17901 { instruction , 0 , 0 , 32,
17902 0xfc0007ff, 0x20000647, &NMD::LDXS , 0,
17903 MIPS64_ }, /* LDXS */
17904 { instruction , 0 , 0 , 32,
17905 0xfc0007ff, 0x200006c7, &NMD::SDXS , 0,
17906 MIPS64_ }, /* SDXS */
17907 { instruction , 0 , 0 , 32,
17908 0xfc0007ff, 0x20000747, &NMD::LDC1XS , 0,
17909 CP1_ }, /* LDC1XS */
17910 { instruction , 0 , 0 , 32,
17911 0xfc0007ff, 0x200007c7, &NMD::SDC1XS , 0,
17912 CP1_ }, /* SDC1XS */
17913 };
17914
17915
17916 NMD::Pool NMD::P_LSX[2] = {
17917 { pool , PP_LSX , 16 , 32,
17918 0xfc00007f, 0x20000007, 0 , 0,
17919 0x0 }, /* PP.LSX */
17920 { pool , PP_LSXS , 16 , 32,
17921 0xfc00007f, 0x20000047, 0 , 0,
17922 0x0 }, /* PP.LSXS */
17923 };
17924
17925
17926 NMD::Pool NMD::POOL32Axf_1_0[4] = {
17927 { instruction , 0 , 0 , 32,
17928 0xfc003fff, 0x2000007f, &NMD::MFHI_DSP_ , 0,
17929 DSP_ }, /* MFHI[DSP] */
17930 { instruction , 0 , 0 , 32,
17931 0xfc003fff, 0x2000107f, &NMD::MFLO_DSP_ , 0,
17932 DSP_ }, /* MFLO[DSP] */
17933 { instruction , 0 , 0 , 32,
17934 0xfc003fff, 0x2000207f, &NMD::MTHI_DSP_ , 0,
17935 DSP_ }, /* MTHI[DSP] */
17936 { instruction , 0 , 0 , 32,
17937 0xfc003fff, 0x2000307f, &NMD::MTLO_DSP_ , 0,
17938 DSP_ }, /* MTLO[DSP] */
17939 };
17940
17941
17942 NMD::Pool NMD::POOL32Axf_1_1[4] = {
17943 { instruction , 0 , 0 , 32,
17944 0xfc003fff, 0x2000027f, &NMD::MTHLIP , 0,
17945 DSP_ }, /* MTHLIP */
17946 { instruction , 0 , 0 , 32,
17947 0xfc003fff, 0x2000127f, &NMD::SHILOV , 0,
17948 DSP_ }, /* SHILOV */
17949 { reserved_block , 0 , 0 , 32,
17950 0xfc003fff, 0x2000227f, 0 , 0,
17951 0x0 }, /* POOL32Axf_1_1~*(2) */
17952 { reserved_block , 0 , 0 , 32,
17953 0xfc003fff, 0x2000327f, 0 , 0,
17954 0x0 }, /* POOL32Axf_1_1~*(3) */
17955 };
17956
17957
17958 NMD::Pool NMD::POOL32Axf_1_3[4] = {
17959 { instruction , 0 , 0 , 32,
17960 0xfc003fff, 0x2000067f, &NMD::RDDSP , 0,
17961 DSP_ }, /* RDDSP */
17962 { instruction , 0 , 0 , 32,
17963 0xfc003fff, 0x2000167f, &NMD::WRDSP , 0,
17964 DSP_ }, /* WRDSP */
17965 { instruction , 0 , 0 , 32,
17966 0xfc003fff, 0x2000267f, &NMD::EXTP , 0,
17967 DSP_ }, /* EXTP */
17968 { instruction , 0 , 0 , 32,
17969 0xfc003fff, 0x2000367f, &NMD::EXTPDP , 0,
17970 DSP_ }, /* EXTPDP */
17971 };
17972
17973
17974 NMD::Pool NMD::POOL32Axf_1_4[2] = {
17975 { instruction , 0 , 0 , 32,
17976 0xfc001fff, 0x2000087f, &NMD::SHLL_QB , 0,
17977 DSP_ }, /* SHLL.QB */
17978 { instruction , 0 , 0 , 32,
17979 0xfc001fff, 0x2000187f, &NMD::SHRL_QB , 0,
17980 DSP_ }, /* SHRL.QB */
17981 };
17982
17983
17984 NMD::Pool NMD::MAQ_S_A__W_PHR[2] = {
17985 { instruction , 0 , 0 , 32,
17986 0xfc003fff, 0x20000a7f, &NMD::MAQ_S_W_PHR , 0,
17987 DSP_ }, /* MAQ_S.W.PHR */
17988 { instruction , 0 , 0 , 32,
17989 0xfc003fff, 0x20002a7f, &NMD::MAQ_SA_W_PHR , 0,
17990 DSP_ }, /* MAQ_SA.W.PHR */
17991 };
17992
17993
17994 NMD::Pool NMD::MAQ_S_A__W_PHL[2] = {
17995 { instruction , 0 , 0 , 32,
17996 0xfc003fff, 0x20001a7f, &NMD::MAQ_S_W_PHL , 0,
17997 DSP_ }, /* MAQ_S.W.PHL */
17998 { instruction , 0 , 0 , 32,
17999 0xfc003fff, 0x20003a7f, &NMD::MAQ_SA_W_PHL , 0,
18000 DSP_ }, /* MAQ_SA.W.PHL */
18001 };
18002
18003
18004 NMD::Pool NMD::POOL32Axf_1_5[2] = {
18005 { pool , MAQ_S_A__W_PHR , 2 , 32,
18006 0xfc001fff, 0x20000a7f, 0 , 0,
18007 0x0 }, /* MAQ_S[A].W.PHR */
18008 { pool , MAQ_S_A__W_PHL , 2 , 32,
18009 0xfc001fff, 0x20001a7f, 0 , 0,
18010 0x0 }, /* MAQ_S[A].W.PHL */
18011 };
18012
18013
18014 NMD::Pool NMD::POOL32Axf_1_7[4] = {
18015 { instruction , 0 , 0 , 32,
18016 0xfc003fff, 0x20000e7f, &NMD::EXTR_W , 0,
18017 DSP_ }, /* EXTR.W */
18018 { instruction , 0 , 0 , 32,
18019 0xfc003fff, 0x20001e7f, &NMD::EXTR_R_W , 0,
18020 DSP_ }, /* EXTR_R.W */
18021 { instruction , 0 , 0 , 32,
18022 0xfc003fff, 0x20002e7f, &NMD::EXTR_RS_W , 0,
18023 DSP_ }, /* EXTR_RS.W */
18024 { instruction , 0 , 0 , 32,
18025 0xfc003fff, 0x20003e7f, &NMD::EXTR_S_H , 0,
18026 DSP_ }, /* EXTR_S.H */
18027 };
18028
18029
18030 NMD::Pool NMD::POOL32Axf_1[8] = {
18031 { pool , POOL32Axf_1_0 , 4 , 32,
18032 0xfc000fff, 0x2000007f, 0 , 0,
18033 0x0 }, /* POOL32Axf_1_0 */
18034 { pool , POOL32Axf_1_1 , 4 , 32,
18035 0xfc000fff, 0x2000027f, 0 , 0,
18036 0x0 }, /* POOL32Axf_1_1 */
18037 { reserved_block , 0 , 0 , 32,
18038 0xfc000fff, 0x2000047f, 0 , 0,
18039 0x0 }, /* POOL32Axf_1~*(2) */
18040 { pool , POOL32Axf_1_3 , 4 , 32,
18041 0xfc000fff, 0x2000067f, 0 , 0,
18042 0x0 }, /* POOL32Axf_1_3 */
18043 { pool , POOL32Axf_1_4 , 2 , 32,
18044 0xfc000fff, 0x2000087f, 0 , 0,
18045 0x0 }, /* POOL32Axf_1_4 */
18046 { pool , POOL32Axf_1_5 , 2 , 32,
18047 0xfc000fff, 0x20000a7f, 0 , 0,
18048 0x0 }, /* POOL32Axf_1_5 */
18049 { reserved_block , 0 , 0 , 32,
18050 0xfc000fff, 0x20000c7f, 0 , 0,
18051 0x0 }, /* POOL32Axf_1~*(6) */
18052 { pool , POOL32Axf_1_7 , 4 , 32,
18053 0xfc000fff, 0x20000e7f, 0 , 0,
18054 0x0 }, /* POOL32Axf_1_7 */
18055 };
18056
18057
18058 NMD::Pool NMD::POOL32Axf_2_DSP__0_7[8] = {
18059 { instruction , 0 , 0 , 32,
18060 0xfc003fff, 0x200000bf, &NMD::DPA_W_PH , 0,
18061 DSP_ }, /* DPA.W.PH */
18062 { instruction , 0 , 0 , 32,
18063 0xfc003fff, 0x200002bf, &NMD::DPAQ_S_W_PH , 0,
18064 DSP_ }, /* DPAQ_S.W.PH */
18065 { instruction , 0 , 0 , 32,
18066 0xfc003fff, 0x200004bf, &NMD::DPS_W_PH , 0,
18067 DSP_ }, /* DPS.W.PH */
18068 { instruction , 0 , 0 , 32,
18069 0xfc003fff, 0x200006bf, &NMD::DPSQ_S_W_PH , 0,
18070 DSP_ }, /* DPSQ_S.W.PH */
18071 { reserved_block , 0 , 0 , 32,
18072 0xfc003fff, 0x200008bf, 0 , 0,
18073 0x0 }, /* POOL32Axf_2(DSP)_0_7~*(4) */
18074 { instruction , 0 , 0 , 32,
18075 0xfc003fff, 0x20000abf, &NMD::MADD_DSP_ , 0,
18076 DSP_ }, /* MADD[DSP] */
18077 { instruction , 0 , 0 , 32,
18078 0xfc003fff, 0x20000cbf, &NMD::MULT_DSP_ , 0,
18079 DSP_ }, /* MULT[DSP] */
18080 { instruction , 0 , 0 , 32,
18081 0xfc003fff, 0x20000ebf, &NMD::EXTRV_W , 0,
18082 DSP_ }, /* EXTRV.W */
18083 };
18084
18085
18086 NMD::Pool NMD::POOL32Axf_2_DSP__8_15[8] = {
18087 { instruction , 0 , 0 , 32,
18088 0xfc003fff, 0x200010bf, &NMD::DPAX_W_PH , 0,
18089 DSP_ }, /* DPAX.W.PH */
18090 { instruction , 0 , 0 , 32,
18091 0xfc003fff, 0x200012bf, &NMD::DPAQ_SA_L_W , 0,
18092 DSP_ }, /* DPAQ_SA.L.W */
18093 { instruction , 0 , 0 , 32,
18094 0xfc003fff, 0x200014bf, &NMD::DPSX_W_PH , 0,
18095 DSP_ }, /* DPSX.W.PH */
18096 { instruction , 0 , 0 , 32,
18097 0xfc003fff, 0x200016bf, &NMD::DPSQ_SA_L_W , 0,
18098 DSP_ }, /* DPSQ_SA.L.W */
18099 { reserved_block , 0 , 0 , 32,
18100 0xfc003fff, 0x200018bf, 0 , 0,
18101 0x0 }, /* POOL32Axf_2(DSP)_8_15~*(4) */
18102 { instruction , 0 , 0 , 32,
18103 0xfc003fff, 0x20001abf, &NMD::MADDU_DSP_ , 0,
18104 DSP_ }, /* MADDU[DSP] */
18105 { instruction , 0 , 0 , 32,
18106 0xfc003fff, 0x20001cbf, &NMD::MULTU_DSP_ , 0,
18107 DSP_ }, /* MULTU[DSP] */
18108 { instruction , 0 , 0 , 32,
18109 0xfc003fff, 0x20001ebf, &NMD::EXTRV_R_W , 0,
18110 DSP_ }, /* EXTRV_R.W */
18111 };
18112
18113
18114 NMD::Pool NMD::POOL32Axf_2_DSP__16_23[8] = {
18115 { instruction , 0 , 0 , 32,
18116 0xfc003fff, 0x200020bf, &NMD::DPAU_H_QBL , 0,
18117 DSP_ }, /* DPAU.H.QBL */
18118 { instruction , 0 , 0 , 32,
18119 0xfc003fff, 0x200022bf, &NMD::DPAQX_S_W_PH , 0,
18120 DSP_ }, /* DPAQX_S.W.PH */
18121 { instruction , 0 , 0 , 32,
18122 0xfc003fff, 0x200024bf, &NMD::DPSU_H_QBL , 0,
18123 DSP_ }, /* DPSU.H.QBL */
18124 { instruction , 0 , 0 , 32,
18125 0xfc003fff, 0x200026bf, &NMD::DPSQX_S_W_PH , 0,
18126 DSP_ }, /* DPSQX_S.W.PH */
18127 { instruction , 0 , 0 , 32,
18128 0xfc003fff, 0x200028bf, &NMD::EXTPV , 0,
18129 DSP_ }, /* EXTPV */
18130 { instruction , 0 , 0 , 32,
18131 0xfc003fff, 0x20002abf, &NMD::MSUB_DSP_ , 0,
18132 DSP_ }, /* MSUB[DSP] */
18133 { instruction , 0 , 0 , 32,
18134 0xfc003fff, 0x20002cbf, &NMD::MULSA_W_PH , 0,
18135 DSP_ }, /* MULSA.W.PH */
18136 { instruction , 0 , 0 , 32,
18137 0xfc003fff, 0x20002ebf, &NMD::EXTRV_RS_W , 0,
18138 DSP_ }, /* EXTRV_RS.W */
18139 };
18140
18141
18142 NMD::Pool NMD::POOL32Axf_2_DSP__24_31[8] = {
18143 { instruction , 0 , 0 , 32,
18144 0xfc003fff, 0x200030bf, &NMD::DPAU_H_QBR , 0,
18145 DSP_ }, /* DPAU.H.QBR */
18146 { instruction , 0 , 0 , 32,
18147 0xfc003fff, 0x200032bf, &NMD::DPAQX_SA_W_PH , 0,
18148 DSP_ }, /* DPAQX_SA.W.PH */
18149 { instruction , 0 , 0 , 32,
18150 0xfc003fff, 0x200034bf, &NMD::DPSU_H_QBR , 0,
18151 DSP_ }, /* DPSU.H.QBR */
18152 { instruction , 0 , 0 , 32,
18153 0xfc003fff, 0x200036bf, &NMD::DPSQX_SA_W_PH , 0,
18154 DSP_ }, /* DPSQX_SA.W.PH */
18155 { instruction , 0 , 0 , 32,
18156 0xfc003fff, 0x200038bf, &NMD::EXTPDPV , 0,
18157 DSP_ }, /* EXTPDPV */
18158 { instruction , 0 , 0 , 32,
18159 0xfc003fff, 0x20003abf, &NMD::MSUBU_DSP_ , 0,
18160 DSP_ }, /* MSUBU[DSP] */
18161 { instruction , 0 , 0 , 32,
18162 0xfc003fff, 0x20003cbf, &NMD::MULSAQ_S_W_PH , 0,
18163 DSP_ }, /* MULSAQ_S.W.PH */
18164 { instruction , 0 , 0 , 32,
18165 0xfc003fff, 0x20003ebf, &NMD::EXTRV_S_H , 0,
18166 DSP_ }, /* EXTRV_S.H */
18167 };
18168
18169
18170 NMD::Pool NMD::POOL32Axf_2[4] = {
18171 { pool , POOL32Axf_2_DSP__0_7, 8 , 32,
18172 0xfc0031ff, 0x200000bf, 0 , 0,
18173 0x0 }, /* POOL32Axf_2(DSP)_0_7 */
18174 { pool , POOL32Axf_2_DSP__8_15, 8 , 32,
18175 0xfc0031ff, 0x200010bf, 0 , 0,
18176 0x0 }, /* POOL32Axf_2(DSP)_8_15 */
18177 { pool , POOL32Axf_2_DSP__16_23, 8 , 32,
18178 0xfc0031ff, 0x200020bf, 0 , 0,
18179 0x0 }, /* POOL32Axf_2(DSP)_16_23 */
18180 { pool , POOL32Axf_2_DSP__24_31, 8 , 32,
18181 0xfc0031ff, 0x200030bf, 0 , 0,
18182 0x0 }, /* POOL32Axf_2(DSP)_24_31 */
18183 };
18184
18185
18186 NMD::Pool NMD::POOL32Axf_4[128] = {
18187 { instruction , 0 , 0 , 32,
18188 0xfc00ffff, 0x2000013f, &NMD::ABSQ_S_QB , 0,
18189 DSP_ }, /* ABSQ_S.QB */
18190 { instruction , 0 , 0 , 32,
18191 0xfc00ffff, 0x2000033f, &NMD::REPLV_PH , 0,
18192 DSP_ }, /* REPLV.PH */
18193 { reserved_block , 0 , 0 , 32,
18194 0xfc00ffff, 0x2000053f, 0 , 0,
18195 0x0 }, /* POOL32Axf_4~*(2) */
18196 { reserved_block , 0 , 0 , 32,
18197 0xfc00ffff, 0x2000073f, 0 , 0,
18198 0x0 }, /* POOL32Axf_4~*(3) */
18199 { reserved_block , 0 , 0 , 32,
18200 0xfc00ffff, 0x2000093f, 0 , 0,
18201 0x0 }, /* POOL32Axf_4~*(4) */
18202 { reserved_block , 0 , 0 , 32,
18203 0xfc00ffff, 0x20000b3f, 0 , 0,
18204 0x0 }, /* POOL32Axf_4~*(5) */
18205 { reserved_block , 0 , 0 , 32,
18206 0xfc00ffff, 0x20000d3f, 0 , 0,
18207 0x0 }, /* POOL32Axf_4~*(6) */
18208 { reserved_block , 0 , 0 , 32,
18209 0xfc00ffff, 0x20000f3f, 0 , 0,
18210 0x0 }, /* POOL32Axf_4~*(7) */
18211 { instruction , 0 , 0 , 32,
18212 0xfc00ffff, 0x2000113f, &NMD::ABSQ_S_PH , 0,
18213 DSP_ }, /* ABSQ_S.PH */
18214 { instruction , 0 , 0 , 32,
18215 0xfc00ffff, 0x2000133f, &NMD::REPLV_QB , 0,
18216 DSP_ }, /* REPLV.QB */
18217 { reserved_block , 0 , 0 , 32,
18218 0xfc00ffff, 0x2000153f, 0 , 0,
18219 0x0 }, /* POOL32Axf_4~*(10) */
18220 { reserved_block , 0 , 0 , 32,
18221 0xfc00ffff, 0x2000173f, 0 , 0,
18222 0x0 }, /* POOL32Axf_4~*(11) */
18223 { reserved_block , 0 , 0 , 32,
18224 0xfc00ffff, 0x2000193f, 0 , 0,
18225 0x0 }, /* POOL32Axf_4~*(12) */
18226 { reserved_block , 0 , 0 , 32,
18227 0xfc00ffff, 0x20001b3f, 0 , 0,
18228 0x0 }, /* POOL32Axf_4~*(13) */
18229 { reserved_block , 0 , 0 , 32,
18230 0xfc00ffff, 0x20001d3f, 0 , 0,
18231 0x0 }, /* POOL32Axf_4~*(14) */
18232 { reserved_block , 0 , 0 , 32,
18233 0xfc00ffff, 0x20001f3f, 0 , 0,
18234 0x0 }, /* POOL32Axf_4~*(15) */
18235 { instruction , 0 , 0 , 32,
18236 0xfc00ffff, 0x2000213f, &NMD::ABSQ_S_W , 0,
18237 DSP_ }, /* ABSQ_S.W */
18238 { reserved_block , 0 , 0 , 32,
18239 0xfc00ffff, 0x2000233f, 0 , 0,
18240 0x0 }, /* POOL32Axf_4~*(17) */
18241 { reserved_block , 0 , 0 , 32,
18242 0xfc00ffff, 0x2000253f, 0 , 0,
18243 0x0 }, /* POOL32Axf_4~*(18) */
18244 { reserved_block , 0 , 0 , 32,
18245 0xfc00ffff, 0x2000273f, 0 , 0,
18246 0x0 }, /* POOL32Axf_4~*(19) */
18247 { reserved_block , 0 , 0 , 32,
18248 0xfc00ffff, 0x2000293f, 0 , 0,
18249 0x0 }, /* POOL32Axf_4~*(20) */
18250 { reserved_block , 0 , 0 , 32,
18251 0xfc00ffff, 0x20002b3f, 0 , 0,
18252 0x0 }, /* POOL32Axf_4~*(21) */
18253 { reserved_block , 0 , 0 , 32,
18254 0xfc00ffff, 0x20002d3f, 0 , 0,
18255 0x0 }, /* POOL32Axf_4~*(22) */
18256 { reserved_block , 0 , 0 , 32,
18257 0xfc00ffff, 0x20002f3f, 0 , 0,
18258 0x0 }, /* POOL32Axf_4~*(23) */
18259 { reserved_block , 0 , 0 , 32,
18260 0xfc00ffff, 0x2000313f, 0 , 0,
18261 0x0 }, /* POOL32Axf_4~*(24) */
18262 { reserved_block , 0 , 0 , 32,
18263 0xfc00ffff, 0x2000333f, 0 , 0,
18264 0x0 }, /* POOL32Axf_4~*(25) */
18265 { reserved_block , 0 , 0 , 32,
18266 0xfc00ffff, 0x2000353f, 0 , 0,
18267 0x0 }, /* POOL32Axf_4~*(26) */
18268 { reserved_block , 0 , 0 , 32,
18269 0xfc00ffff, 0x2000373f, 0 , 0,
18270 0x0 }, /* POOL32Axf_4~*(27) */
18271 { reserved_block , 0 , 0 , 32,
18272 0xfc00ffff, 0x2000393f, 0 , 0,
18273 0x0 }, /* POOL32Axf_4~*(28) */
18274 { reserved_block , 0 , 0 , 32,
18275 0xfc00ffff, 0x20003b3f, 0 , 0,
18276 0x0 }, /* POOL32Axf_4~*(29) */
18277 { reserved_block , 0 , 0 , 32,
18278 0xfc00ffff, 0x20003d3f, 0 , 0,
18279 0x0 }, /* POOL32Axf_4~*(30) */
18280 { reserved_block , 0 , 0 , 32,
18281 0xfc00ffff, 0x20003f3f, 0 , 0,
18282 0x0 }, /* POOL32Axf_4~*(31) */
18283 { instruction , 0 , 0 , 32,
18284 0xfc00ffff, 0x2000413f, &NMD::INSV , 0,
18285 DSP_ }, /* INSV */
18286 { reserved_block , 0 , 0 , 32,
18287 0xfc00ffff, 0x2000433f, 0 , 0,
18288 0x0 }, /* POOL32Axf_4~*(33) */
18289 { reserved_block , 0 , 0 , 32,
18290 0xfc00ffff, 0x2000453f, 0 , 0,
18291 0x0 }, /* POOL32Axf_4~*(34) */
18292 { reserved_block , 0 , 0 , 32,
18293 0xfc00ffff, 0x2000473f, 0 , 0,
18294 0x0 }, /* POOL32Axf_4~*(35) */
18295 { reserved_block , 0 , 0 , 32,
18296 0xfc00ffff, 0x2000493f, 0 , 0,
18297 0x0 }, /* POOL32Axf_4~*(36) */
18298 { instruction , 0 , 0 , 32,
18299 0xfc00ffff, 0x20004b3f, &NMD::CLO , 0,
18300 XMMS_ }, /* CLO */
18301 { instruction , 0 , 0 , 32,
18302 0xfc00ffff, 0x20004d3f, &NMD::MFC2 , 0,
18303 CP2_ }, /* MFC2 */
18304 { reserved_block , 0 , 0 , 32,
18305 0xfc00ffff, 0x20004f3f, 0 , 0,
18306 0x0 }, /* POOL32Axf_4~*(39) */
18307 { instruction , 0 , 0 , 32,
18308 0xfc00ffff, 0x2000513f, &NMD::PRECEQ_W_PHL , 0,
18309 DSP_ }, /* PRECEQ.W.PHL */
18310 { reserved_block , 0 , 0 , 32,
18311 0xfc00ffff, 0x2000533f, 0 , 0,
18312 0x0 }, /* POOL32Axf_4~*(41) */
18313 { reserved_block , 0 , 0 , 32,
18314 0xfc00ffff, 0x2000553f, 0 , 0,
18315 0x0 }, /* POOL32Axf_4~*(42) */
18316 { reserved_block , 0 , 0 , 32,
18317 0xfc00ffff, 0x2000573f, 0 , 0,
18318 0x0 }, /* POOL32Axf_4~*(43) */
18319 { reserved_block , 0 , 0 , 32,
18320 0xfc00ffff, 0x2000593f, 0 , 0,
18321 0x0 }, /* POOL32Axf_4~*(44) */
18322 { instruction , 0 , 0 , 32,
18323 0xfc00ffff, 0x20005b3f, &NMD::CLZ , 0,
18324 XMMS_ }, /* CLZ */
18325 { instruction , 0 , 0 , 32,
18326 0xfc00ffff, 0x20005d3f, &NMD::MTC2 , 0,
18327 CP2_ }, /* MTC2 */
18328 { reserved_block , 0 , 0 , 32,
18329 0xfc00ffff, 0x20005f3f, 0 , 0,
18330 0x0 }, /* POOL32Axf_4~*(47) */
18331 { instruction , 0 , 0 , 32,
18332 0xfc00ffff, 0x2000613f, &NMD::PRECEQ_W_PHR , 0,
18333 DSP_ }, /* PRECEQ.W.PHR */
18334 { reserved_block , 0 , 0 , 32,
18335 0xfc00ffff, 0x2000633f, 0 , 0,
18336 0x0 }, /* POOL32Axf_4~*(49) */
18337 { reserved_block , 0 , 0 , 32,
18338 0xfc00ffff, 0x2000653f, 0 , 0,
18339 0x0 }, /* POOL32Axf_4~*(50) */
18340 { reserved_block , 0 , 0 , 32,
18341 0xfc00ffff, 0x2000673f, 0 , 0,
18342 0x0 }, /* POOL32Axf_4~*(51) */
18343 { reserved_block , 0 , 0 , 32,
18344 0xfc00ffff, 0x2000693f, 0 , 0,
18345 0x0 }, /* POOL32Axf_4~*(52) */
18346 { reserved_block , 0 , 0 , 32,
18347 0xfc00ffff, 0x20006b3f, 0 , 0,
18348 0x0 }, /* POOL32Axf_4~*(53) */
18349 { instruction , 0 , 0 , 32,
18350 0xfc00ffff, 0x20006d3f, &NMD::DMFC2 , 0,
18351 CP2_ }, /* DMFC2 */
18352 { reserved_block , 0 , 0 , 32,
18353 0xfc00ffff, 0x20006f3f, 0 , 0,
18354 0x0 }, /* POOL32Axf_4~*(55) */
18355 { instruction , 0 , 0 , 32,
18356 0xfc00ffff, 0x2000713f, &NMD::PRECEQU_PH_QBL , 0,
18357 DSP_ }, /* PRECEQU.PH.QBL */
18358 { instruction , 0 , 0 , 32,
18359 0xfc00ffff, 0x2000733f, &NMD::PRECEQU_PH_QBLA , 0,
18360 DSP_ }, /* PRECEQU.PH.QBLA */
18361 { reserved_block , 0 , 0 , 32,
18362 0xfc00ffff, 0x2000753f, 0 , 0,
18363 0x0 }, /* POOL32Axf_4~*(58) */
18364 { reserved_block , 0 , 0 , 32,
18365 0xfc00ffff, 0x2000773f, 0 , 0,
18366 0x0 }, /* POOL32Axf_4~*(59) */
18367 { reserved_block , 0 , 0 , 32,
18368 0xfc00ffff, 0x2000793f, 0 , 0,
18369 0x0 }, /* POOL32Axf_4~*(60) */
18370 { reserved_block , 0 , 0 , 32,
18371 0xfc00ffff, 0x20007b3f, 0 , 0,
18372 0x0 }, /* POOL32Axf_4~*(61) */
18373 { instruction , 0 , 0 , 32,
18374 0xfc00ffff, 0x20007d3f, &NMD::DMTC2 , 0,
18375 CP2_ }, /* DMTC2 */
18376 { reserved_block , 0 , 0 , 32,
18377 0xfc00ffff, 0x20007f3f, 0 , 0,
18378 0x0 }, /* POOL32Axf_4~*(63) */
18379 { reserved_block , 0 , 0 , 32,
18380 0xfc00ffff, 0x2000813f, 0 , 0,
18381 0x0 }, /* POOL32Axf_4~*(64) */
18382 { reserved_block , 0 , 0 , 32,
18383 0xfc00ffff, 0x2000833f, 0 , 0,
18384 0x0 }, /* POOL32Axf_4~*(65) */
18385 { reserved_block , 0 , 0 , 32,
18386 0xfc00ffff, 0x2000853f, 0 , 0,
18387 0x0 }, /* POOL32Axf_4~*(66) */
18388 { reserved_block , 0 , 0 , 32,
18389 0xfc00ffff, 0x2000873f, 0 , 0,
18390 0x0 }, /* POOL32Axf_4~*(67) */
18391 { reserved_block , 0 , 0 , 32,
18392 0xfc00ffff, 0x2000893f, 0 , 0,
18393 0x0 }, /* POOL32Axf_4~*(68) */
18394 { reserved_block , 0 , 0 , 32,
18395 0xfc00ffff, 0x20008b3f, 0 , 0,
18396 0x0 }, /* POOL32Axf_4~*(69) */
18397 { instruction , 0 , 0 , 32,
18398 0xfc00ffff, 0x20008d3f, &NMD::MFHC2 , 0,
18399 CP2_ }, /* MFHC2 */
18400 { reserved_block , 0 , 0 , 32,
18401 0xfc00ffff, 0x20008f3f, 0 , 0,
18402 0x0 }, /* POOL32Axf_4~*(71) */
18403 { instruction , 0 , 0 , 32,
18404 0xfc00ffff, 0x2000913f, &NMD::PRECEQU_PH_QBR , 0,
18405 DSP_ }, /* PRECEQU.PH.QBR */
18406 { instruction , 0 , 0 , 32,
18407 0xfc00ffff, 0x2000933f, &NMD::PRECEQU_PH_QBRA , 0,
18408 DSP_ }, /* PRECEQU.PH.QBRA */
18409 { reserved_block , 0 , 0 , 32,
18410 0xfc00ffff, 0x2000953f, 0 , 0,
18411 0x0 }, /* POOL32Axf_4~*(74) */
18412 { reserved_block , 0 , 0 , 32,
18413 0xfc00ffff, 0x2000973f, 0 , 0,
18414 0x0 }, /* POOL32Axf_4~*(75) */
18415 { reserved_block , 0 , 0 , 32,
18416 0xfc00ffff, 0x2000993f, 0 , 0,
18417 0x0 }, /* POOL32Axf_4~*(76) */
18418 { reserved_block , 0 , 0 , 32,
18419 0xfc00ffff, 0x20009b3f, 0 , 0,
18420 0x0 }, /* POOL32Axf_4~*(77) */
18421 { instruction , 0 , 0 , 32,
18422 0xfc00ffff, 0x20009d3f, &NMD::MTHC2 , 0,
18423 CP2_ }, /* MTHC2 */
18424 { reserved_block , 0 , 0 , 32,
18425 0xfc00ffff, 0x20009f3f, 0 , 0,
18426 0x0 }, /* POOL32Axf_4~*(79) */
18427 { reserved_block , 0 , 0 , 32,
18428 0xfc00ffff, 0x2000a13f, 0 , 0,
18429 0x0 }, /* POOL32Axf_4~*(80) */
18430 { reserved_block , 0 , 0 , 32,
18431 0xfc00ffff, 0x2000a33f, 0 , 0,
18432 0x0 }, /* POOL32Axf_4~*(81) */
18433 { reserved_block , 0 , 0 , 32,
18434 0xfc00ffff, 0x2000a53f, 0 , 0,
18435 0x0 }, /* POOL32Axf_4~*(82) */
18436 { reserved_block , 0 , 0 , 32,
18437 0xfc00ffff, 0x2000a73f, 0 , 0,
18438 0x0 }, /* POOL32Axf_4~*(83) */
18439 { reserved_block , 0 , 0 , 32,
18440 0xfc00ffff, 0x2000a93f, 0 , 0,
18441 0x0 }, /* POOL32Axf_4~*(84) */
18442 { reserved_block , 0 , 0 , 32,
18443 0xfc00ffff, 0x2000ab3f, 0 , 0,
18444 0x0 }, /* POOL32Axf_4~*(85) */
18445 { reserved_block , 0 , 0 , 32,
18446 0xfc00ffff, 0x2000ad3f, 0 , 0,
18447 0x0 }, /* POOL32Axf_4~*(86) */
18448 { reserved_block , 0 , 0 , 32,
18449 0xfc00ffff, 0x2000af3f, 0 , 0,
18450 0x0 }, /* POOL32Axf_4~*(87) */
18451 { instruction , 0 , 0 , 32,
18452 0xfc00ffff, 0x2000b13f, &NMD::PRECEU_PH_QBL , 0,
18453 DSP_ }, /* PRECEU.PH.QBL */
18454 { instruction , 0 , 0 , 32,
18455 0xfc00ffff, 0x2000b33f, &NMD::PRECEU_PH_QBLA , 0,
18456 DSP_ }, /* PRECEU.PH.QBLA */
18457 { reserved_block , 0 , 0 , 32,
18458 0xfc00ffff, 0x2000b53f, 0 , 0,
18459 0x0 }, /* POOL32Axf_4~*(90) */
18460 { reserved_block , 0 , 0 , 32,
18461 0xfc00ffff, 0x2000b73f, 0 , 0,
18462 0x0 }, /* POOL32Axf_4~*(91) */
18463 { reserved_block , 0 , 0 , 32,
18464 0xfc00ffff, 0x2000b93f, 0 , 0,
18465 0x0 }, /* POOL32Axf_4~*(92) */
18466 { reserved_block , 0 , 0 , 32,
18467 0xfc00ffff, 0x2000bb3f, 0 , 0,
18468 0x0 }, /* POOL32Axf_4~*(93) */
18469 { reserved_block , 0 , 0 , 32,
18470 0xfc00ffff, 0x2000bd3f, 0 , 0,
18471 0x0 }, /* POOL32Axf_4~*(94) */
18472 { reserved_block , 0 , 0 , 32,
18473 0xfc00ffff, 0x2000bf3f, 0 , 0,
18474 0x0 }, /* POOL32Axf_4~*(95) */
18475 { reserved_block , 0 , 0 , 32,
18476 0xfc00ffff, 0x2000c13f, 0 , 0,
18477 0x0 }, /* POOL32Axf_4~*(96) */
18478 { reserved_block , 0 , 0 , 32,
18479 0xfc00ffff, 0x2000c33f, 0 , 0,
18480 0x0 }, /* POOL32Axf_4~*(97) */
18481 { reserved_block , 0 , 0 , 32,
18482 0xfc00ffff, 0x2000c53f, 0 , 0,
18483 0x0 }, /* POOL32Axf_4~*(98) */
18484 { reserved_block , 0 , 0 , 32,
18485 0xfc00ffff, 0x2000c73f, 0 , 0,
18486 0x0 }, /* POOL32Axf_4~*(99) */
18487 { reserved_block , 0 , 0 , 32,
18488 0xfc00ffff, 0x2000c93f, 0 , 0,
18489 0x0 }, /* POOL32Axf_4~*(100) */
18490 { reserved_block , 0 , 0 , 32,
18491 0xfc00ffff, 0x2000cb3f, 0 , 0,
18492 0x0 }, /* POOL32Axf_4~*(101) */
18493 { instruction , 0 , 0 , 32,
18494 0xfc00ffff, 0x2000cd3f, &NMD::CFC2 , 0,
18495 CP2_ }, /* CFC2 */
18496 { reserved_block , 0 , 0 , 32,
18497 0xfc00ffff, 0x2000cf3f, 0 , 0,
18498 0x0 }, /* POOL32Axf_4~*(103) */
18499 { instruction , 0 , 0 , 32,
18500 0xfc00ffff, 0x2000d13f, &NMD::PRECEU_PH_QBR , 0,
18501 DSP_ }, /* PRECEU.PH.QBR */
18502 { instruction , 0 , 0 , 32,
18503 0xfc00ffff, 0x2000d33f, &NMD::PRECEU_PH_QBRA , 0,
18504 DSP_ }, /* PRECEU.PH.QBRA */
18505 { reserved_block , 0 , 0 , 32,
18506 0xfc00ffff, 0x2000d53f, 0 , 0,
18507 0x0 }, /* POOL32Axf_4~*(106) */
18508 { reserved_block , 0 , 0 , 32,
18509 0xfc00ffff, 0x2000d73f, 0 , 0,
18510 0x0 }, /* POOL32Axf_4~*(107) */
18511 { reserved_block , 0 , 0 , 32,
18512 0xfc00ffff, 0x2000d93f, 0 , 0,
18513 0x0 }, /* POOL32Axf_4~*(108) */
18514 { reserved_block , 0 , 0 , 32,
18515 0xfc00ffff, 0x2000db3f, 0 , 0,
18516 0x0 }, /* POOL32Axf_4~*(109) */
18517 { instruction , 0 , 0 , 32,
18518 0xfc00ffff, 0x2000dd3f, &NMD::CTC2 , 0,
18519 CP2_ }, /* CTC2 */
18520 { reserved_block , 0 , 0 , 32,
18521 0xfc00ffff, 0x2000df3f, 0 , 0,
18522 0x0 }, /* POOL32Axf_4~*(111) */
18523 { reserved_block , 0 , 0 , 32,
18524 0xfc00ffff, 0x2000e13f, 0 , 0,
18525 0x0 }, /* POOL32Axf_4~*(112) */
18526 { reserved_block , 0 , 0 , 32,
18527 0xfc00ffff, 0x2000e33f, 0 , 0,
18528 0x0 }, /* POOL32Axf_4~*(113) */
18529 { reserved_block , 0 , 0 , 32,
18530 0xfc00ffff, 0x2000e53f, 0 , 0,
18531 0x0 }, /* POOL32Axf_4~*(114) */
18532 { reserved_block , 0 , 0 , 32,
18533 0xfc00ffff, 0x2000e73f, 0 , 0,
18534 0x0 }, /* POOL32Axf_4~*(115) */
18535 { reserved_block , 0 , 0 , 32,
18536 0xfc00ffff, 0x2000e93f, 0 , 0,
18537 0x0 }, /* POOL32Axf_4~*(116) */
18538 { reserved_block , 0 , 0 , 32,
18539 0xfc00ffff, 0x2000eb3f, 0 , 0,
18540 0x0 }, /* POOL32Axf_4~*(117) */
18541 { reserved_block , 0 , 0 , 32,
18542 0xfc00ffff, 0x2000ed3f, 0 , 0,
18543 0x0 }, /* POOL32Axf_4~*(118) */
18544 { reserved_block , 0 , 0 , 32,
18545 0xfc00ffff, 0x2000ef3f, 0 , 0,
18546 0x0 }, /* POOL32Axf_4~*(119) */
18547 { instruction , 0 , 0 , 32,
18548 0xfc00ffff, 0x2000f13f, &NMD::RADDU_W_QB , 0,
18549 DSP_ }, /* RADDU.W.QB */
18550 { reserved_block , 0 , 0 , 32,
18551 0xfc00ffff, 0x2000f33f, 0 , 0,
18552 0x0 }, /* POOL32Axf_4~*(121) */
18553 { reserved_block , 0 , 0 , 32,
18554 0xfc00ffff, 0x2000f53f, 0 , 0,
18555 0x0 }, /* POOL32Axf_4~*(122) */
18556 { reserved_block , 0 , 0 , 32,
18557 0xfc00ffff, 0x2000f73f, 0 , 0,
18558 0x0 }, /* POOL32Axf_4~*(123) */
18559 { reserved_block , 0 , 0 , 32,
18560 0xfc00ffff, 0x2000f93f, 0 , 0,
18561 0x0 }, /* POOL32Axf_4~*(124) */
18562 { reserved_block , 0 , 0 , 32,
18563 0xfc00ffff, 0x2000fb3f, 0 , 0,
18564 0x0 }, /* POOL32Axf_4~*(125) */
18565 { reserved_block , 0 , 0 , 32,
18566 0xfc00ffff, 0x2000fd3f, 0 , 0,
18567 0x0 }, /* POOL32Axf_4~*(126) */
18568 { reserved_block , 0 , 0 , 32,
18569 0xfc00ffff, 0x2000ff3f, 0 , 0,
18570 0x0 }, /* POOL32Axf_4~*(127) */
18571 };
18572
18573
18574 NMD::Pool NMD::POOL32Axf_5_group0[32] = {
18575 { instruction , 0 , 0 , 32,
18576 0xfc00ffff, 0x2000017f, &NMD::TLBGP , 0,
18577 CP0_ | VZ_ | TLB_ }, /* TLBGP */
18578 { instruction , 0 , 0 , 32,
18579 0xfc00ffff, 0x2000037f, &NMD::TLBP , 0,
18580 CP0_ | TLB_ }, /* TLBP */
18581 { instruction , 0 , 0 , 32,
18582 0xfc00ffff, 0x2000057f, &NMD::TLBGINV , 0,
18583 CP0_ | VZ_ | TLB_ | TLBINV_}, /* TLBGINV */
18584 { instruction , 0 , 0 , 32,
18585 0xfc00ffff, 0x2000077f, &NMD::TLBINV , 0,
18586 CP0_ | TLB_ | TLBINV_}, /* TLBINV */
18587 { reserved_block , 0 , 0 , 32,
18588 0xfc00ffff, 0x2000097f, 0 , 0,
18589 0x0 }, /* POOL32Axf_5_group0~*(4) */
18590 { reserved_block , 0 , 0 , 32,
18591 0xfc00ffff, 0x20000b7f, 0 , 0,
18592 0x0 }, /* POOL32Axf_5_group0~*(5) */
18593 { reserved_block , 0 , 0 , 32,
18594 0xfc00ffff, 0x20000d7f, 0 , 0,
18595 0x0 }, /* POOL32Axf_5_group0~*(6) */
18596 { reserved_block , 0 , 0 , 32,
18597 0xfc00ffff, 0x20000f7f, 0 , 0,
18598 0x0 }, /* POOL32Axf_5_group0~*(7) */
18599 { instruction , 0 , 0 , 32,
18600 0xfc00ffff, 0x2000117f, &NMD::TLBGR , 0,
18601 CP0_ | VZ_ | TLB_ }, /* TLBGR */
18602 { instruction , 0 , 0 , 32,
18603 0xfc00ffff, 0x2000137f, &NMD::TLBR , 0,
18604 CP0_ | TLB_ }, /* TLBR */
18605 { instruction , 0 , 0 , 32,
18606 0xfc00ffff, 0x2000157f, &NMD::TLBGINVF , 0,
18607 CP0_ | VZ_ | TLB_ | TLBINV_}, /* TLBGINVF */
18608 { instruction , 0 , 0 , 32,
18609 0xfc00ffff, 0x2000177f, &NMD::TLBINVF , 0,
18610 CP0_ | TLB_ | TLBINV_}, /* TLBINVF */
18611 { reserved_block , 0 , 0 , 32,
18612 0xfc00ffff, 0x2000197f, 0 , 0,
18613 0x0 }, /* POOL32Axf_5_group0~*(12) */
18614 { reserved_block , 0 , 0 , 32,
18615 0xfc00ffff, 0x20001b7f, 0 , 0,
18616 0x0 }, /* POOL32Axf_5_group0~*(13) */
18617 { reserved_block , 0 , 0 , 32,
18618 0xfc00ffff, 0x20001d7f, 0 , 0,
18619 0x0 }, /* POOL32Axf_5_group0~*(14) */
18620 { reserved_block , 0 , 0 , 32,
18621 0xfc00ffff, 0x20001f7f, 0 , 0,
18622 0x0 }, /* POOL32Axf_5_group0~*(15) */
18623 { instruction , 0 , 0 , 32,
18624 0xfc00ffff, 0x2000217f, &NMD::TLBGWI , 0,
18625 CP0_ | VZ_ | TLB_ }, /* TLBGWI */
18626 { instruction , 0 , 0 , 32,
18627 0xfc00ffff, 0x2000237f, &NMD::TLBWI , 0,
18628 CP0_ | TLB_ }, /* TLBWI */
18629 { reserved_block , 0 , 0 , 32,
18630 0xfc00ffff, 0x2000257f, 0 , 0,
18631 0x0 }, /* POOL32Axf_5_group0~*(18) */
18632 { reserved_block , 0 , 0 , 32,
18633 0xfc00ffff, 0x2000277f, 0 , 0,
18634 0x0 }, /* POOL32Axf_5_group0~*(19) */
18635 { reserved_block , 0 , 0 , 32,
18636 0xfc00ffff, 0x2000297f, 0 , 0,
18637 0x0 }, /* POOL32Axf_5_group0~*(20) */
18638 { reserved_block , 0 , 0 , 32,
18639 0xfc00ffff, 0x20002b7f, 0 , 0,
18640 0x0 }, /* POOL32Axf_5_group0~*(21) */
18641 { reserved_block , 0 , 0 , 32,
18642 0xfc00ffff, 0x20002d7f, 0 , 0,
18643 0x0 }, /* POOL32Axf_5_group0~*(22) */
18644 { reserved_block , 0 , 0 , 32,
18645 0xfc00ffff, 0x20002f7f, 0 , 0,
18646 0x0 }, /* POOL32Axf_5_group0~*(23) */
18647 { instruction , 0 , 0 , 32,
18648 0xfc00ffff, 0x2000317f, &NMD::TLBGWR , 0,
18649 CP0_ | VZ_ | TLB_ }, /* TLBGWR */
18650 { instruction , 0 , 0 , 32,
18651 0xfc00ffff, 0x2000337f, &NMD::TLBWR , 0,
18652 CP0_ | TLB_ }, /* TLBWR */
18653 { reserved_block , 0 , 0 , 32,
18654 0xfc00ffff, 0x2000357f, 0 , 0,
18655 0x0 }, /* POOL32Axf_5_group0~*(26) */
18656 { reserved_block , 0 , 0 , 32,
18657 0xfc00ffff, 0x2000377f, 0 , 0,
18658 0x0 }, /* POOL32Axf_5_group0~*(27) */
18659 { reserved_block , 0 , 0 , 32,
18660 0xfc00ffff, 0x2000397f, 0 , 0,
18661 0x0 }, /* POOL32Axf_5_group0~*(28) */
18662 { reserved_block , 0 , 0 , 32,
18663 0xfc00ffff, 0x20003b7f, 0 , 0,
18664 0x0 }, /* POOL32Axf_5_group0~*(29) */
18665 { reserved_block , 0 , 0 , 32,
18666 0xfc00ffff, 0x20003d7f, 0 , 0,
18667 0x0 }, /* POOL32Axf_5_group0~*(30) */
18668 { reserved_block , 0 , 0 , 32,
18669 0xfc00ffff, 0x20003f7f, 0 , 0,
18670 0x0 }, /* POOL32Axf_5_group0~*(31) */
18671 };
18672
18673
18674 NMD::Pool NMD::POOL32Axf_5_group1[32] = {
18675 { reserved_block , 0 , 0 , 32,
18676 0xfc00ffff, 0x2000417f, 0 , 0,
18677 0x0 }, /* POOL32Axf_5_group1~*(0) */
18678 { reserved_block , 0 , 0 , 32,
18679 0xfc00ffff, 0x2000437f, 0 , 0,
18680 0x0 }, /* POOL32Axf_5_group1~*(1) */
18681 { reserved_block , 0 , 0 , 32,
18682 0xfc00ffff, 0x2000457f, 0 , 0,
18683 0x0 }, /* POOL32Axf_5_group1~*(2) */
18684 { instruction , 0 , 0 , 32,
18685 0xfc00ffff, 0x2000477f, &NMD::DI , 0,
18686 0x0 }, /* DI */
18687 { reserved_block , 0 , 0 , 32,
18688 0xfc00ffff, 0x2000497f, 0 , 0,
18689 0x0 }, /* POOL32Axf_5_group1~*(4) */
18690 { reserved_block , 0 , 0 , 32,
18691 0xfc00ffff, 0x20004b7f, 0 , 0,
18692 0x0 }, /* POOL32Axf_5_group1~*(5) */
18693 { reserved_block , 0 , 0 , 32,
18694 0xfc00ffff, 0x20004d7f, 0 , 0,
18695 0x0 }, /* POOL32Axf_5_group1~*(6) */
18696 { reserved_block , 0 , 0 , 32,
18697 0xfc00ffff, 0x20004f7f, 0 , 0,
18698 0x0 }, /* POOL32Axf_5_group1~*(7) */
18699 { reserved_block , 0 , 0 , 32,
18700 0xfc00ffff, 0x2000517f, 0 , 0,
18701 0x0 }, /* POOL32Axf_5_group1~*(8) */
18702 { reserved_block , 0 , 0 , 32,
18703 0xfc00ffff, 0x2000537f, 0 , 0,
18704 0x0 }, /* POOL32Axf_5_group1~*(9) */
18705 { reserved_block , 0 , 0 , 32,
18706 0xfc00ffff, 0x2000557f, 0 , 0,
18707 0x0 }, /* POOL32Axf_5_group1~*(10) */
18708 { instruction , 0 , 0 , 32,
18709 0xfc00ffff, 0x2000577f, &NMD::EI , 0,
18710 0x0 }, /* EI */
18711 { reserved_block , 0 , 0 , 32,
18712 0xfc00ffff, 0x2000597f, 0 , 0,
18713 0x0 }, /* POOL32Axf_5_group1~*(12) */
18714 { reserved_block , 0 , 0 , 32,
18715 0xfc00ffff, 0x20005b7f, 0 , 0,
18716 0x0 }, /* POOL32Axf_5_group1~*(13) */
18717 { reserved_block , 0 , 0 , 32,
18718 0xfc00ffff, 0x20005d7f, 0 , 0,
18719 0x0 }, /* POOL32Axf_5_group1~*(14) */
18720 { reserved_block , 0 , 0 , 32,
18721 0xfc00ffff, 0x20005f7f, 0 , 0,
18722 0x0 }, /* POOL32Axf_5_group1~*(15) */
18723 { reserved_block , 0 , 0 , 32,
18724 0xfc00ffff, 0x2000617f, 0 , 0,
18725 0x0 }, /* POOL32Axf_5_group1~*(16) */
18726 { reserved_block , 0 , 0 , 32,
18727 0xfc00ffff, 0x2000637f, 0 , 0,
18728 0x0 }, /* POOL32Axf_5_group1~*(17) */
18729 { reserved_block , 0 , 0 , 32,
18730 0xfc00ffff, 0x2000657f, 0 , 0,
18731 0x0 }, /* POOL32Axf_5_group1~*(18) */
18732 { reserved_block , 0 , 0 , 32,
18733 0xfc00ffff, 0x2000677f, 0 , 0,
18734 0x0 }, /* POOL32Axf_5_group1~*(19) */
18735 { reserved_block , 0 , 0 , 32,
18736 0xfc00ffff, 0x2000697f, 0 , 0,
18737 0x0 }, /* POOL32Axf_5_group1~*(20) */
18738 { reserved_block , 0 , 0 , 32,
18739 0xfc00ffff, 0x20006b7f, 0 , 0,
18740 0x0 }, /* POOL32Axf_5_group1~*(21) */
18741 { reserved_block , 0 , 0 , 32,
18742 0xfc00ffff, 0x20006d7f, 0 , 0,
18743 0x0 }, /* POOL32Axf_5_group1~*(22) */
18744 { reserved_block , 0 , 0 , 32,
18745 0xfc00ffff, 0x20006f7f, 0 , 0,
18746 0x0 }, /* POOL32Axf_5_group1~*(23) */
18747 { reserved_block , 0 , 0 , 32,
18748 0xfc00ffff, 0x2000717f, 0 , 0,
18749 0x0 }, /* POOL32Axf_5_group1~*(24) */
18750 { reserved_block , 0 , 0 , 32,
18751 0xfc00ffff, 0x2000737f, 0 , 0,
18752 0x0 }, /* POOL32Axf_5_group1~*(25) */
18753 { reserved_block , 0 , 0 , 32,
18754 0xfc00ffff, 0x2000757f, 0 , 0,
18755 0x0 }, /* POOL32Axf_5_group1~*(26) */
18756 { reserved_block , 0 , 0 , 32,
18757 0xfc00ffff, 0x2000777f, 0 , 0,
18758 0x0 }, /* POOL32Axf_5_group1~*(27) */
18759 { reserved_block , 0 , 0 , 32,
18760 0xfc00ffff, 0x2000797f, 0 , 0,
18761 0x0 }, /* POOL32Axf_5_group1~*(28) */
18762 { reserved_block , 0 , 0 , 32,
18763 0xfc00ffff, 0x20007b7f, 0 , 0,
18764 0x0 }, /* POOL32Axf_5_group1~*(29) */
18765 { reserved_block , 0 , 0 , 32,
18766 0xfc00ffff, 0x20007d7f, 0 , 0,
18767 0x0 }, /* POOL32Axf_5_group1~*(30) */
18768 { reserved_block , 0 , 0 , 32,
18769 0xfc00ffff, 0x20007f7f, 0 , 0,
18770 0x0 }, /* POOL32Axf_5_group1~*(31) */
18771 };
18772
18773
18774 NMD::Pool NMD::ERETx[2] = {
18775 { instruction , 0 , 0 , 32,
18776 0xfc01ffff, 0x2000f37f, &NMD::ERET , 0,
18777 0x0 }, /* ERET */
18778 { instruction , 0 , 0 , 32,
18779 0xfc01ffff, 0x2001f37f, &NMD::ERETNC , 0,
18780 0x0 }, /* ERETNC */
18781 };
18782
18783
18784 NMD::Pool NMD::POOL32Axf_5_group3[32] = {
18785 { reserved_block , 0 , 0 , 32,
18786 0xfc00ffff, 0x2000c17f, 0 , 0,
18787 0x0 }, /* POOL32Axf_5_group3~*(0) */
18788 { instruction , 0 , 0 , 32,
18789 0xfc00ffff, 0x2000c37f, &NMD::WAIT , 0,
18790 0x0 }, /* WAIT */
18791 { reserved_block , 0 , 0 , 32,
18792 0xfc00ffff, 0x2000c57f, 0 , 0,
18793 0x0 }, /* POOL32Axf_5_group3~*(2) */
18794 { reserved_block , 0 , 0 , 32,
18795 0xfc00ffff, 0x2000c77f, 0 , 0,
18796 0x0 }, /* POOL32Axf_5_group3~*(3) */
18797 { reserved_block , 0 , 0 , 32,
18798 0xfc00ffff, 0x2000c97f, 0 , 0,
18799 0x0 }, /* POOL32Axf_5_group3~*(4) */
18800 { reserved_block , 0 , 0 , 32,
18801 0xfc00ffff, 0x2000cb7f, 0 , 0,
18802 0x0 }, /* POOL32Axf_5_group3~*(5) */
18803 { reserved_block , 0 , 0 , 32,
18804 0xfc00ffff, 0x2000cd7f, 0 , 0,
18805 0x0 }, /* POOL32Axf_5_group3~*(6) */
18806 { reserved_block , 0 , 0 , 32,
18807 0xfc00ffff, 0x2000cf7f, 0 , 0,
18808 0x0 }, /* POOL32Axf_5_group3~*(7) */
18809 { reserved_block , 0 , 0 , 32,
18810 0xfc00ffff, 0x2000d17f, 0 , 0,
18811 0x0 }, /* POOL32Axf_5_group3~*(8) */
18812 { instruction , 0 , 0 , 32,
18813 0xfc00ffff, 0x2000d37f, &NMD::IRET , 0,
18814 MCU_ }, /* IRET */
18815 { reserved_block , 0 , 0 , 32,
18816 0xfc00ffff, 0x2000d57f, 0 , 0,
18817 0x0 }, /* POOL32Axf_5_group3~*(10) */
18818 { reserved_block , 0 , 0 , 32,
18819 0xfc00ffff, 0x2000d77f, 0 , 0,
18820 0x0 }, /* POOL32Axf_5_group3~*(11) */
18821 { reserved_block , 0 , 0 , 32,
18822 0xfc00ffff, 0x2000d97f, 0 , 0,
18823 0x0 }, /* POOL32Axf_5_group3~*(12) */
18824 { reserved_block , 0 , 0 , 32,
18825 0xfc00ffff, 0x2000db7f, 0 , 0,
18826 0x0 }, /* POOL32Axf_5_group3~*(13) */
18827 { reserved_block , 0 , 0 , 32,
18828 0xfc00ffff, 0x2000dd7f, 0 , 0,
18829 0x0 }, /* POOL32Axf_5_group3~*(14) */
18830 { reserved_block , 0 , 0 , 32,
18831 0xfc00ffff, 0x2000df7f, 0 , 0,
18832 0x0 }, /* POOL32Axf_5_group3~*(15) */
18833 { instruction , 0 , 0 , 32,
18834 0xfc00ffff, 0x2000e17f, &NMD::RDPGPR , 0,
18835 CP0_ }, /* RDPGPR */
18836 { instruction , 0 , 0 , 32,
18837 0xfc00ffff, 0x2000e37f, &NMD::DERET , 0,
18838 EJTAG_ }, /* DERET */
18839 { reserved_block , 0 , 0 , 32,
18840 0xfc00ffff, 0x2000e57f, 0 , 0,
18841 0x0 }, /* POOL32Axf_5_group3~*(18) */
18842 { reserved_block , 0 , 0 , 32,
18843 0xfc00ffff, 0x2000e77f, 0 , 0,
18844 0x0 }, /* POOL32Axf_5_group3~*(19) */
18845 { reserved_block , 0 , 0 , 32,
18846 0xfc00ffff, 0x2000e97f, 0 , 0,
18847 0x0 }, /* POOL32Axf_5_group3~*(20) */
18848 { reserved_block , 0 , 0 , 32,
18849 0xfc00ffff, 0x2000eb7f, 0 , 0,
18850 0x0 }, /* POOL32Axf_5_group3~*(21) */
18851 { reserved_block , 0 , 0 , 32,
18852 0xfc00ffff, 0x2000ed7f, 0 , 0,
18853 0x0 }, /* POOL32Axf_5_group3~*(22) */
18854 { reserved_block , 0 , 0 , 32,
18855 0xfc00ffff, 0x2000ef7f, 0 , 0,
18856 0x0 }, /* POOL32Axf_5_group3~*(23) */
18857 { instruction , 0 , 0 , 32,
18858 0xfc00ffff, 0x2000f17f, &NMD::WRPGPR , 0,
18859 CP0_ }, /* WRPGPR */
18860 { pool , ERETx , 2 , 32,
18861 0xfc00ffff, 0x2000f37f, 0 , 0,
18862 0x0 }, /* ERETx */
18863 { reserved_block , 0 , 0 , 32,
18864 0xfc00ffff, 0x2000f57f, 0 , 0,
18865 0x0 }, /* POOL32Axf_5_group3~*(26) */
18866 { reserved_block , 0 , 0 , 32,
18867 0xfc00ffff, 0x2000f77f, 0 , 0,
18868 0x0 }, /* POOL32Axf_5_group3~*(27) */
18869 { reserved_block , 0 , 0 , 32,
18870 0xfc00ffff, 0x2000f97f, 0 , 0,
18871 0x0 }, /* POOL32Axf_5_group3~*(28) */
18872 { reserved_block , 0 , 0 , 32,
18873 0xfc00ffff, 0x2000fb7f, 0 , 0,
18874 0x0 }, /* POOL32Axf_5_group3~*(29) */
18875 { reserved_block , 0 , 0 , 32,
18876 0xfc00ffff, 0x2000fd7f, 0 , 0,
18877 0x0 }, /* POOL32Axf_5_group3~*(30) */
18878 { reserved_block , 0 , 0 , 32,
18879 0xfc00ffff, 0x2000ff7f, 0 , 0,
18880 0x0 }, /* POOL32Axf_5_group3~*(31) */
18881 };
18882
18883
18884 NMD::Pool NMD::POOL32Axf_5[4] = {
18885 { pool , POOL32Axf_5_group0 , 32 , 32,
18886 0xfc00c1ff, 0x2000017f, 0 , 0,
18887 0x0 }, /* POOL32Axf_5_group0 */
18888 { pool , POOL32Axf_5_group1 , 32 , 32,
18889 0xfc00c1ff, 0x2000417f, 0 , 0,
18890 0x0 }, /* POOL32Axf_5_group1 */
18891 { reserved_block , 0 , 0 , 32,
18892 0xfc00c1ff, 0x2000817f, 0 , 0,
18893 0x0 }, /* POOL32Axf_5~*(2) */
18894 { pool , POOL32Axf_5_group3 , 32 , 32,
18895 0xfc00c1ff, 0x2000c17f, 0 , 0,
18896 0x0 }, /* POOL32Axf_5_group3 */
18897 };
18898
18899
18900 NMD::Pool NMD::SHRA__R__QB[2] = {
18901 { instruction , 0 , 0 , 32,
18902 0xfc001fff, 0x200001ff, &NMD::SHRA_QB , 0,
18903 DSP_ }, /* SHRA.QB */
18904 { instruction , 0 , 0 , 32,
18905 0xfc001fff, 0x200011ff, &NMD::SHRA_R_QB , 0,
18906 DSP_ }, /* SHRA_R.QB */
18907 };
18908
18909
18910 NMD::Pool NMD::POOL32Axf_7[8] = {
18911 { pool , SHRA__R__QB , 2 , 32,
18912 0xfc000fff, 0x200001ff, 0 , 0,
18913 0x0 }, /* SHRA[_R].QB */
18914 { instruction , 0 , 0 , 32,
18915 0xfc000fff, 0x200003ff, &NMD::SHRL_PH , 0,
18916 DSP_ }, /* SHRL.PH */
18917 { instruction , 0 , 0 , 32,
18918 0xfc000fff, 0x200005ff, &NMD::REPL_QB , 0,
18919 DSP_ }, /* REPL.QB */
18920 { reserved_block , 0 , 0 , 32,
18921 0xfc000fff, 0x200007ff, 0 , 0,
18922 0x0 }, /* POOL32Axf_7~*(3) */
18923 { reserved_block , 0 , 0 , 32,
18924 0xfc000fff, 0x200009ff, 0 , 0,
18925 0x0 }, /* POOL32Axf_7~*(4) */
18926 { reserved_block , 0 , 0 , 32,
18927 0xfc000fff, 0x20000bff, 0 , 0,
18928 0x0 }, /* POOL32Axf_7~*(5) */
18929 { reserved_block , 0 , 0 , 32,
18930 0xfc000fff, 0x20000dff, 0 , 0,
18931 0x0 }, /* POOL32Axf_7~*(6) */
18932 { reserved_block , 0 , 0 , 32,
18933 0xfc000fff, 0x20000fff, 0 , 0,
18934 0x0 }, /* POOL32Axf_7~*(7) */
18935 };
18936
18937
18938 NMD::Pool NMD::POOL32Axf[8] = {
18939 { reserved_block , 0 , 0 , 32,
18940 0xfc0001ff, 0x2000003f, 0 , 0,
18941 0x0 }, /* POOL32Axf~*(0) */
18942 { pool , POOL32Axf_1 , 8 , 32,
18943 0xfc0001ff, 0x2000007f, 0 , 0,
18944 0x0 }, /* POOL32Axf_1 */
18945 { pool , POOL32Axf_2 , 4 , 32,
18946 0xfc0001ff, 0x200000bf, 0 , 0,
18947 0x0 }, /* POOL32Axf_2 */
18948 { reserved_block , 0 , 0 , 32,
18949 0xfc0001ff, 0x200000ff, 0 , 0,
18950 0x0 }, /* POOL32Axf~*(3) */
18951 { pool , POOL32Axf_4 , 128 , 32,
18952 0xfc0001ff, 0x2000013f, 0 , 0,
18953 0x0 }, /* POOL32Axf_4 */
18954 { pool , POOL32Axf_5 , 4 , 32,
18955 0xfc0001ff, 0x2000017f, 0 , 0,
18956 0x0 }, /* POOL32Axf_5 */
18957 { reserved_block , 0 , 0 , 32,
18958 0xfc0001ff, 0x200001bf, 0 , 0,
18959 0x0 }, /* POOL32Axf~*(6) */
18960 { pool , POOL32Axf_7 , 8 , 32,
18961 0xfc0001ff, 0x200001ff, 0 , 0,
18962 0x0 }, /* POOL32Axf_7 */
18963 };
18964
18965
18966 NMD::Pool NMD::_POOL32A7[8] = {
18967 { pool , P_LSX , 2 , 32,
18968 0xfc00003f, 0x20000007, 0 , 0,
18969 0x0 }, /* P.LSX */
18970 { instruction , 0 , 0 , 32,
18971 0xfc00003f, 0x2000000f, &NMD::LSA , 0,
18972 0x0 }, /* LSA */
18973 { reserved_block , 0 , 0 , 32,
18974 0xfc00003f, 0x20000017, 0 , 0,
18975 0x0 }, /* _POOL32A7~*(2) */
18976 { instruction , 0 , 0 , 32,
18977 0xfc00003f, 0x2000001f, &NMD::EXTW , 0,
18978 0x0 }, /* EXTW */
18979 { reserved_block , 0 , 0 , 32,
18980 0xfc00003f, 0x20000027, 0 , 0,
18981 0x0 }, /* _POOL32A7~*(4) */
18982 { reserved_block , 0 , 0 , 32,
18983 0xfc00003f, 0x2000002f, 0 , 0,
18984 0x0 }, /* _POOL32A7~*(5) */
18985 { reserved_block , 0 , 0 , 32,
18986 0xfc00003f, 0x20000037, 0 , 0,
18987 0x0 }, /* _POOL32A7~*(6) */
18988 { pool , POOL32Axf , 8 , 32,
18989 0xfc00003f, 0x2000003f, 0 , 0,
18990 0x0 }, /* POOL32Axf */
18991 };
18992
18993
18994 NMD::Pool NMD::P32A[8] = {
18995 { pool , _POOL32A0 , 128 , 32,
18996 0xfc000007, 0x20000000, 0 , 0,
18997 0x0 }, /* _POOL32A0 */
18998 { instruction , 0 , 0 , 32,
18999 0xfc000007, 0x20000001, &NMD::SPECIAL2 , 0,
19000 UDI_ }, /* SPECIAL2 */
19001 { instruction , 0 , 0 , 32,
19002 0xfc000007, 0x20000002, &NMD::COP2_1 , 0,
19003 CP2_ }, /* COP2_1 */
19004 { instruction , 0 , 0 , 32,
19005 0xfc000007, 0x20000003, &NMD::UDI , 0,
19006 UDI_ }, /* UDI */
19007 { reserved_block , 0 , 0 , 32,
19008 0xfc000007, 0x20000004, 0 , 0,
19009 0x0 }, /* P32A~*(4) */
19010 { pool , _POOL32A5 , 128 , 32,
19011 0xfc000007, 0x20000005, 0 , 0,
19012 0x0 }, /* _POOL32A5 */
19013 { reserved_block , 0 , 0 , 32,
19014 0xfc000007, 0x20000006, 0 , 0,
19015 0x0 }, /* P32A~*(6) */
19016 { pool , _POOL32A7 , 8 , 32,
19017 0xfc000007, 0x20000007, 0 , 0,
19018 0x0 }, /* _POOL32A7 */
19019 };
19020
19021
19022 NMD::Pool NMD::P_GP_D[2] = {
19023 { instruction , 0 , 0 , 32,
19024 0xfc000007, 0x40000001, &NMD::LD_GP_ , 0,
19025 MIPS64_ }, /* LD[GP] */
19026 { instruction , 0 , 0 , 32,
19027 0xfc000007, 0x40000005, &NMD::SD_GP_ , 0,
19028 MIPS64_ }, /* SD[GP] */
19029 };
19030
19031
19032 NMD::Pool NMD::P_GP_W[4] = {
19033 { instruction , 0 , 0 , 32,
19034 0xfc000003, 0x40000000, &NMD::ADDIU_GP_W_ , 0,
19035 0x0 }, /* ADDIU[GP.W] */
19036 { pool , P_GP_D , 2 , 32,
19037 0xfc000003, 0x40000001, 0 , 0,
19038 0x0 }, /* P.GP.D */
19039 { instruction , 0 , 0 , 32,
19040 0xfc000003, 0x40000002, &NMD::LW_GP_ , 0,
19041 0x0 }, /* LW[GP] */
19042 { instruction , 0 , 0 , 32,
19043 0xfc000003, 0x40000003, &NMD::SW_GP_ , 0,
19044 0x0 }, /* SW[GP] */
19045 };
19046
19047
19048 NMD::Pool NMD::POOL48I[32] = {
19049 { instruction , 0 , 0 , 48,
19050 0xfc1f00000000ull, 0x600000000000ull, &NMD::LI_48_ , 0,
19051 XMMS_ }, /* LI[48] */
19052 { instruction , 0 , 0 , 48,
19053 0xfc1f00000000ull, 0x600100000000ull, &NMD::ADDIU_48_ , 0,
19054 XMMS_ }, /* ADDIU[48] */
19055 { instruction , 0 , 0 , 48,
19056 0xfc1f00000000ull, 0x600200000000ull, &NMD::ADDIU_GP48_ , 0,
19057 XMMS_ }, /* ADDIU[GP48] */
19058 { instruction , 0 , 0 , 48,
19059 0xfc1f00000000ull, 0x600300000000ull, &NMD::ADDIUPC_48_ , 0,
19060 XMMS_ }, /* ADDIUPC[48] */
19061 { reserved_block , 0 , 0 , 48,
19062 0xfc1f00000000ull, 0x600400000000ull, 0 , 0,
19063 0x0 }, /* POOL48I~*(4) */
19064 { reserved_block , 0 , 0 , 48,
19065 0xfc1f00000000ull, 0x600500000000ull, 0 , 0,
19066 0x0 }, /* POOL48I~*(5) */
19067 { reserved_block , 0 , 0 , 48,
19068 0xfc1f00000000ull, 0x600600000000ull, 0 , 0,
19069 0x0 }, /* POOL48I~*(6) */
19070 { reserved_block , 0 , 0 , 48,
19071 0xfc1f00000000ull, 0x600700000000ull, 0 , 0,
19072 0x0 }, /* POOL48I~*(7) */
19073 { reserved_block , 0 , 0 , 48,
19074 0xfc1f00000000ull, 0x600800000000ull, 0 , 0,
19075 0x0 }, /* POOL48I~*(8) */
19076 { reserved_block , 0 , 0 , 48,
19077 0xfc1f00000000ull, 0x600900000000ull, 0 , 0,
19078 0x0 }, /* POOL48I~*(9) */
19079 { reserved_block , 0 , 0 , 48,
19080 0xfc1f00000000ull, 0x600a00000000ull, 0 , 0,
19081 0x0 }, /* POOL48I~*(10) */
19082 { instruction , 0 , 0 , 48,
19083 0xfc1f00000000ull, 0x600b00000000ull, &NMD::LWPC_48_ , 0,
19084 XMMS_ }, /* LWPC[48] */
19085 { reserved_block , 0 , 0 , 48,
19086 0xfc1f00000000ull, 0x600c00000000ull, 0 , 0,
19087 0x0 }, /* POOL48I~*(12) */
19088 { reserved_block , 0 , 0 , 48,
19089 0xfc1f00000000ull, 0x600d00000000ull, 0 , 0,
19090 0x0 }, /* POOL48I~*(13) */
19091 { reserved_block , 0 , 0 , 48,
19092 0xfc1f00000000ull, 0x600e00000000ull, 0 , 0,
19093 0x0 }, /* POOL48I~*(14) */
19094 { instruction , 0 , 0 , 48,
19095 0xfc1f00000000ull, 0x600f00000000ull, &NMD::SWPC_48_ , 0,
19096 XMMS_ }, /* SWPC[48] */
19097 { reserved_block , 0 , 0 , 48,
19098 0xfc1f00000000ull, 0x601000000000ull, 0 , 0,
19099 0x0 }, /* POOL48I~*(16) */
19100 { instruction , 0 , 0 , 48,
19101 0xfc1f00000000ull, 0x601100000000ull, &NMD::DADDIU_48_ , 0,
19102 MIPS64_ }, /* DADDIU[48] */
19103 { reserved_block , 0 , 0 , 48,
19104 0xfc1f00000000ull, 0x601200000000ull, 0 , 0,
19105 0x0 }, /* POOL48I~*(18) */
19106 { reserved_block , 0 , 0 , 48,
19107 0xfc1f00000000ull, 0x601300000000ull, 0 , 0,
19108 0x0 }, /* POOL48I~*(19) */
19109 { instruction , 0 , 0 , 48,
19110 0xfc1f00000000ull, 0x601400000000ull, &NMD::DLUI_48_ , 0,
19111 MIPS64_ }, /* DLUI[48] */
19112 { reserved_block , 0 , 0 , 48,
19113 0xfc1f00000000ull, 0x601500000000ull, 0 , 0,
19114 0x0 }, /* POOL48I~*(21) */
19115 { reserved_block , 0 , 0 , 48,
19116 0xfc1f00000000ull, 0x601600000000ull, 0 , 0,
19117 0x0 }, /* POOL48I~*(22) */
19118 { reserved_block , 0 , 0 , 48,
19119 0xfc1f00000000ull, 0x601700000000ull, 0 , 0,
19120 0x0 }, /* POOL48I~*(23) */
19121 { reserved_block , 0 , 0 , 48,
19122 0xfc1f00000000ull, 0x601800000000ull, 0 , 0,
19123 0x0 }, /* POOL48I~*(24) */
19124 { reserved_block , 0 , 0 , 48,
19125 0xfc1f00000000ull, 0x601900000000ull, 0 , 0,
19126 0x0 }, /* POOL48I~*(25) */
19127 { reserved_block , 0 , 0 , 48,
19128 0xfc1f00000000ull, 0x601a00000000ull, 0 , 0,
19129 0x0 }, /* POOL48I~*(26) */
19130 { instruction , 0 , 0 , 48,
19131 0xfc1f00000000ull, 0x601b00000000ull, &NMD::LDPC_48_ , 0,
19132 MIPS64_ }, /* LDPC[48] */
19133 { reserved_block , 0 , 0 , 48,
19134 0xfc1f00000000ull, 0x601c00000000ull, 0 , 0,
19135 0x0 }, /* POOL48I~*(28) */
19136 { reserved_block , 0 , 0 , 48,
19137 0xfc1f00000000ull, 0x601d00000000ull, 0 , 0,
19138 0x0 }, /* POOL48I~*(29) */
19139 { reserved_block , 0 , 0 , 48,
19140 0xfc1f00000000ull, 0x601e00000000ull, 0 , 0,
19141 0x0 }, /* POOL48I~*(30) */
19142 { instruction , 0 , 0 , 48,
19143 0xfc1f00000000ull, 0x601f00000000ull, &NMD::SDPC_48_ , 0,
19144 MIPS64_ }, /* SDPC[48] */
19145 };
19146
19147
19148 NMD::Pool NMD::PP_SR[4] = {
19149 { instruction , 0 , 0 , 32,
19150 0xfc10f003, 0x80003000, &NMD::SAVE_32_ , 0,
19151 0x0 }, /* SAVE[32] */
19152 { reserved_block , 0 , 0 , 32,
19153 0xfc10f003, 0x80003001, 0 , 0,
19154 0x0 }, /* PP.SR~*(1) */
19155 { instruction , 0 , 0 , 32,
19156 0xfc10f003, 0x80003002, &NMD::RESTORE_32_ , 0,
19157 0x0 }, /* RESTORE[32] */
19158 { return_instruction , 0 , 0 , 32,
19159 0xfc10f003, 0x80003003, &NMD::RESTORE_JRC_32_ , 0,
19160 0x0 }, /* RESTORE.JRC[32] */
19161 };
19162
19163
19164 NMD::Pool NMD::P_SR_F[8] = {
19165 { instruction , 0 , 0 , 32,
19166 0xfc10f007, 0x80103000, &NMD::SAVEF , 0,
19167 CP1_ }, /* SAVEF */
19168 { instruction , 0 , 0 , 32,
19169 0xfc10f007, 0x80103001, &NMD::RESTOREF , 0,
19170 CP1_ }, /* RESTOREF */
19171 { reserved_block , 0 , 0 , 32,
19172 0xfc10f007, 0x80103002, 0 , 0,
19173 0x0 }, /* P.SR.F~*(2) */
19174 { reserved_block , 0 , 0 , 32,
19175 0xfc10f007, 0x80103003, 0 , 0,
19176 0x0 }, /* P.SR.F~*(3) */
19177 { reserved_block , 0 , 0 , 32,
19178 0xfc10f007, 0x80103004, 0 , 0,
19179 0x0 }, /* P.SR.F~*(4) */
19180 { reserved_block , 0 , 0 , 32,
19181 0xfc10f007, 0x80103005, 0 , 0,
19182 0x0 }, /* P.SR.F~*(5) */
19183 { reserved_block , 0 , 0 , 32,
19184 0xfc10f007, 0x80103006, 0 , 0,
19185 0x0 }, /* P.SR.F~*(6) */
19186 { reserved_block , 0 , 0 , 32,
19187 0xfc10f007, 0x80103007, 0 , 0,
19188 0x0 }, /* P.SR.F~*(7) */
19189 };
19190
19191
19192 NMD::Pool NMD::P_SR[2] = {
19193 { pool , PP_SR , 4 , 32,
19194 0xfc10f000, 0x80003000, 0 , 0,
19195 0x0 }, /* PP.SR */
19196 { pool , P_SR_F , 8 , 32,
19197 0xfc10f000, 0x80103000, 0 , 0,
19198 0x0 }, /* P.SR.F */
19199 };
19200
19201
19202 NMD::Pool NMD::P_SLL[5] = {
19203 { instruction , 0 , 0 , 32,
19204 0xffe0f1ff, 0x8000c000, &NMD::NOP_32_ , 0,
19205 0x0 }, /* NOP[32] */
19206 { instruction , 0 , 0 , 32,
19207 0xffe0f1ff, 0x8000c003, &NMD::EHB , 0,
19208 0x0 }, /* EHB */
19209 { instruction , 0 , 0 , 32,
19210 0xffe0f1ff, 0x8000c005, &NMD::PAUSE , 0,
19211 0x0 }, /* PAUSE */
19212 { instruction , 0 , 0 , 32,
19213 0xffe0f1ff, 0x8000c006, &NMD::SYNC , 0,
19214 0x0 }, /* SYNC */
19215 { instruction , 0 , 0 , 32,
19216 0xfc00f1e0, 0x8000c000, &NMD::SLL_32_ , 0,
19217 0x0 }, /* SLL[32] */
19218 };
19219
19220
19221 NMD::Pool NMD::P_SHIFT[16] = {
19222 { pool , P_SLL , 5 , 32,
19223 0xfc00f1e0, 0x8000c000, 0 , 0,
19224 0x0 }, /* P.SLL */
19225 { reserved_block , 0 , 0 , 32,
19226 0xfc00f1e0, 0x8000c020, 0 , 0,
19227 0x0 }, /* P.SHIFT~*(1) */
19228 { instruction , 0 , 0 , 32,
19229 0xfc00f1e0, 0x8000c040, &NMD::SRL_32_ , 0,
19230 0x0 }, /* SRL[32] */
19231 { reserved_block , 0 , 0 , 32,
19232 0xfc00f1e0, 0x8000c060, 0 , 0,
19233 0x0 }, /* P.SHIFT~*(3) */
19234 { instruction , 0 , 0 , 32,
19235 0xfc00f1e0, 0x8000c080, &NMD::SRA , 0,
19236 0x0 }, /* SRA */
19237 { reserved_block , 0 , 0 , 32,
19238 0xfc00f1e0, 0x8000c0a0, 0 , 0,
19239 0x0 }, /* P.SHIFT~*(5) */
19240 { instruction , 0 , 0 , 32,
19241 0xfc00f1e0, 0x8000c0c0, &NMD::ROTR , 0,
19242 0x0 }, /* ROTR */
19243 { reserved_block , 0 , 0 , 32,
19244 0xfc00f1e0, 0x8000c0e0, 0 , 0,
19245 0x0 }, /* P.SHIFT~*(7) */
19246 { instruction , 0 , 0 , 32,
19247 0xfc00f1e0, 0x8000c100, &NMD::DSLL , 0,
19248 MIPS64_ }, /* DSLL */
19249 { instruction , 0 , 0 , 32,
19250 0xfc00f1e0, 0x8000c120, &NMD::DSLL32 , 0,
19251 MIPS64_ }, /* DSLL32 */
19252 { instruction , 0 , 0 , 32,
19253 0xfc00f1e0, 0x8000c140, &NMD::DSRL , 0,
19254 MIPS64_ }, /* DSRL */
19255 { instruction , 0 , 0 , 32,
19256 0xfc00f1e0, 0x8000c160, &NMD::DSRL32 , 0,
19257 MIPS64_ }, /* DSRL32 */
19258 { instruction , 0 , 0 , 32,
19259 0xfc00f1e0, 0x8000c180, &NMD::DSRA , 0,
19260 MIPS64_ }, /* DSRA */
19261 { instruction , 0 , 0 , 32,
19262 0xfc00f1e0, 0x8000c1a0, &NMD::DSRA32 , 0,
19263 MIPS64_ }, /* DSRA32 */
19264 { instruction , 0 , 0 , 32,
19265 0xfc00f1e0, 0x8000c1c0, &NMD::DROTR , 0,
19266 MIPS64_ }, /* DROTR */
19267 { instruction , 0 , 0 , 32,
19268 0xfc00f1e0, 0x8000c1e0, &NMD::DROTR32 , 0,
19269 MIPS64_ }, /* DROTR32 */
19270 };
19271
19272
19273 NMD::Pool NMD::P_ROTX[4] = {
19274 { instruction , 0 , 0 , 32,
19275 0xfc00f820, 0x8000d000, &NMD::ROTX , 0,
19276 XMMS_ }, /* ROTX */
19277 { reserved_block , 0 , 0 , 32,
19278 0xfc00f820, 0x8000d020, 0 , 0,
19279 0x0 }, /* P.ROTX~*(1) */
19280 { reserved_block , 0 , 0 , 32,
19281 0xfc00f820, 0x8000d800, 0 , 0,
19282 0x0 }, /* P.ROTX~*(2) */
19283 { reserved_block , 0 , 0 , 32,
19284 0xfc00f820, 0x8000d820, 0 , 0,
19285 0x0 }, /* P.ROTX~*(3) */
19286 };
19287
19288
19289 NMD::Pool NMD::P_INS[4] = {
19290 { instruction , 0 , 0 , 32,
19291 0xfc00f820, 0x8000e000, &NMD::INS , 0,
19292 XMMS_ }, /* INS */
19293 { instruction , 0 , 0 , 32,
19294 0xfc00f820, 0x8000e020, &NMD::DINSU , 0,
19295 MIPS64_ }, /* DINSU */
19296 { instruction , 0 , 0 , 32,
19297 0xfc00f820, 0x8000e800, &NMD::DINSM , 0,
19298 MIPS64_ }, /* DINSM */
19299 { instruction , 0 , 0 , 32,
19300 0xfc00f820, 0x8000e820, &NMD::DINS , 0,
19301 MIPS64_ }, /* DINS */
19302 };
19303
19304
19305 NMD::Pool NMD::P_EXT[4] = {
19306 { instruction , 0 , 0 , 32,
19307 0xfc00f820, 0x8000f000, &NMD::EXT , 0,
19308 XMMS_ }, /* EXT */
19309 { instruction , 0 , 0 , 32,
19310 0xfc00f820, 0x8000f020, &NMD::DEXTU , 0,
19311 MIPS64_ }, /* DEXTU */
19312 { instruction , 0 , 0 , 32,
19313 0xfc00f820, 0x8000f800, &NMD::DEXTM , 0,
19314 MIPS64_ }, /* DEXTM */
19315 { instruction , 0 , 0 , 32,
19316 0xfc00f820, 0x8000f820, &NMD::DEXT , 0,
19317 MIPS64_ }, /* DEXT */
19318 };
19319
19320
19321 NMD::Pool NMD::P_U12[16] = {
19322 { instruction , 0 , 0 , 32,
19323 0xfc00f000, 0x80000000, &NMD::ORI , 0,
19324 0x0 }, /* ORI */
19325 { instruction , 0 , 0 , 32,
19326 0xfc00f000, 0x80001000, &NMD::XORI , 0,
19327 0x0 }, /* XORI */
19328 { instruction , 0 , 0 , 32,
19329 0xfc00f000, 0x80002000, &NMD::ANDI_32_ , 0,
19330 0x0 }, /* ANDI[32] */
19331 { pool , P_SR , 2 , 32,
19332 0xfc00f000, 0x80003000, 0 , 0,
19333 0x0 }, /* P.SR */
19334 { instruction , 0 , 0 , 32,
19335 0xfc00f000, 0x80004000, &NMD::SLTI , 0,
19336 0x0 }, /* SLTI */
19337 { instruction , 0 , 0 , 32,
19338 0xfc00f000, 0x80005000, &NMD::SLTIU , 0,
19339 0x0 }, /* SLTIU */
19340 { instruction , 0 , 0 , 32,
19341 0xfc00f000, 0x80006000, &NMD::SEQI , 0,
19342 0x0 }, /* SEQI */
19343 { reserved_block , 0 , 0 , 32,
19344 0xfc00f000, 0x80007000, 0 , 0,
19345 0x0 }, /* P.U12~*(7) */
19346 { instruction , 0 , 0 , 32,
19347 0xfc00f000, 0x80008000, &NMD::ADDIU_NEG_ , 0,
19348 0x0 }, /* ADDIU[NEG] */
19349 { instruction , 0 , 0 , 32,
19350 0xfc00f000, 0x80009000, &NMD::DADDIU_U12_ , 0,
19351 MIPS64_ }, /* DADDIU[U12] */
19352 { instruction , 0 , 0 , 32,
19353 0xfc00f000, 0x8000a000, &NMD::DADDIU_NEG_ , 0,
19354 MIPS64_ }, /* DADDIU[NEG] */
19355 { instruction , 0 , 0 , 32,
19356 0xfc00f000, 0x8000b000, &NMD::DROTX , 0,
19357 MIPS64_ }, /* DROTX */
19358 { pool , P_SHIFT , 16 , 32,
19359 0xfc00f000, 0x8000c000, 0 , 0,
19360 0x0 }, /* P.SHIFT */
19361 { pool , P_ROTX , 4 , 32,
19362 0xfc00f000, 0x8000d000, 0 , 0,
19363 0x0 }, /* P.ROTX */
19364 { pool , P_INS , 4 , 32,
19365 0xfc00f000, 0x8000e000, 0 , 0,
19366 0x0 }, /* P.INS */
19367 { pool , P_EXT , 4 , 32,
19368 0xfc00f000, 0x8000f000, 0 , 0,
19369 0x0 }, /* P.EXT */
19370 };
19371
19372
19373 NMD::Pool NMD::RINT_fmt[2] = {
19374 { instruction , 0 , 0 , 32,
19375 0xfc0003ff, 0xa0000020, &NMD::RINT_S , 0,
19376 CP1_ }, /* RINT.S */
19377 { instruction , 0 , 0 , 32,
19378 0xfc0003ff, 0xa0000220, &NMD::RINT_D , 0,
19379 CP1_ }, /* RINT.D */
19380 };
19381
19382
19383 NMD::Pool NMD::ADD_fmt0[2] = {
19384 { instruction , 0 , 0 , 32,
19385 0xfc0003ff, 0xa0000030, &NMD::ADD_S , 0,
19386 CP1_ }, /* ADD.S */
19387 { reserved_block , 0 , 0 , 32,
19388 0xfc0003ff, 0xa0000230, 0 , 0,
19389 CP1_ }, /* ADD.fmt0~*(1) */
19390 };
19391
19392
19393 NMD::Pool NMD::SELEQZ_fmt[2] = {
19394 { instruction , 0 , 0 , 32,
19395 0xfc0003ff, 0xa0000038, &NMD::SELEQZ_S , 0,
19396 CP1_ }, /* SELEQZ.S */
19397 { instruction , 0 , 0 , 32,
19398 0xfc0003ff, 0xa0000238, &NMD::SELEQZ_D , 0,
19399 CP1_ }, /* SELEQZ.D */
19400 };
19401
19402
19403 NMD::Pool NMD::CLASS_fmt[2] = {
19404 { instruction , 0 , 0 , 32,
19405 0xfc0003ff, 0xa0000060, &NMD::CLASS_S , 0,
19406 CP1_ }, /* CLASS.S */
19407 { instruction , 0 , 0 , 32,
19408 0xfc0003ff, 0xa0000260, &NMD::CLASS_D , 0,
19409 CP1_ }, /* CLASS.D */
19410 };
19411
19412
19413 NMD::Pool NMD::SUB_fmt0[2] = {
19414 { instruction , 0 , 0 , 32,
19415 0xfc0003ff, 0xa0000070, &NMD::SUB_S , 0,
19416 CP1_ }, /* SUB.S */
19417 { reserved_block , 0 , 0 , 32,
19418 0xfc0003ff, 0xa0000270, 0 , 0,
19419 CP1_ }, /* SUB.fmt0~*(1) */
19420 };
19421
19422
19423 NMD::Pool NMD::SELNEZ_fmt[2] = {
19424 { instruction , 0 , 0 , 32,
19425 0xfc0003ff, 0xa0000078, &NMD::SELNEZ_S , 0,
19426 CP1_ }, /* SELNEZ.S */
19427 { instruction , 0 , 0 , 32,
19428 0xfc0003ff, 0xa0000278, &NMD::SELNEZ_D , 0,
19429 CP1_ }, /* SELNEZ.D */
19430 };
19431
19432
19433 NMD::Pool NMD::MUL_fmt0[2] = {
19434 { instruction , 0 , 0 , 32,
19435 0xfc0003ff, 0xa00000b0, &NMD::MUL_S , 0,
19436 CP1_ }, /* MUL.S */
19437 { reserved_block , 0 , 0 , 32,
19438 0xfc0003ff, 0xa00002b0, 0 , 0,
19439 CP1_ }, /* MUL.fmt0~*(1) */
19440 };
19441
19442
19443 NMD::Pool NMD::SEL_fmt[2] = {
19444 { instruction , 0 , 0 , 32,
19445 0xfc0003ff, 0xa00000b8, &NMD::SEL_S , 0,
19446 CP1_ }, /* SEL.S */
19447 { instruction , 0 , 0 , 32,
19448 0xfc0003ff, 0xa00002b8, &NMD::SEL_D , 0,
19449 CP1_ }, /* SEL.D */
19450 };
19451
19452
19453 NMD::Pool NMD::DIV_fmt0[2] = {
19454 { instruction , 0 , 0 , 32,
19455 0xfc0003ff, 0xa00000f0, &NMD::DIV_S , 0,
19456 CP1_ }, /* DIV.S */
19457 { reserved_block , 0 , 0 , 32,
19458 0xfc0003ff, 0xa00002f0, 0 , 0,
19459 CP1_ }, /* DIV.fmt0~*(1) */
19460 };
19461
19462
19463 NMD::Pool NMD::ADD_fmt1[2] = {
19464 { instruction , 0 , 0 , 32,
19465 0xfc0003ff, 0xa0000130, &NMD::ADD_D , 0,
19466 CP1_ }, /* ADD.D */
19467 { reserved_block , 0 , 0 , 32,
19468 0xfc0003ff, 0xa0000330, 0 , 0,
19469 CP1_ }, /* ADD.fmt1~*(1) */
19470 };
19471
19472
19473 NMD::Pool NMD::SUB_fmt1[2] = {
19474 { instruction , 0 , 0 , 32,
19475 0xfc0003ff, 0xa0000170, &NMD::SUB_D , 0,
19476 CP1_ }, /* SUB.D */
19477 { reserved_block , 0 , 0 , 32,
19478 0xfc0003ff, 0xa0000370, 0 , 0,
19479 CP1_ }, /* SUB.fmt1~*(1) */
19480 };
19481
19482
19483 NMD::Pool NMD::MUL_fmt1[2] = {
19484 { instruction , 0 , 0 , 32,
19485 0xfc0003ff, 0xa00001b0, &NMD::MUL_D , 0,
19486 CP1_ }, /* MUL.D */
19487 { reserved_block , 0 , 0 , 32,
19488 0xfc0003ff, 0xa00003b0, 0 , 0,
19489 CP1_ }, /* MUL.fmt1~*(1) */
19490 };
19491
19492
19493 NMD::Pool NMD::MADDF_fmt[2] = {
19494 { instruction , 0 , 0 , 32,
19495 0xfc0003ff, 0xa00001b8, &NMD::MADDF_S , 0,
19496 CP1_ }, /* MADDF.S */
19497 { instruction , 0 , 0 , 32,
19498 0xfc0003ff, 0xa00003b8, &NMD::MADDF_D , 0,
19499 CP1_ }, /* MADDF.D */
19500 };
19501
19502
19503 NMD::Pool NMD::DIV_fmt1[2] = {
19504 { instruction , 0 , 0 , 32,
19505 0xfc0003ff, 0xa00001f0, &NMD::DIV_D , 0,
19506 CP1_ }, /* DIV.D */
19507 { reserved_block , 0 , 0 , 32,
19508 0xfc0003ff, 0xa00003f0, 0 , 0,
19509 CP1_ }, /* DIV.fmt1~*(1) */
19510 };
19511
19512
19513 NMD::Pool NMD::MSUBF_fmt[2] = {
19514 { instruction , 0 , 0 , 32,
19515 0xfc0003ff, 0xa00001f8, &NMD::MSUBF_S , 0,
19516 CP1_ }, /* MSUBF.S */
19517 { instruction , 0 , 0 , 32,
19518 0xfc0003ff, 0xa00003f8, &NMD::MSUBF_D , 0,
19519 CP1_ }, /* MSUBF.D */
19520 };
19521
19522
19523 NMD::Pool NMD::POOL32F_0[64] = {
19524 { reserved_block , 0 , 0 , 32,
19525 0xfc0001ff, 0xa0000000, 0 , 0,
19526 CP1_ }, /* POOL32F_0~*(0) */
19527 { reserved_block , 0 , 0 , 32,
19528 0xfc0001ff, 0xa0000008, 0 , 0,
19529 CP1_ }, /* POOL32F_0~*(1) */
19530 { reserved_block , 0 , 0 , 32,
19531 0xfc0001ff, 0xa0000010, 0 , 0,
19532 CP1_ }, /* POOL32F_0~*(2) */
19533 { reserved_block , 0 , 0 , 32,
19534 0xfc0001ff, 0xa0000018, 0 , 0,
19535 CP1_ }, /* POOL32F_0~*(3) */
19536 { pool , RINT_fmt , 2 , 32,
19537 0xfc0001ff, 0xa0000020, 0 , 0,
19538 CP1_ }, /* RINT.fmt */
19539 { reserved_block , 0 , 0 , 32,
19540 0xfc0001ff, 0xa0000028, 0 , 0,
19541 CP1_ }, /* POOL32F_0~*(5) */
19542 { pool , ADD_fmt0 , 2 , 32,
19543 0xfc0001ff, 0xa0000030, 0 , 0,
19544 CP1_ }, /* ADD.fmt0 */
19545 { pool , SELEQZ_fmt , 2 , 32,
19546 0xfc0001ff, 0xa0000038, 0 , 0,
19547 CP1_ }, /* SELEQZ.fmt */
19548 { reserved_block , 0 , 0 , 32,
19549 0xfc0001ff, 0xa0000040, 0 , 0,
19550 CP1_ }, /* POOL32F_0~*(8) */
19551 { reserved_block , 0 , 0 , 32,
19552 0xfc0001ff, 0xa0000048, 0 , 0,
19553 CP1_ }, /* POOL32F_0~*(9) */
19554 { reserved_block , 0 , 0 , 32,
19555 0xfc0001ff, 0xa0000050, 0 , 0,
19556 CP1_ }, /* POOL32F_0~*(10) */
19557 { reserved_block , 0 , 0 , 32,
19558 0xfc0001ff, 0xa0000058, 0 , 0,
19559 CP1_ }, /* POOL32F_0~*(11) */
19560 { pool , CLASS_fmt , 2 , 32,
19561 0xfc0001ff, 0xa0000060, 0 , 0,
19562 CP1_ }, /* CLASS.fmt */
19563 { reserved_block , 0 , 0 , 32,
19564 0xfc0001ff, 0xa0000068, 0 , 0,
19565 CP1_ }, /* POOL32F_0~*(13) */
19566 { pool , SUB_fmt0 , 2 , 32,
19567 0xfc0001ff, 0xa0000070, 0 , 0,
19568 CP1_ }, /* SUB.fmt0 */
19569 { pool , SELNEZ_fmt , 2 , 32,
19570 0xfc0001ff, 0xa0000078, 0 , 0,
19571 CP1_ }, /* SELNEZ.fmt */
19572 { reserved_block , 0 , 0 , 32,
19573 0xfc0001ff, 0xa0000080, 0 , 0,
19574 CP1_ }, /* POOL32F_0~*(16) */
19575 { reserved_block , 0 , 0 , 32,
19576 0xfc0001ff, 0xa0000088, 0 , 0,
19577 CP1_ }, /* POOL32F_0~*(17) */
19578 { reserved_block , 0 , 0 , 32,
19579 0xfc0001ff, 0xa0000090, 0 , 0,
19580 CP1_ }, /* POOL32F_0~*(18) */
19581 { reserved_block , 0 , 0 , 32,
19582 0xfc0001ff, 0xa0000098, 0 , 0,
19583 CP1_ }, /* POOL32F_0~*(19) */
19584 { reserved_block , 0 , 0 , 32,
19585 0xfc0001ff, 0xa00000a0, 0 , 0,
19586 CP1_ }, /* POOL32F_0~*(20) */
19587 { reserved_block , 0 , 0 , 32,
19588 0xfc0001ff, 0xa00000a8, 0 , 0,
19589 CP1_ }, /* POOL32F_0~*(21) */
19590 { pool , MUL_fmt0 , 2 , 32,
19591 0xfc0001ff, 0xa00000b0, 0 , 0,
19592 CP1_ }, /* MUL.fmt0 */
19593 { pool , SEL_fmt , 2 , 32,
19594 0xfc0001ff, 0xa00000b8, 0 , 0,
19595 CP1_ }, /* SEL.fmt */
19596 { reserved_block , 0 , 0 , 32,
19597 0xfc0001ff, 0xa00000c0, 0 , 0,
19598 CP1_ }, /* POOL32F_0~*(24) */
19599 { reserved_block , 0 , 0 , 32,
19600 0xfc0001ff, 0xa00000c8, 0 , 0,
19601 CP1_ }, /* POOL32F_0~*(25) */
19602 { reserved_block , 0 , 0 , 32,
19603 0xfc0001ff, 0xa00000d0, 0 , 0,
19604 CP1_ }, /* POOL32F_0~*(26) */
19605 { reserved_block , 0 , 0 , 32,
19606 0xfc0001ff, 0xa00000d8, 0 , 0,
19607 CP1_ }, /* POOL32F_0~*(27) */
19608 { reserved_block , 0 , 0 , 32,
19609 0xfc0001ff, 0xa00000e0, 0 , 0,
19610 CP1_ }, /* POOL32F_0~*(28) */
19611 { reserved_block , 0 , 0 , 32,
19612 0xfc0001ff, 0xa00000e8, 0 , 0,
19613 CP1_ }, /* POOL32F_0~*(29) */
19614 { pool , DIV_fmt0 , 2 , 32,
19615 0xfc0001ff, 0xa00000f0, 0 , 0,
19616 CP1_ }, /* DIV.fmt0 */
19617 { reserved_block , 0 , 0 , 32,
19618 0xfc0001ff, 0xa00000f8, 0 , 0,
19619 CP1_ }, /* POOL32F_0~*(31) */
19620 { reserved_block , 0 , 0 , 32,
19621 0xfc0001ff, 0xa0000100, 0 , 0,
19622 CP1_ }, /* POOL32F_0~*(32) */
19623 { reserved_block , 0 , 0 , 32,
19624 0xfc0001ff, 0xa0000108, 0 , 0,
19625 CP1_ }, /* POOL32F_0~*(33) */
19626 { reserved_block , 0 , 0 , 32,
19627 0xfc0001ff, 0xa0000110, 0 , 0,
19628 CP1_ }, /* POOL32F_0~*(34) */
19629 { reserved_block , 0 , 0 , 32,
19630 0xfc0001ff, 0xa0000118, 0 , 0,
19631 CP1_ }, /* POOL32F_0~*(35) */
19632 { reserved_block , 0 , 0 , 32,
19633 0xfc0001ff, 0xa0000120, 0 , 0,
19634 CP1_ }, /* POOL32F_0~*(36) */
19635 { reserved_block , 0 , 0 , 32,
19636 0xfc0001ff, 0xa0000128, 0 , 0,
19637 CP1_ }, /* POOL32F_0~*(37) */
19638 { pool , ADD_fmt1 , 2 , 32,
19639 0xfc0001ff, 0xa0000130, 0 , 0,
19640 CP1_ }, /* ADD.fmt1 */
19641 { reserved_block , 0 , 0 , 32,
19642 0xfc0001ff, 0xa0000138, 0 , 0,
19643 CP1_ }, /* POOL32F_0~*(39) */
19644 { reserved_block , 0 , 0 , 32,
19645 0xfc0001ff, 0xa0000140, 0 , 0,
19646 CP1_ }, /* POOL32F_0~*(40) */
19647 { reserved_block , 0 , 0 , 32,
19648 0xfc0001ff, 0xa0000148, 0 , 0,
19649 CP1_ }, /* POOL32F_0~*(41) */
19650 { reserved_block , 0 , 0 , 32,
19651 0xfc0001ff, 0xa0000150, 0 , 0,
19652 CP1_ }, /* POOL32F_0~*(42) */
19653 { reserved_block , 0 , 0 , 32,
19654 0xfc0001ff, 0xa0000158, 0 , 0,
19655 CP1_ }, /* POOL32F_0~*(43) */
19656 { reserved_block , 0 , 0 , 32,
19657 0xfc0001ff, 0xa0000160, 0 , 0,
19658 CP1_ }, /* POOL32F_0~*(44) */
19659 { reserved_block , 0 , 0 , 32,
19660 0xfc0001ff, 0xa0000168, 0 , 0,
19661 CP1_ }, /* POOL32F_0~*(45) */
19662 { pool , SUB_fmt1 , 2 , 32,
19663 0xfc0001ff, 0xa0000170, 0 , 0,
19664 CP1_ }, /* SUB.fmt1 */
19665 { reserved_block , 0 , 0 , 32,
19666 0xfc0001ff, 0xa0000178, 0 , 0,
19667 CP1_ }, /* POOL32F_0~*(47) */
19668 { reserved_block , 0 , 0 , 32,
19669 0xfc0001ff, 0xa0000180, 0 , 0,
19670 CP1_ }, /* POOL32F_0~*(48) */
19671 { reserved_block , 0 , 0 , 32,
19672 0xfc0001ff, 0xa0000188, 0 , 0,
19673 CP1_ }, /* POOL32F_0~*(49) */
19674 { reserved_block , 0 , 0 , 32,
19675 0xfc0001ff, 0xa0000190, 0 , 0,
19676 CP1_ }, /* POOL32F_0~*(50) */
19677 { reserved_block , 0 , 0 , 32,
19678 0xfc0001ff, 0xa0000198, 0 , 0,
19679 CP1_ }, /* POOL32F_0~*(51) */
19680 { reserved_block , 0 , 0 , 32,
19681 0xfc0001ff, 0xa00001a0, 0 , 0,
19682 CP1_ }, /* POOL32F_0~*(52) */
19683 { reserved_block , 0 , 0 , 32,
19684 0xfc0001ff, 0xa00001a8, 0 , 0,
19685 CP1_ }, /* POOL32F_0~*(53) */
19686 { pool , MUL_fmt1 , 2 , 32,
19687 0xfc0001ff, 0xa00001b0, 0 , 0,
19688 CP1_ }, /* MUL.fmt1 */
19689 { pool , MADDF_fmt , 2 , 32,
19690 0xfc0001ff, 0xa00001b8, 0 , 0,
19691 CP1_ }, /* MADDF.fmt */
19692 { reserved_block , 0 , 0 , 32,
19693 0xfc0001ff, 0xa00001c0, 0 , 0,
19694 CP1_ }, /* POOL32F_0~*(56) */
19695 { reserved_block , 0 , 0 , 32,
19696 0xfc0001ff, 0xa00001c8, 0 , 0,
19697 CP1_ }, /* POOL32F_0~*(57) */
19698 { reserved_block , 0 , 0 , 32,
19699 0xfc0001ff, 0xa00001d0, 0 , 0,
19700 CP1_ }, /* POOL32F_0~*(58) */
19701 { reserved_block , 0 , 0 , 32,
19702 0xfc0001ff, 0xa00001d8, 0 , 0,
19703 CP1_ }, /* POOL32F_0~*(59) */
19704 { reserved_block , 0 , 0 , 32,
19705 0xfc0001ff, 0xa00001e0, 0 , 0,
19706 CP1_ }, /* POOL32F_0~*(60) */
19707 { reserved_block , 0 , 0 , 32,
19708 0xfc0001ff, 0xa00001e8, 0 , 0,
19709 CP1_ }, /* POOL32F_0~*(61) */
19710 { pool , DIV_fmt1 , 2 , 32,
19711 0xfc0001ff, 0xa00001f0, 0 , 0,
19712 CP1_ }, /* DIV.fmt1 */
19713 { pool , MSUBF_fmt , 2 , 32,
19714 0xfc0001ff, 0xa00001f8, 0 , 0,
19715 CP1_ }, /* MSUBF.fmt */
19716 };
19717
19718
19719 NMD::Pool NMD::MIN_fmt[2] = {
19720 { instruction , 0 , 0 , 32,
19721 0xfc00023f, 0xa0000003, &NMD::MIN_S , 0,
19722 CP1_ }, /* MIN.S */
19723 { instruction , 0 , 0 , 32,
19724 0xfc00023f, 0xa0000203, &NMD::MIN_D , 0,
19725 CP1_ }, /* MIN.D */
19726 };
19727
19728
19729 NMD::Pool NMD::MAX_fmt[2] = {
19730 { instruction , 0 , 0 , 32,
19731 0xfc00023f, 0xa000000b, &NMD::MAX_S , 0,
19732 CP1_ }, /* MAX.S */
19733 { instruction , 0 , 0 , 32,
19734 0xfc00023f, 0xa000020b, &NMD::MAX_D , 0,
19735 CP1_ }, /* MAX.D */
19736 };
19737
19738
19739 NMD::Pool NMD::MINA_fmt[2] = {
19740 { instruction , 0 , 0 , 32,
19741 0xfc00023f, 0xa0000023, &NMD::MINA_S , 0,
19742 CP1_ }, /* MINA.S */
19743 { instruction , 0 , 0 , 32,
19744 0xfc00023f, 0xa0000223, &NMD::MINA_D , 0,
19745 CP1_ }, /* MINA.D */
19746 };
19747
19748
19749 NMD::Pool NMD::MAXA_fmt[2] = {
19750 { instruction , 0 , 0 , 32,
19751 0xfc00023f, 0xa000002b, &NMD::MAXA_S , 0,
19752 CP1_ }, /* MAXA.S */
19753 { instruction , 0 , 0 , 32,
19754 0xfc00023f, 0xa000022b, &NMD::MAXA_D , 0,
19755 CP1_ }, /* MAXA.D */
19756 };
19757
19758
19759 NMD::Pool NMD::CVT_L_fmt[2] = {
19760 { instruction , 0 , 0 , 32,
19761 0xfc007fff, 0xa000013b, &NMD::CVT_L_S , 0,
19762 CP1_ }, /* CVT.L.S */
19763 { instruction , 0 , 0 , 32,
19764 0xfc007fff, 0xa000413b, &NMD::CVT_L_D , 0,
19765 CP1_ }, /* CVT.L.D */
19766 };
19767
19768
19769 NMD::Pool NMD::RSQRT_fmt[2] = {
19770 { instruction , 0 , 0 , 32,
19771 0xfc007fff, 0xa000023b, &NMD::RSQRT_S , 0,
19772 CP1_ }, /* RSQRT.S */
19773 { instruction , 0 , 0 , 32,
19774 0xfc007fff, 0xa000423b, &NMD::RSQRT_D , 0,
19775 CP1_ }, /* RSQRT.D */
19776 };
19777
19778
19779 NMD::Pool NMD::FLOOR_L_fmt[2] = {
19780 { instruction , 0 , 0 , 32,
19781 0xfc007fff, 0xa000033b, &NMD::FLOOR_L_S , 0,
19782 CP1_ }, /* FLOOR.L.S */
19783 { instruction , 0 , 0 , 32,
19784 0xfc007fff, 0xa000433b, &NMD::FLOOR_L_D , 0,
19785 CP1_ }, /* FLOOR.L.D */
19786 };
19787
19788
19789 NMD::Pool NMD::CVT_W_fmt[2] = {
19790 { instruction , 0 , 0 , 32,
19791 0xfc007fff, 0xa000093b, &NMD::CVT_W_S , 0,
19792 CP1_ }, /* CVT.W.S */
19793 { instruction , 0 , 0 , 32,
19794 0xfc007fff, 0xa000493b, &NMD::CVT_W_D , 0,
19795 CP1_ }, /* CVT.W.D */
19796 };
19797
19798
19799 NMD::Pool NMD::SQRT_fmt[2] = {
19800 { instruction , 0 , 0 , 32,
19801 0xfc007fff, 0xa0000a3b, &NMD::SQRT_S , 0,
19802 CP1_ }, /* SQRT.S */
19803 { instruction , 0 , 0 , 32,
19804 0xfc007fff, 0xa0004a3b, &NMD::SQRT_D , 0,
19805 CP1_ }, /* SQRT.D */
19806 };
19807
19808
19809 NMD::Pool NMD::FLOOR_W_fmt[2] = {
19810 { instruction , 0 , 0 , 32,
19811 0xfc007fff, 0xa0000b3b, &NMD::FLOOR_W_S , 0,
19812 CP1_ }, /* FLOOR.W.S */
19813 { instruction , 0 , 0 , 32,
19814 0xfc007fff, 0xa0004b3b, &NMD::FLOOR_W_D , 0,
19815 CP1_ }, /* FLOOR.W.D */
19816 };
19817
19818
19819 NMD::Pool NMD::RECIP_fmt[2] = {
19820 { instruction , 0 , 0 , 32,
19821 0xfc007fff, 0xa000123b, &NMD::RECIP_S , 0,
19822 CP1_ }, /* RECIP.S */
19823 { instruction , 0 , 0 , 32,
19824 0xfc007fff, 0xa000523b, &NMD::RECIP_D , 0,
19825 CP1_ }, /* RECIP.D */
19826 };
19827
19828
19829 NMD::Pool NMD::CEIL_L_fmt[2] = {
19830 { instruction , 0 , 0 , 32,
19831 0xfc007fff, 0xa000133b, &NMD::CEIL_L_S , 0,
19832 CP1_ }, /* CEIL.L.S */
19833 { instruction , 0 , 0 , 32,
19834 0xfc007fff, 0xa000533b, &NMD::CEIL_L_D , 0,
19835 CP1_ }, /* CEIL.L.D */
19836 };
19837
19838
19839 NMD::Pool NMD::CEIL_W_fmt[2] = {
19840 { instruction , 0 , 0 , 32,
19841 0xfc007fff, 0xa0001b3b, &NMD::CEIL_W_S , 0,
19842 CP1_ }, /* CEIL.W.S */
19843 { instruction , 0 , 0 , 32,
19844 0xfc007fff, 0xa0005b3b, &NMD::CEIL_W_D , 0,
19845 CP1_ }, /* CEIL.W.D */
19846 };
19847
19848
19849 NMD::Pool NMD::TRUNC_L_fmt[2] = {
19850 { instruction , 0 , 0 , 32,
19851 0xfc007fff, 0xa000233b, &NMD::TRUNC_L_S , 0,
19852 CP1_ }, /* TRUNC.L.S */
19853 { instruction , 0 , 0 , 32,
19854 0xfc007fff, 0xa000633b, &NMD::TRUNC_L_D , 0,
19855 CP1_ }, /* TRUNC.L.D */
19856 };
19857
19858
19859 NMD::Pool NMD::TRUNC_W_fmt[2] = {
19860 { instruction , 0 , 0 , 32,
19861 0xfc007fff, 0xa0002b3b, &NMD::TRUNC_W_S , 0,
19862 CP1_ }, /* TRUNC.W.S */
19863 { instruction , 0 , 0 , 32,
19864 0xfc007fff, 0xa0006b3b, &NMD::TRUNC_W_D , 0,
19865 CP1_ }, /* TRUNC.W.D */
19866 };
19867
19868
19869 NMD::Pool NMD::ROUND_L_fmt[2] = {
19870 { instruction , 0 , 0 , 32,
19871 0xfc007fff, 0xa000333b, &NMD::ROUND_L_S , 0,
19872 CP1_ }, /* ROUND.L.S */
19873 { instruction , 0 , 0 , 32,
19874 0xfc007fff, 0xa000733b, &NMD::ROUND_L_D , 0,
19875 CP1_ }, /* ROUND.L.D */
19876 };
19877
19878
19879 NMD::Pool NMD::ROUND_W_fmt[2] = {
19880 { instruction , 0 , 0 , 32,
19881 0xfc007fff, 0xa0003b3b, &NMD::ROUND_W_S , 0,
19882 CP1_ }, /* ROUND.W.S */
19883 { instruction , 0 , 0 , 32,
19884 0xfc007fff, 0xa0007b3b, &NMD::ROUND_W_D , 0,
19885 CP1_ }, /* ROUND.W.D */
19886 };
19887
19888
19889 NMD::Pool NMD::POOL32Fxf_0[64] = {
19890 { reserved_block , 0 , 0 , 32,
19891 0xfc003fff, 0xa000003b, 0 , 0,
19892 CP1_ }, /* POOL32Fxf_0~*(0) */
19893 { pool , CVT_L_fmt , 2 , 32,
19894 0xfc003fff, 0xa000013b, 0 , 0,
19895 CP1_ }, /* CVT.L.fmt */
19896 { pool , RSQRT_fmt , 2 , 32,
19897 0xfc003fff, 0xa000023b, 0 , 0,
19898 CP1_ }, /* RSQRT.fmt */
19899 { pool , FLOOR_L_fmt , 2 , 32,
19900 0xfc003fff, 0xa000033b, 0 , 0,
19901 CP1_ }, /* FLOOR.L.fmt */
19902 { reserved_block , 0 , 0 , 32,
19903 0xfc003fff, 0xa000043b, 0 , 0,
19904 CP1_ }, /* POOL32Fxf_0~*(4) */
19905 { reserved_block , 0 , 0 , 32,
19906 0xfc003fff, 0xa000053b, 0 , 0,
19907 CP1_ }, /* POOL32Fxf_0~*(5) */
19908 { reserved_block , 0 , 0 , 32,
19909 0xfc003fff, 0xa000063b, 0 , 0,
19910 CP1_ }, /* POOL32Fxf_0~*(6) */
19911 { reserved_block , 0 , 0 , 32,
19912 0xfc003fff, 0xa000073b, 0 , 0,
19913 CP1_ }, /* POOL32Fxf_0~*(7) */
19914 { reserved_block , 0 , 0 , 32,
19915 0xfc003fff, 0xa000083b, 0 , 0,
19916 CP1_ }, /* POOL32Fxf_0~*(8) */
19917 { pool , CVT_W_fmt , 2 , 32,
19918 0xfc003fff, 0xa000093b, 0 , 0,
19919 CP1_ }, /* CVT.W.fmt */
19920 { pool , SQRT_fmt , 2 , 32,
19921 0xfc003fff, 0xa0000a3b, 0 , 0,
19922 CP1_ }, /* SQRT.fmt */
19923 { pool , FLOOR_W_fmt , 2 , 32,
19924 0xfc003fff, 0xa0000b3b, 0 , 0,
19925 CP1_ }, /* FLOOR.W.fmt */
19926 { reserved_block , 0 , 0 , 32,
19927 0xfc003fff, 0xa0000c3b, 0 , 0,
19928 CP1_ }, /* POOL32Fxf_0~*(12) */
19929 { reserved_block , 0 , 0 , 32,
19930 0xfc003fff, 0xa0000d3b, 0 , 0,
19931 CP1_ }, /* POOL32Fxf_0~*(13) */
19932 { reserved_block , 0 , 0 , 32,
19933 0xfc003fff, 0xa0000e3b, 0 , 0,
19934 CP1_ }, /* POOL32Fxf_0~*(14) */
19935 { reserved_block , 0 , 0 , 32,
19936 0xfc003fff, 0xa0000f3b, 0 , 0,
19937 CP1_ }, /* POOL32Fxf_0~*(15) */
19938 { instruction , 0 , 0 , 32,
19939 0xfc003fff, 0xa000103b, &NMD::CFC1 , 0,
19940 CP1_ }, /* CFC1 */
19941 { reserved_block , 0 , 0 , 32,
19942 0xfc003fff, 0xa000113b, 0 , 0,
19943 CP1_ }, /* POOL32Fxf_0~*(17) */
19944 { pool , RECIP_fmt , 2 , 32,
19945 0xfc003fff, 0xa000123b, 0 , 0,
19946 CP1_ }, /* RECIP.fmt */
19947 { pool , CEIL_L_fmt , 2 , 32,
19948 0xfc003fff, 0xa000133b, 0 , 0,
19949 CP1_ }, /* CEIL.L.fmt */
19950 { reserved_block , 0 , 0 , 32,
19951 0xfc003fff, 0xa000143b, 0 , 0,
19952 CP1_ }, /* POOL32Fxf_0~*(20) */
19953 { reserved_block , 0 , 0 , 32,
19954 0xfc003fff, 0xa000153b, 0 , 0,
19955 CP1_ }, /* POOL32Fxf_0~*(21) */
19956 { reserved_block , 0 , 0 , 32,
19957 0xfc003fff, 0xa000163b, 0 , 0,
19958 CP1_ }, /* POOL32Fxf_0~*(22) */
19959 { reserved_block , 0 , 0 , 32,
19960 0xfc003fff, 0xa000173b, 0 , 0,
19961 CP1_ }, /* POOL32Fxf_0~*(23) */
19962 { instruction , 0 , 0 , 32,
19963 0xfc003fff, 0xa000183b, &NMD::CTC1 , 0,
19964 CP1_ }, /* CTC1 */
19965 { reserved_block , 0 , 0 , 32,
19966 0xfc003fff, 0xa000193b, 0 , 0,
19967 CP1_ }, /* POOL32Fxf_0~*(25) */
19968 { reserved_block , 0 , 0 , 32,
19969 0xfc003fff, 0xa0001a3b, 0 , 0,
19970 CP1_ }, /* POOL32Fxf_0~*(26) */
19971 { pool , CEIL_W_fmt , 2 , 32,
19972 0xfc003fff, 0xa0001b3b, 0 , 0,
19973 CP1_ }, /* CEIL.W.fmt */
19974 { reserved_block , 0 , 0 , 32,
19975 0xfc003fff, 0xa0001c3b, 0 , 0,
19976 CP1_ }, /* POOL32Fxf_0~*(28) */
19977 { reserved_block , 0 , 0 , 32,
19978 0xfc003fff, 0xa0001d3b, 0 , 0,
19979 CP1_ }, /* POOL32Fxf_0~*(29) */
19980 { reserved_block , 0 , 0 , 32,
19981 0xfc003fff, 0xa0001e3b, 0 , 0,
19982 CP1_ }, /* POOL32Fxf_0~*(30) */
19983 { reserved_block , 0 , 0 , 32,
19984 0xfc003fff, 0xa0001f3b, 0 , 0,
19985 CP1_ }, /* POOL32Fxf_0~*(31) */
19986 { instruction , 0 , 0 , 32,
19987 0xfc003fff, 0xa000203b, &NMD::MFC1 , 0,
19988 CP1_ }, /* MFC1 */
19989 { instruction , 0 , 0 , 32,
19990 0xfc003fff, 0xa000213b, &NMD::CVT_S_PL , 0,
19991 CP1_ }, /* CVT.S.PL */
19992 { reserved_block , 0 , 0 , 32,
19993 0xfc003fff, 0xa000223b, 0 , 0,
19994 CP1_ }, /* POOL32Fxf_0~*(34) */
19995 { pool , TRUNC_L_fmt , 2 , 32,
19996 0xfc003fff, 0xa000233b, 0 , 0,
19997 CP1_ }, /* TRUNC.L.fmt */
19998 { instruction , 0 , 0 , 32,
19999 0xfc003fff, 0xa000243b, &NMD::DMFC1 , 0,
20000 CP1_ | MIPS64_ }, /* DMFC1 */
20001 { reserved_block , 0 , 0 , 32,
20002 0xfc003fff, 0xa000253b, 0 , 0,
20003 CP1_ }, /* POOL32Fxf_0~*(37) */
20004 { reserved_block , 0 , 0 , 32,
20005 0xfc003fff, 0xa000263b, 0 , 0,
20006 CP1_ }, /* POOL32Fxf_0~*(38) */
20007 { reserved_block , 0 , 0 , 32,
20008 0xfc003fff, 0xa000273b, 0 , 0,
20009 CP1_ }, /* POOL32Fxf_0~*(39) */
20010 { instruction , 0 , 0 , 32,
20011 0xfc003fff, 0xa000283b, &NMD::MTC1 , 0,
20012 CP1_ }, /* MTC1 */
20013 { instruction , 0 , 0 , 32,
20014 0xfc003fff, 0xa000293b, &NMD::CVT_S_PU , 0,
20015 CP1_ }, /* CVT.S.PU */
20016 { reserved_block , 0 , 0 , 32,
20017 0xfc003fff, 0xa0002a3b, 0 , 0,
20018 CP1_ }, /* POOL32Fxf_0~*(42) */
20019 { pool , TRUNC_W_fmt , 2 , 32,
20020 0xfc003fff, 0xa0002b3b, 0 , 0,
20021 CP1_ }, /* TRUNC.W.fmt */
20022 { instruction , 0 , 0 , 32,
20023 0xfc003fff, 0xa0002c3b, &NMD::DMTC1 , 0,
20024 CP1_ | MIPS64_ }, /* DMTC1 */
20025 { reserved_block , 0 , 0 , 32,
20026 0xfc003fff, 0xa0002d3b, 0 , 0,
20027 CP1_ }, /* POOL32Fxf_0~*(45) */
20028 { reserved_block , 0 , 0 , 32,
20029 0xfc003fff, 0xa0002e3b, 0 , 0,
20030 CP1_ }, /* POOL32Fxf_0~*(46) */
20031 { reserved_block , 0 , 0 , 32,
20032 0xfc003fff, 0xa0002f3b, 0 , 0,
20033 CP1_ }, /* POOL32Fxf_0~*(47) */
20034 { instruction , 0 , 0 , 32,
20035 0xfc003fff, 0xa000303b, &NMD::MFHC1 , 0,
20036 CP1_ }, /* MFHC1 */
20037 { reserved_block , 0 , 0 , 32,
20038 0xfc003fff, 0xa000313b, 0 , 0,
20039 CP1_ }, /* POOL32Fxf_0~*(49) */
20040 { reserved_block , 0 , 0 , 32,
20041 0xfc003fff, 0xa000323b, 0 , 0,
20042 CP1_ }, /* POOL32Fxf_0~*(50) */
20043 { pool , ROUND_L_fmt , 2 , 32,
20044 0xfc003fff, 0xa000333b, 0 , 0,
20045 CP1_ }, /* ROUND.L.fmt */
20046 { reserved_block , 0 , 0 , 32,
20047 0xfc003fff, 0xa000343b, 0 , 0,
20048 CP1_ }, /* POOL32Fxf_0~*(52) */
20049 { reserved_block , 0 , 0 , 32,
20050 0xfc003fff, 0xa000353b, 0 , 0,
20051 CP1_ }, /* POOL32Fxf_0~*(53) */
20052 { reserved_block , 0 , 0 , 32,
20053 0xfc003fff, 0xa000363b, 0 , 0,
20054 CP1_ }, /* POOL32Fxf_0~*(54) */
20055 { reserved_block , 0 , 0 , 32,
20056 0xfc003fff, 0xa000373b, 0 , 0,
20057 CP1_ }, /* POOL32Fxf_0~*(55) */
20058 { instruction , 0 , 0 , 32,
20059 0xfc003fff, 0xa000383b, &NMD::MTHC1 , 0,
20060 CP1_ }, /* MTHC1 */
20061 { reserved_block , 0 , 0 , 32,
20062 0xfc003fff, 0xa000393b, 0 , 0,
20063 CP1_ }, /* POOL32Fxf_0~*(57) */
20064 { reserved_block , 0 , 0 , 32,
20065 0xfc003fff, 0xa0003a3b, 0 , 0,
20066 CP1_ }, /* POOL32Fxf_0~*(58) */
20067 { pool , ROUND_W_fmt , 2 , 32,
20068 0xfc003fff, 0xa0003b3b, 0 , 0,
20069 CP1_ }, /* ROUND.W.fmt */
20070 { reserved_block , 0 , 0 , 32,
20071 0xfc003fff, 0xa0003c3b, 0 , 0,
20072 CP1_ }, /* POOL32Fxf_0~*(60) */
20073 { reserved_block , 0 , 0 , 32,
20074 0xfc003fff, 0xa0003d3b, 0 , 0,
20075 CP1_ }, /* POOL32Fxf_0~*(61) */
20076 { reserved_block , 0 , 0 , 32,
20077 0xfc003fff, 0xa0003e3b, 0 , 0,
20078 CP1_ }, /* POOL32Fxf_0~*(62) */
20079 { reserved_block , 0 , 0 , 32,
20080 0xfc003fff, 0xa0003f3b, 0 , 0,
20081 CP1_ }, /* POOL32Fxf_0~*(63) */
20082 };
20083
20084
20085 NMD::Pool NMD::MOV_fmt[4] = {
20086 { instruction , 0 , 0 , 32,
20087 0xfc007fff, 0xa000007b, &NMD::MOV_S , 0,
20088 CP1_ }, /* MOV.S */
20089 { instruction , 0 , 0 , 32,
20090 0xfc007fff, 0xa000207b, &NMD::MOV_D , 0,
20091 CP1_ }, /* MOV.D */
20092 { reserved_block , 0 , 0 , 32,
20093 0xfc007fff, 0xa000407b, 0 , 0,
20094 CP1_ }, /* MOV.fmt~*(2) */
20095 { reserved_block , 0 , 0 , 32,
20096 0xfc007fff, 0xa000607b, 0 , 0,
20097 CP1_ }, /* MOV.fmt~*(3) */
20098 };
20099
20100
20101 NMD::Pool NMD::ABS_fmt[4] = {
20102 { instruction , 0 , 0 , 32,
20103 0xfc007fff, 0xa000037b, &NMD::ABS_S , 0,
20104 CP1_ }, /* ABS.S */
20105 { instruction , 0 , 0 , 32,
20106 0xfc007fff, 0xa000237b, &NMD::ABS_D , 0,
20107 CP1_ }, /* ABS.D */
20108 { reserved_block , 0 , 0 , 32,
20109 0xfc007fff, 0xa000437b, 0 , 0,
20110 CP1_ }, /* ABS.fmt~*(2) */
20111 { reserved_block , 0 , 0 , 32,
20112 0xfc007fff, 0xa000637b, 0 , 0,
20113 CP1_ }, /* ABS.fmt~*(3) */
20114 };
20115
20116
20117 NMD::Pool NMD::NEG_fmt[4] = {
20118 { instruction , 0 , 0 , 32,
20119 0xfc007fff, 0xa0000b7b, &NMD::NEG_S , 0,
20120 CP1_ }, /* NEG.S */
20121 { instruction , 0 , 0 , 32,
20122 0xfc007fff, 0xa0002b7b, &NMD::NEG_D , 0,
20123 CP1_ }, /* NEG.D */
20124 { reserved_block , 0 , 0 , 32,
20125 0xfc007fff, 0xa0004b7b, 0 , 0,
20126 CP1_ }, /* NEG.fmt~*(2) */
20127 { reserved_block , 0 , 0 , 32,
20128 0xfc007fff, 0xa0006b7b, 0 , 0,
20129 CP1_ }, /* NEG.fmt~*(3) */
20130 };
20131
20132
20133 NMD::Pool NMD::CVT_D_fmt[4] = {
20134 { instruction , 0 , 0 , 32,
20135 0xfc007fff, 0xa000137b, &NMD::CVT_D_S , 0,
20136 CP1_ }, /* CVT.D.S */
20137 { instruction , 0 , 0 , 32,
20138 0xfc007fff, 0xa000337b, &NMD::CVT_D_W , 0,
20139 CP1_ }, /* CVT.D.W */
20140 { instruction , 0 , 0 , 32,
20141 0xfc007fff, 0xa000537b, &NMD::CVT_D_L , 0,
20142 CP1_ }, /* CVT.D.L */
20143 { reserved_block , 0 , 0 , 32,
20144 0xfc007fff, 0xa000737b, 0 , 0,
20145 CP1_ }, /* CVT.D.fmt~*(3) */
20146 };
20147
20148
20149 NMD::Pool NMD::CVT_S_fmt[4] = {
20150 { instruction , 0 , 0 , 32,
20151 0xfc007fff, 0xa0001b7b, &NMD::CVT_S_D , 0,
20152 CP1_ }, /* CVT.S.D */
20153 { instruction , 0 , 0 , 32,
20154 0xfc007fff, 0xa0003b7b, &NMD::CVT_S_W , 0,
20155 CP1_ }, /* CVT.S.W */
20156 { instruction , 0 , 0 , 32,
20157 0xfc007fff, 0xa0005b7b, &NMD::CVT_S_L , 0,
20158 CP1_ }, /* CVT.S.L */
20159 { reserved_block , 0 , 0 , 32,
20160 0xfc007fff, 0xa0007b7b, 0 , 0,
20161 CP1_ }, /* CVT.S.fmt~*(3) */
20162 };
20163
20164
20165 NMD::Pool NMD::POOL32Fxf_1[32] = {
20166 { pool , MOV_fmt , 4 , 32,
20167 0xfc001fff, 0xa000007b, 0 , 0,
20168 CP1_ }, /* MOV.fmt */
20169 { reserved_block , 0 , 0 , 32,
20170 0xfc001fff, 0xa000017b, 0 , 0,
20171 CP1_ }, /* POOL32Fxf_1~*(1) */
20172 { reserved_block , 0 , 0 , 32,
20173 0xfc001fff, 0xa000027b, 0 , 0,
20174 CP1_ }, /* POOL32Fxf_1~*(2) */
20175 { pool , ABS_fmt , 4 , 32,
20176 0xfc001fff, 0xa000037b, 0 , 0,
20177 CP1_ }, /* ABS.fmt */
20178 { reserved_block , 0 , 0 , 32,
20179 0xfc001fff, 0xa000047b, 0 , 0,
20180 CP1_ }, /* POOL32Fxf_1~*(4) */
20181 { reserved_block , 0 , 0 , 32,
20182 0xfc001fff, 0xa000057b, 0 , 0,
20183 CP1_ }, /* POOL32Fxf_1~*(5) */
20184 { reserved_block , 0 , 0 , 32,
20185 0xfc001fff, 0xa000067b, 0 , 0,
20186 CP1_ }, /* POOL32Fxf_1~*(6) */
20187 { reserved_block , 0 , 0 , 32,
20188 0xfc001fff, 0xa000077b, 0 , 0,
20189 CP1_ }, /* POOL32Fxf_1~*(7) */
20190 { reserved_block , 0 , 0 , 32,
20191 0xfc001fff, 0xa000087b, 0 , 0,
20192 CP1_ }, /* POOL32Fxf_1~*(8) */
20193 { reserved_block , 0 , 0 , 32,
20194 0xfc001fff, 0xa000097b, 0 , 0,
20195 CP1_ }, /* POOL32Fxf_1~*(9) */
20196 { reserved_block , 0 , 0 , 32,
20197 0xfc001fff, 0xa0000a7b, 0 , 0,
20198 CP1_ }, /* POOL32Fxf_1~*(10) */
20199 { pool , NEG_fmt , 4 , 32,
20200 0xfc001fff, 0xa0000b7b, 0 , 0,
20201 CP1_ }, /* NEG.fmt */
20202 { reserved_block , 0 , 0 , 32,
20203 0xfc001fff, 0xa0000c7b, 0 , 0,
20204 CP1_ }, /* POOL32Fxf_1~*(12) */
20205 { reserved_block , 0 , 0 , 32,
20206 0xfc001fff, 0xa0000d7b, 0 , 0,
20207 CP1_ }, /* POOL32Fxf_1~*(13) */
20208 { reserved_block , 0 , 0 , 32,
20209 0xfc001fff, 0xa0000e7b, 0 , 0,
20210 CP1_ }, /* POOL32Fxf_1~*(14) */
20211 { reserved_block , 0 , 0 , 32,
20212 0xfc001fff, 0xa0000f7b, 0 , 0,
20213 CP1_ }, /* POOL32Fxf_1~*(15) */
20214 { reserved_block , 0 , 0 , 32,
20215 0xfc001fff, 0xa000107b, 0 , 0,
20216 CP1_ }, /* POOL32Fxf_1~*(16) */
20217 { reserved_block , 0 , 0 , 32,
20218 0xfc001fff, 0xa000117b, 0 , 0,
20219 CP1_ }, /* POOL32Fxf_1~*(17) */
20220 { reserved_block , 0 , 0 , 32,
20221 0xfc001fff, 0xa000127b, 0 , 0,
20222 CP1_ }, /* POOL32Fxf_1~*(18) */
20223 { pool , CVT_D_fmt , 4 , 32,
20224 0xfc001fff, 0xa000137b, 0 , 0,
20225 CP1_ }, /* CVT.D.fmt */
20226 { reserved_block , 0 , 0 , 32,
20227 0xfc001fff, 0xa000147b, 0 , 0,
20228 CP1_ }, /* POOL32Fxf_1~*(20) */
20229 { reserved_block , 0 , 0 , 32,
20230 0xfc001fff, 0xa000157b, 0 , 0,
20231 CP1_ }, /* POOL32Fxf_1~*(21) */
20232 { reserved_block , 0 , 0 , 32,
20233 0xfc001fff, 0xa000167b, 0 , 0,
20234 CP1_ }, /* POOL32Fxf_1~*(22) */
20235 { reserved_block , 0 , 0 , 32,
20236 0xfc001fff, 0xa000177b, 0 , 0,
20237 CP1_ }, /* POOL32Fxf_1~*(23) */
20238 { reserved_block , 0 , 0 , 32,
20239 0xfc001fff, 0xa000187b, 0 , 0,
20240 CP1_ }, /* POOL32Fxf_1~*(24) */
20241 { reserved_block , 0 , 0 , 32,
20242 0xfc001fff, 0xa000197b, 0 , 0,
20243 CP1_ }, /* POOL32Fxf_1~*(25) */
20244 { reserved_block , 0 , 0 , 32,
20245 0xfc001fff, 0xa0001a7b, 0 , 0,
20246 CP1_ }, /* POOL32Fxf_1~*(26) */
20247 { pool , CVT_S_fmt , 4 , 32,
20248 0xfc001fff, 0xa0001b7b, 0 , 0,
20249 CP1_ }, /* CVT.S.fmt */
20250 { reserved_block , 0 , 0 , 32,
20251 0xfc001fff, 0xa0001c7b, 0 , 0,
20252 CP1_ }, /* POOL32Fxf_1~*(28) */
20253 { reserved_block , 0 , 0 , 32,
20254 0xfc001fff, 0xa0001d7b, 0 , 0,
20255 CP1_ }, /* POOL32Fxf_1~*(29) */
20256 { reserved_block , 0 , 0 , 32,
20257 0xfc001fff, 0xa0001e7b, 0 , 0,
20258 CP1_ }, /* POOL32Fxf_1~*(30) */
20259 { reserved_block , 0 , 0 , 32,
20260 0xfc001fff, 0xa0001f7b, 0 , 0,
20261 CP1_ }, /* POOL32Fxf_1~*(31) */
20262 };
20263
20264
20265 NMD::Pool NMD::POOL32Fxf[4] = {
20266 { pool , POOL32Fxf_0 , 64 , 32,
20267 0xfc0000ff, 0xa000003b, 0 , 0,
20268 CP1_ }, /* POOL32Fxf_0 */
20269 { pool , POOL32Fxf_1 , 32 , 32,
20270 0xfc0000ff, 0xa000007b, 0 , 0,
20271 CP1_ }, /* POOL32Fxf_1 */
20272 { reserved_block , 0 , 0 , 32,
20273 0xfc0000ff, 0xa00000bb, 0 , 0,
20274 CP1_ }, /* POOL32Fxf~*(2) */
20275 { reserved_block , 0 , 0 , 32,
20276 0xfc0000ff, 0xa00000fb, 0 , 0,
20277 CP1_ }, /* POOL32Fxf~*(3) */
20278 };
20279
20280
20281 NMD::Pool NMD::POOL32F_3[8] = {
20282 { pool , MIN_fmt , 2 , 32,
20283 0xfc00003f, 0xa0000003, 0 , 0,
20284 CP1_ }, /* MIN.fmt */
20285 { pool , MAX_fmt , 2 , 32,
20286 0xfc00003f, 0xa000000b, 0 , 0,
20287 CP1_ }, /* MAX.fmt */
20288 { reserved_block , 0 , 0 , 32,
20289 0xfc00003f, 0xa0000013, 0 , 0,
20290 CP1_ }, /* POOL32F_3~*(2) */
20291 { reserved_block , 0 , 0 , 32,
20292 0xfc00003f, 0xa000001b, 0 , 0,
20293 CP1_ }, /* POOL32F_3~*(3) */
20294 { pool , MINA_fmt , 2 , 32,
20295 0xfc00003f, 0xa0000023, 0 , 0,
20296 CP1_ }, /* MINA.fmt */
20297 { pool , MAXA_fmt , 2 , 32,
20298 0xfc00003f, 0xa000002b, 0 , 0,
20299 CP1_ }, /* MAXA.fmt */
20300 { reserved_block , 0 , 0 , 32,
20301 0xfc00003f, 0xa0000033, 0 , 0,
20302 CP1_ }, /* POOL32F_3~*(6) */
20303 { pool , POOL32Fxf , 4 , 32,
20304 0xfc00003f, 0xa000003b, 0 , 0,
20305 CP1_ }, /* POOL32Fxf */
20306 };
20307
20308
20309 NMD::Pool NMD::CMP_condn_S[32] = {
20310 { instruction , 0 , 0 , 32,
20311 0xfc0007ff, 0xa0000005, &NMD::CMP_AF_S , 0,
20312 CP1_ }, /* CMP.AF.S */
20313 { instruction , 0 , 0 , 32,
20314 0xfc0007ff, 0xa0000045, &NMD::CMP_UN_S , 0,
20315 CP1_ }, /* CMP.UN.S */
20316 { instruction , 0 , 0 , 32,
20317 0xfc0007ff, 0xa0000085, &NMD::CMP_EQ_S , 0,
20318 CP1_ }, /* CMP.EQ.S */
20319 { instruction , 0 , 0 , 32,
20320 0xfc0007ff, 0xa00000c5, &NMD::CMP_UEQ_S , 0,
20321 CP1_ }, /* CMP.UEQ.S */
20322 { instruction , 0 , 0 , 32,
20323 0xfc0007ff, 0xa0000105, &NMD::CMP_LT_S , 0,
20324 CP1_ }, /* CMP.LT.S */
20325 { instruction , 0 , 0 , 32,
20326 0xfc0007ff, 0xa0000145, &NMD::CMP_ULT_S , 0,
20327 CP1_ }, /* CMP.ULT.S */
20328 { instruction , 0 , 0 , 32,
20329 0xfc0007ff, 0xa0000185, &NMD::CMP_LE_S , 0,
20330 CP1_ }, /* CMP.LE.S */
20331 { instruction , 0 , 0 , 32,
20332 0xfc0007ff, 0xa00001c5, &NMD::CMP_ULE_S , 0,
20333 CP1_ }, /* CMP.ULE.S */
20334 { instruction , 0 , 0 , 32,
20335 0xfc0007ff, 0xa0000205, &NMD::CMP_SAF_S , 0,
20336 CP1_ }, /* CMP.SAF.S */
20337 { instruction , 0 , 0 , 32,
20338 0xfc0007ff, 0xa0000245, &NMD::CMP_SUN_S , 0,
20339 CP1_ }, /* CMP.SUN.S */
20340 { instruction , 0 , 0 , 32,
20341 0xfc0007ff, 0xa0000285, &NMD::CMP_SEQ_S , 0,
20342 CP1_ }, /* CMP.SEQ.S */
20343 { instruction , 0 , 0 , 32,
20344 0xfc0007ff, 0xa00002c5, &NMD::CMP_SUEQ_S , 0,
20345 CP1_ }, /* CMP.SUEQ.S */
20346 { instruction , 0 , 0 , 32,
20347 0xfc0007ff, 0xa0000305, &NMD::CMP_SLT_S , 0,
20348 CP1_ }, /* CMP.SLT.S */
20349 { instruction , 0 , 0 , 32,
20350 0xfc0007ff, 0xa0000345, &NMD::CMP_SULT_S , 0,
20351 CP1_ }, /* CMP.SULT.S */
20352 { instruction , 0 , 0 , 32,
20353 0xfc0007ff, 0xa0000385, &NMD::CMP_SLE_S , 0,
20354 CP1_ }, /* CMP.SLE.S */
20355 { instruction , 0 , 0 , 32,
20356 0xfc0007ff, 0xa00003c5, &NMD::CMP_SULE_S , 0,
20357 CP1_ }, /* CMP.SULE.S */
20358 { reserved_block , 0 , 0 , 32,
20359 0xfc0007ff, 0xa0000405, 0 , 0,
20360 CP1_ }, /* CMP.condn.S~*(16) */
20361 { instruction , 0 , 0 , 32,
20362 0xfc0007ff, 0xa0000445, &NMD::CMP_OR_S , 0,
20363 CP1_ }, /* CMP.OR.S */
20364 { instruction , 0 , 0 , 32,
20365 0xfc0007ff, 0xa0000485, &NMD::CMP_UNE_S , 0,
20366 CP1_ }, /* CMP.UNE.S */
20367 { instruction , 0 , 0 , 32,
20368 0xfc0007ff, 0xa00004c5, &NMD::CMP_NE_S , 0,
20369 CP1_ }, /* CMP.NE.S */
20370 { reserved_block , 0 , 0 , 32,
20371 0xfc0007ff, 0xa0000505, 0 , 0,
20372 CP1_ }, /* CMP.condn.S~*(20) */
20373 { reserved_block , 0 , 0 , 32,
20374 0xfc0007ff, 0xa0000545, 0 , 0,
20375 CP1_ }, /* CMP.condn.S~*(21) */
20376 { reserved_block , 0 , 0 , 32,
20377 0xfc0007ff, 0xa0000585, 0 , 0,
20378 CP1_ }, /* CMP.condn.S~*(22) */
20379 { reserved_block , 0 , 0 , 32,
20380 0xfc0007ff, 0xa00005c5, 0 , 0,
20381 CP1_ }, /* CMP.condn.S~*(23) */
20382 { reserved_block , 0 , 0 , 32,
20383 0xfc0007ff, 0xa0000605, 0 , 0,
20384 CP1_ }, /* CMP.condn.S~*(24) */
20385 { instruction , 0 , 0 , 32,
20386 0xfc0007ff, 0xa0000645, &NMD::CMP_SOR_S , 0,
20387 CP1_ }, /* CMP.SOR.S */
20388 { instruction , 0 , 0 , 32,
20389 0xfc0007ff, 0xa0000685, &NMD::CMP_SUNE_S , 0,
20390 CP1_ }, /* CMP.SUNE.S */
20391 { instruction , 0 , 0 , 32,
20392 0xfc0007ff, 0xa00006c5, &NMD::CMP_SNE_S , 0,
20393 CP1_ }, /* CMP.SNE.S */
20394 { reserved_block , 0 , 0 , 32,
20395 0xfc0007ff, 0xa0000705, 0 , 0,
20396 CP1_ }, /* CMP.condn.S~*(28) */
20397 { reserved_block , 0 , 0 , 32,
20398 0xfc0007ff, 0xa0000745, 0 , 0,
20399 CP1_ }, /* CMP.condn.S~*(29) */
20400 { reserved_block , 0 , 0 , 32,
20401 0xfc0007ff, 0xa0000785, 0 , 0,
20402 CP1_ }, /* CMP.condn.S~*(30) */
20403 { reserved_block , 0 , 0 , 32,
20404 0xfc0007ff, 0xa00007c5, 0 , 0,
20405 CP1_ }, /* CMP.condn.S~*(31) */
20406 };
20407
20408
20409 NMD::Pool NMD::CMP_condn_D[32] = {
20410 { instruction , 0 , 0 , 32,
20411 0xfc0007ff, 0xa0000015, &NMD::CMP_AF_D , 0,
20412 CP1_ }, /* CMP.AF.D */
20413 { instruction , 0 , 0 , 32,
20414 0xfc0007ff, 0xa0000055, &NMD::CMP_UN_D , 0,
20415 CP1_ }, /* CMP.UN.D */
20416 { instruction , 0 , 0 , 32,
20417 0xfc0007ff, 0xa0000095, &NMD::CMP_EQ_D , 0,
20418 CP1_ }, /* CMP.EQ.D */
20419 { instruction , 0 , 0 , 32,
20420 0xfc0007ff, 0xa00000d5, &NMD::CMP_UEQ_D , 0,
20421 CP1_ }, /* CMP.UEQ.D */
20422 { instruction , 0 , 0 , 32,
20423 0xfc0007ff, 0xa0000115, &NMD::CMP_LT_D , 0,
20424 CP1_ }, /* CMP.LT.D */
20425 { instruction , 0 , 0 , 32,
20426 0xfc0007ff, 0xa0000155, &NMD::CMP_ULT_D , 0,
20427 CP1_ }, /* CMP.ULT.D */
20428 { instruction , 0 , 0 , 32,
20429 0xfc0007ff, 0xa0000195, &NMD::CMP_LE_D , 0,
20430 CP1_ }, /* CMP.LE.D */
20431 { instruction , 0 , 0 , 32,
20432 0xfc0007ff, 0xa00001d5, &NMD::CMP_ULE_D , 0,
20433 CP1_ }, /* CMP.ULE.D */
20434 { instruction , 0 , 0 , 32,
20435 0xfc0007ff, 0xa0000215, &NMD::CMP_SAF_D , 0,
20436 CP1_ }, /* CMP.SAF.D */
20437 { instruction , 0 , 0 , 32,
20438 0xfc0007ff, 0xa0000255, &NMD::CMP_SUN_D , 0,
20439 CP1_ }, /* CMP.SUN.D */
20440 { instruction , 0 , 0 , 32,
20441 0xfc0007ff, 0xa0000295, &NMD::CMP_SEQ_D , 0,
20442 CP1_ }, /* CMP.SEQ.D */
20443 { instruction , 0 , 0 , 32,
20444 0xfc0007ff, 0xa00002d5, &NMD::CMP_SUEQ_D , 0,
20445 CP1_ }, /* CMP.SUEQ.D */
20446 { instruction , 0 , 0 , 32,
20447 0xfc0007ff, 0xa0000315, &NMD::CMP_SLT_D , 0,
20448 CP1_ }, /* CMP.SLT.D */
20449 { instruction , 0 , 0 , 32,
20450 0xfc0007ff, 0xa0000355, &NMD::CMP_SULT_D , 0,
20451 CP1_ }, /* CMP.SULT.D */
20452 { instruction , 0 , 0 , 32,
20453 0xfc0007ff, 0xa0000395, &NMD::CMP_SLE_D , 0,
20454 CP1_ }, /* CMP.SLE.D */
20455 { instruction , 0 , 0 , 32,
20456 0xfc0007ff, 0xa00003d5, &NMD::CMP_SULE_D , 0,
20457 CP1_ }, /* CMP.SULE.D */
20458 { reserved_block , 0 , 0 , 32,
20459 0xfc0007ff, 0xa0000415, 0 , 0,
20460 CP1_ }, /* CMP.condn.D~*(16) */
20461 { instruction , 0 , 0 , 32,
20462 0xfc0007ff, 0xa0000455, &NMD::CMP_OR_D , 0,
20463 CP1_ }, /* CMP.OR.D */
20464 { instruction , 0 , 0 , 32,
20465 0xfc0007ff, 0xa0000495, &NMD::CMP_UNE_D , 0,
20466 CP1_ }, /* CMP.UNE.D */
20467 { instruction , 0 , 0 , 32,
20468 0xfc0007ff, 0xa00004d5, &NMD::CMP_NE_D , 0,
20469 CP1_ }, /* CMP.NE.D */
20470 { reserved_block , 0 , 0 , 32,
20471 0xfc0007ff, 0xa0000515, 0 , 0,
20472 CP1_ }, /* CMP.condn.D~*(20) */
20473 { reserved_block , 0 , 0 , 32,
20474 0xfc0007ff, 0xa0000555, 0 , 0,
20475 CP1_ }, /* CMP.condn.D~*(21) */
20476 { reserved_block , 0 , 0 , 32,
20477 0xfc0007ff, 0xa0000595, 0 , 0,
20478 CP1_ }, /* CMP.condn.D~*(22) */
20479 { reserved_block , 0 , 0 , 32,
20480 0xfc0007ff, 0xa00005d5, 0 , 0,
20481 CP1_ }, /* CMP.condn.D~*(23) */
20482 { reserved_block , 0 , 0 , 32,
20483 0xfc0007ff, 0xa0000615, 0 , 0,
20484 CP1_ }, /* CMP.condn.D~*(24) */
20485 { instruction , 0 , 0 , 32,
20486 0xfc0007ff, 0xa0000655, &NMD::CMP_SOR_D , 0,
20487 CP1_ }, /* CMP.SOR.D */
20488 { instruction , 0 , 0 , 32,
20489 0xfc0007ff, 0xa0000695, &NMD::CMP_SUNE_D , 0,
20490 CP1_ }, /* CMP.SUNE.D */
20491 { instruction , 0 , 0 , 32,
20492 0xfc0007ff, 0xa00006d5, &NMD::CMP_SNE_D , 0,
20493 CP1_ }, /* CMP.SNE.D */
20494 { reserved_block , 0 , 0 , 32,
20495 0xfc0007ff, 0xa0000715, 0 , 0,
20496 CP1_ }, /* CMP.condn.D~*(28) */
20497 { reserved_block , 0 , 0 , 32,
20498 0xfc0007ff, 0xa0000755, 0 , 0,
20499 CP1_ }, /* CMP.condn.D~*(29) */
20500 { reserved_block , 0 , 0 , 32,
20501 0xfc0007ff, 0xa0000795, 0 , 0,
20502 CP1_ }, /* CMP.condn.D~*(30) */
20503 { reserved_block , 0 , 0 , 32,
20504 0xfc0007ff, 0xa00007d5, 0 , 0,
20505 CP1_ }, /* CMP.condn.D~*(31) */
20506 };
20507
20508
20509 NMD::Pool NMD::POOL32F_5[8] = {
20510 { pool , CMP_condn_S , 32 , 32,
20511 0xfc00003f, 0xa0000005, 0 , 0,
20512 CP1_ }, /* CMP.condn.S */
20513 { reserved_block , 0 , 0 , 32,
20514 0xfc00003f, 0xa000000d, 0 , 0,
20515 CP1_ }, /* POOL32F_5~*(1) */
20516 { pool , CMP_condn_D , 32 , 32,
20517 0xfc00003f, 0xa0000015, 0 , 0,
20518 CP1_ }, /* CMP.condn.D */
20519 { reserved_block , 0 , 0 , 32,
20520 0xfc00003f, 0xa000001d, 0 , 0,
20521 CP1_ }, /* POOL32F_5~*(3) */
20522 { reserved_block , 0 , 0 , 32,
20523 0xfc00003f, 0xa0000025, 0 , 0,
20524 CP1_ }, /* POOL32F_5~*(4) */
20525 { reserved_block , 0 , 0 , 32,
20526 0xfc00003f, 0xa000002d, 0 , 0,
20527 CP1_ }, /* POOL32F_5~*(5) */
20528 { reserved_block , 0 , 0 , 32,
20529 0xfc00003f, 0xa0000035, 0 , 0,
20530 CP1_ }, /* POOL32F_5~*(6) */
20531 { reserved_block , 0 , 0 , 32,
20532 0xfc00003f, 0xa000003d, 0 , 0,
20533 CP1_ }, /* POOL32F_5~*(7) */
20534 };
20535
20536
20537 NMD::Pool NMD::POOL32F[8] = {
20538 { pool , POOL32F_0 , 64 , 32,
20539 0xfc000007, 0xa0000000, 0 , 0,
20540 CP1_ }, /* POOL32F_0 */
20541 { reserved_block , 0 , 0 , 32,
20542 0xfc000007, 0xa0000001, 0 , 0,
20543 CP1_ }, /* POOL32F~*(1) */
20544 { reserved_block , 0 , 0 , 32,
20545 0xfc000007, 0xa0000002, 0 , 0,
20546 CP1_ }, /* POOL32F~*(2) */
20547 { pool , POOL32F_3 , 8 , 32,
20548 0xfc000007, 0xa0000003, 0 , 0,
20549 CP1_ }, /* POOL32F_3 */
20550 { reserved_block , 0 , 0 , 32,
20551 0xfc000007, 0xa0000004, 0 , 0,
20552 CP1_ }, /* POOL32F~*(4) */
20553 { pool , POOL32F_5 , 8 , 32,
20554 0xfc000007, 0xa0000005, 0 , 0,
20555 CP1_ }, /* POOL32F_5 */
20556 { reserved_block , 0 , 0 , 32,
20557 0xfc000007, 0xa0000006, 0 , 0,
20558 CP1_ }, /* POOL32F~*(6) */
20559 { reserved_block , 0 , 0 , 32,
20560 0xfc000007, 0xa0000007, 0 , 0,
20561 CP1_ }, /* POOL32F~*(7) */
20562 };
20563
20564
20565 NMD::Pool NMD::POOL32S_0[64] = {
20566 { reserved_block , 0 , 0 , 32,
20567 0xfc0001ff, 0xc0000000, 0 , 0,
20568 0x0 }, /* POOL32S_0~*(0) */
20569 { instruction , 0 , 0 , 32,
20570 0xfc0001ff, 0xc0000008, &NMD::DLSA , 0,
20571 MIPS64_ }, /* DLSA */
20572 { instruction , 0 , 0 , 32,
20573 0xfc0001ff, 0xc0000010, &NMD::DSLLV , 0,
20574 MIPS64_ }, /* DSLLV */
20575 { instruction , 0 , 0 , 32,
20576 0xfc0001ff, 0xc0000018, &NMD::DMUL , 0,
20577 MIPS64_ }, /* DMUL */
20578 { reserved_block , 0 , 0 , 32,
20579 0xfc0001ff, 0xc0000020, 0 , 0,
20580 0x0 }, /* POOL32S_0~*(4) */
20581 { reserved_block , 0 , 0 , 32,
20582 0xfc0001ff, 0xc0000028, 0 , 0,
20583 0x0 }, /* POOL32S_0~*(5) */
20584 { reserved_block , 0 , 0 , 32,
20585 0xfc0001ff, 0xc0000030, 0 , 0,
20586 0x0 }, /* POOL32S_0~*(6) */
20587 { reserved_block , 0 , 0 , 32,
20588 0xfc0001ff, 0xc0000038, 0 , 0,
20589 0x0 }, /* POOL32S_0~*(7) */
20590 { reserved_block , 0 , 0 , 32,
20591 0xfc0001ff, 0xc0000040, 0 , 0,
20592 0x0 }, /* POOL32S_0~*(8) */
20593 { reserved_block , 0 , 0 , 32,
20594 0xfc0001ff, 0xc0000048, 0 , 0,
20595 0x0 }, /* POOL32S_0~*(9) */
20596 { instruction , 0 , 0 , 32,
20597 0xfc0001ff, 0xc0000050, &NMD::DSRLV , 0,
20598 MIPS64_ }, /* DSRLV */
20599 { instruction , 0 , 0 , 32,
20600 0xfc0001ff, 0xc0000058, &NMD::DMUH , 0,
20601 MIPS64_ }, /* DMUH */
20602 { reserved_block , 0 , 0 , 32,
20603 0xfc0001ff, 0xc0000060, 0 , 0,
20604 0x0 }, /* POOL32S_0~*(12) */
20605 { reserved_block , 0 , 0 , 32,
20606 0xfc0001ff, 0xc0000068, 0 , 0,
20607 0x0 }, /* POOL32S_0~*(13) */
20608 { reserved_block , 0 , 0 , 32,
20609 0xfc0001ff, 0xc0000070, 0 , 0,
20610 0x0 }, /* POOL32S_0~*(14) */
20611 { reserved_block , 0 , 0 , 32,
20612 0xfc0001ff, 0xc0000078, 0 , 0,
20613 0x0 }, /* POOL32S_0~*(15) */
20614 { reserved_block , 0 , 0 , 32,
20615 0xfc0001ff, 0xc0000080, 0 , 0,
20616 0x0 }, /* POOL32S_0~*(16) */
20617 { reserved_block , 0 , 0 , 32,
20618 0xfc0001ff, 0xc0000088, 0 , 0,
20619 0x0 }, /* POOL32S_0~*(17) */
20620 { instruction , 0 , 0 , 32,
20621 0xfc0001ff, 0xc0000090, &NMD::DSRAV , 0,
20622 MIPS64_ }, /* DSRAV */
20623 { instruction , 0 , 0 , 32,
20624 0xfc0001ff, 0xc0000098, &NMD::DMULU , 0,
20625 MIPS64_ }, /* DMULU */
20626 { reserved_block , 0 , 0 , 32,
20627 0xfc0001ff, 0xc00000a0, 0 , 0,
20628 0x0 }, /* POOL32S_0~*(20) */
20629 { reserved_block , 0 , 0 , 32,
20630 0xfc0001ff, 0xc00000a8, 0 , 0,
20631 0x0 }, /* POOL32S_0~*(21) */
20632 { reserved_block , 0 , 0 , 32,
20633 0xfc0001ff, 0xc00000b0, 0 , 0,
20634 0x0 }, /* POOL32S_0~*(22) */
20635 { reserved_block , 0 , 0 , 32,
20636 0xfc0001ff, 0xc00000b8, 0 , 0,
20637 0x0 }, /* POOL32S_0~*(23) */
20638 { reserved_block , 0 , 0 , 32,
20639 0xfc0001ff, 0xc00000c0, 0 , 0,
20640 0x0 }, /* POOL32S_0~*(24) */
20641 { reserved_block , 0 , 0 , 32,
20642 0xfc0001ff, 0xc00000c8, 0 , 0,
20643 0x0 }, /* POOL32S_0~*(25) */
20644 { instruction , 0 , 0 , 32,
20645 0xfc0001ff, 0xc00000d0, &NMD::DROTRV , 0,
20646 MIPS64_ }, /* DROTRV */
20647 { instruction , 0 , 0 , 32,
20648 0xfc0001ff, 0xc00000d8, &NMD::DMUHU , 0,
20649 MIPS64_ }, /* DMUHU */
20650 { reserved_block , 0 , 0 , 32,
20651 0xfc0001ff, 0xc00000e0, 0 , 0,
20652 0x0 }, /* POOL32S_0~*(28) */
20653 { reserved_block , 0 , 0 , 32,
20654 0xfc0001ff, 0xc00000e8, 0 , 0,
20655 0x0 }, /* POOL32S_0~*(29) */
20656 { reserved_block , 0 , 0 , 32,
20657 0xfc0001ff, 0xc00000f0, 0 , 0,
20658 0x0 }, /* POOL32S_0~*(30) */
20659 { reserved_block , 0 , 0 , 32,
20660 0xfc0001ff, 0xc00000f8, 0 , 0,
20661 0x0 }, /* POOL32S_0~*(31) */
20662 { reserved_block , 0 , 0 , 32,
20663 0xfc0001ff, 0xc0000100, 0 , 0,
20664 0x0 }, /* POOL32S_0~*(32) */
20665 { reserved_block , 0 , 0 , 32,
20666 0xfc0001ff, 0xc0000108, 0 , 0,
20667 0x0 }, /* POOL32S_0~*(33) */
20668 { instruction , 0 , 0 , 32,
20669 0xfc0001ff, 0xc0000110, &NMD::DADD , 0,
20670 MIPS64_ }, /* DADD */
20671 { instruction , 0 , 0 , 32,
20672 0xfc0001ff, 0xc0000118, &NMD::DDIV , 0,
20673 MIPS64_ }, /* DDIV */
20674 { reserved_block , 0 , 0 , 32,
20675 0xfc0001ff, 0xc0000120, 0 , 0,
20676 0x0 }, /* POOL32S_0~*(36) */
20677 { reserved_block , 0 , 0 , 32,
20678 0xfc0001ff, 0xc0000128, 0 , 0,
20679 0x0 }, /* POOL32S_0~*(37) */
20680 { reserved_block , 0 , 0 , 32,
20681 0xfc0001ff, 0xc0000130, 0 , 0,
20682 0x0 }, /* POOL32S_0~*(38) */
20683 { reserved_block , 0 , 0 , 32,
20684 0xfc0001ff, 0xc0000138, 0 , 0,
20685 0x0 }, /* POOL32S_0~*(39) */
20686 { reserved_block , 0 , 0 , 32,
20687 0xfc0001ff, 0xc0000140, 0 , 0,
20688 0x0 }, /* POOL32S_0~*(40) */
20689 { reserved_block , 0 , 0 , 32,
20690 0xfc0001ff, 0xc0000148, 0 , 0,
20691 0x0 }, /* POOL32S_0~*(41) */
20692 { instruction , 0 , 0 , 32,
20693 0xfc0001ff, 0xc0000150, &NMD::DADDU , 0,
20694 MIPS64_ }, /* DADDU */
20695 { instruction , 0 , 0 , 32,
20696 0xfc0001ff, 0xc0000158, &NMD::DMOD , 0,
20697 MIPS64_ }, /* DMOD */
20698 { reserved_block , 0 , 0 , 32,
20699 0xfc0001ff, 0xc0000160, 0 , 0,
20700 0x0 }, /* POOL32S_0~*(44) */
20701 { reserved_block , 0 , 0 , 32,
20702 0xfc0001ff, 0xc0000168, 0 , 0,
20703 0x0 }, /* POOL32S_0~*(45) */
20704 { reserved_block , 0 , 0 , 32,
20705 0xfc0001ff, 0xc0000170, 0 , 0,
20706 0x0 }, /* POOL32S_0~*(46) */
20707 { reserved_block , 0 , 0 , 32,
20708 0xfc0001ff, 0xc0000178, 0 , 0,
20709 0x0 }, /* POOL32S_0~*(47) */
20710 { reserved_block , 0 , 0 , 32,
20711 0xfc0001ff, 0xc0000180, 0 , 0,
20712 0x0 }, /* POOL32S_0~*(48) */
20713 { reserved_block , 0 , 0 , 32,
20714 0xfc0001ff, 0xc0000188, 0 , 0,
20715 0x0 }, /* POOL32S_0~*(49) */
20716 { instruction , 0 , 0 , 32,
20717 0xfc0001ff, 0xc0000190, &NMD::DSUB , 0,
20718 MIPS64_ }, /* DSUB */
20719 { instruction , 0 , 0 , 32,
20720 0xfc0001ff, 0xc0000198, &NMD::DDIVU , 0,
20721 MIPS64_ }, /* DDIVU */
20722 { reserved_block , 0 , 0 , 32,
20723 0xfc0001ff, 0xc00001a0, 0 , 0,
20724 0x0 }, /* POOL32S_0~*(52) */
20725 { reserved_block , 0 , 0 , 32,
20726 0xfc0001ff, 0xc00001a8, 0 , 0,
20727 0x0 }, /* POOL32S_0~*(53) */
20728 { reserved_block , 0 , 0 , 32,
20729 0xfc0001ff, 0xc00001b0, 0 , 0,
20730 0x0 }, /* POOL32S_0~*(54) */
20731 { reserved_block , 0 , 0 , 32,
20732 0xfc0001ff, 0xc00001b8, 0 , 0,
20733 0x0 }, /* POOL32S_0~*(55) */
20734 { reserved_block , 0 , 0 , 32,
20735 0xfc0001ff, 0xc00001c0, 0 , 0,
20736 0x0 }, /* POOL32S_0~*(56) */
20737 { reserved_block , 0 , 0 , 32,
20738 0xfc0001ff, 0xc00001c8, 0 , 0,
20739 0x0 }, /* POOL32S_0~*(57) */
20740 { instruction , 0 , 0 , 32,
20741 0xfc0001ff, 0xc00001d0, &NMD::DSUBU , 0,
20742 MIPS64_ }, /* DSUBU */
20743 { instruction , 0 , 0 , 32,
20744 0xfc0001ff, 0xc00001d8, &NMD::DMODU , 0,
20745 MIPS64_ }, /* DMODU */
20746 { reserved_block , 0 , 0 , 32,
20747 0xfc0001ff, 0xc00001e0, 0 , 0,
20748 0x0 }, /* POOL32S_0~*(60) */
20749 { reserved_block , 0 , 0 , 32,
20750 0xfc0001ff, 0xc00001e8, 0 , 0,
20751 0x0 }, /* POOL32S_0~*(61) */
20752 { reserved_block , 0 , 0 , 32,
20753 0xfc0001ff, 0xc00001f0, 0 , 0,
20754 0x0 }, /* POOL32S_0~*(62) */
20755 { reserved_block , 0 , 0 , 32,
20756 0xfc0001ff, 0xc00001f8, 0 , 0,
20757 0x0 }, /* POOL32S_0~*(63) */
20758 };
20759
20760
20761 NMD::Pool NMD::POOL32Sxf_4[128] = {
20762 { reserved_block , 0 , 0 , 32,
20763 0xfc00ffff, 0xc000013c, 0 , 0,
20764 0x0 }, /* POOL32Sxf_4~*(0) */
20765 { reserved_block , 0 , 0 , 32,
20766 0xfc00ffff, 0xc000033c, 0 , 0,
20767 0x0 }, /* POOL32Sxf_4~*(1) */
20768 { reserved_block , 0 , 0 , 32,
20769 0xfc00ffff, 0xc000053c, 0 , 0,
20770 0x0 }, /* POOL32Sxf_4~*(2) */
20771 { reserved_block , 0 , 0 , 32,
20772 0xfc00ffff, 0xc000073c, 0 , 0,
20773 0x0 }, /* POOL32Sxf_4~*(3) */
20774 { reserved_block , 0 , 0 , 32,
20775 0xfc00ffff, 0xc000093c, 0 , 0,
20776 0x0 }, /* POOL32Sxf_4~*(4) */
20777 { reserved_block , 0 , 0 , 32,
20778 0xfc00ffff, 0xc0000b3c, 0 , 0,
20779 0x0 }, /* POOL32Sxf_4~*(5) */
20780 { reserved_block , 0 , 0 , 32,
20781 0xfc00ffff, 0xc0000d3c, 0 , 0,
20782 0x0 }, /* POOL32Sxf_4~*(6) */
20783 { reserved_block , 0 , 0 , 32,
20784 0xfc00ffff, 0xc0000f3c, 0 , 0,
20785 0x0 }, /* POOL32Sxf_4~*(7) */
20786 { reserved_block , 0 , 0 , 32,
20787 0xfc00ffff, 0xc000113c, 0 , 0,
20788 0x0 }, /* POOL32Sxf_4~*(8) */
20789 { reserved_block , 0 , 0 , 32,
20790 0xfc00ffff, 0xc000133c, 0 , 0,
20791 0x0 }, /* POOL32Sxf_4~*(9) */
20792 { reserved_block , 0 , 0 , 32,
20793 0xfc00ffff, 0xc000153c, 0 , 0,
20794 0x0 }, /* POOL32Sxf_4~*(10) */
20795 { reserved_block , 0 , 0 , 32,
20796 0xfc00ffff, 0xc000173c, 0 , 0,
20797 0x0 }, /* POOL32Sxf_4~*(11) */
20798 { reserved_block , 0 , 0 , 32,
20799 0xfc00ffff, 0xc000193c, 0 , 0,
20800 0x0 }, /* POOL32Sxf_4~*(12) */
20801 { reserved_block , 0 , 0 , 32,
20802 0xfc00ffff, 0xc0001b3c, 0 , 0,
20803 0x0 }, /* POOL32Sxf_4~*(13) */
20804 { reserved_block , 0 , 0 , 32,
20805 0xfc00ffff, 0xc0001d3c, 0 , 0,
20806 0x0 }, /* POOL32Sxf_4~*(14) */
20807 { reserved_block , 0 , 0 , 32,
20808 0xfc00ffff, 0xc0001f3c, 0 , 0,
20809 0x0 }, /* POOL32Sxf_4~*(15) */
20810 { reserved_block , 0 , 0 , 32,
20811 0xfc00ffff, 0xc000213c, 0 , 0,
20812 0x0 }, /* POOL32Sxf_4~*(16) */
20813 { reserved_block , 0 , 0 , 32,
20814 0xfc00ffff, 0xc000233c, 0 , 0,
20815 0x0 }, /* POOL32Sxf_4~*(17) */
20816 { reserved_block , 0 , 0 , 32,
20817 0xfc00ffff, 0xc000253c, 0 , 0,
20818 0x0 }, /* POOL32Sxf_4~*(18) */
20819 { reserved_block , 0 , 0 , 32,
20820 0xfc00ffff, 0xc000273c, 0 , 0,
20821 0x0 }, /* POOL32Sxf_4~*(19) */
20822 { reserved_block , 0 , 0 , 32,
20823 0xfc00ffff, 0xc000293c, 0 , 0,
20824 0x0 }, /* POOL32Sxf_4~*(20) */
20825 { reserved_block , 0 , 0 , 32,
20826 0xfc00ffff, 0xc0002b3c, 0 , 0,
20827 0x0 }, /* POOL32Sxf_4~*(21) */
20828 { reserved_block , 0 , 0 , 32,
20829 0xfc00ffff, 0xc0002d3c, 0 , 0,
20830 0x0 }, /* POOL32Sxf_4~*(22) */
20831 { reserved_block , 0 , 0 , 32,
20832 0xfc00ffff, 0xc0002f3c, 0 , 0,
20833 0x0 }, /* POOL32Sxf_4~*(23) */
20834 { reserved_block , 0 , 0 , 32,
20835 0xfc00ffff, 0xc000313c, 0 , 0,
20836 0x0 }, /* POOL32Sxf_4~*(24) */
20837 { reserved_block , 0 , 0 , 32,
20838 0xfc00ffff, 0xc000333c, 0 , 0,
20839 0x0 }, /* POOL32Sxf_4~*(25) */
20840 { reserved_block , 0 , 0 , 32,
20841 0xfc00ffff, 0xc000353c, 0 , 0,
20842 0x0 }, /* POOL32Sxf_4~*(26) */
20843 { reserved_block , 0 , 0 , 32,
20844 0xfc00ffff, 0xc000373c, 0 , 0,
20845 0x0 }, /* POOL32Sxf_4~*(27) */
20846 { reserved_block , 0 , 0 , 32,
20847 0xfc00ffff, 0xc000393c, 0 , 0,
20848 0x0 }, /* POOL32Sxf_4~*(28) */
20849 { reserved_block , 0 , 0 , 32,
20850 0xfc00ffff, 0xc0003b3c, 0 , 0,
20851 0x0 }, /* POOL32Sxf_4~*(29) */
20852 { reserved_block , 0 , 0 , 32,
20853 0xfc00ffff, 0xc0003d3c, 0 , 0,
20854 0x0 }, /* POOL32Sxf_4~*(30) */
20855 { reserved_block , 0 , 0 , 32,
20856 0xfc00ffff, 0xc0003f3c, 0 , 0,
20857 0x0 }, /* POOL32Sxf_4~*(31) */
20858 { reserved_block , 0 , 0 , 32,
20859 0xfc00ffff, 0xc000413c, 0 , 0,
20860 0x0 }, /* POOL32Sxf_4~*(32) */
20861 { reserved_block , 0 , 0 , 32,
20862 0xfc00ffff, 0xc000433c, 0 , 0,
20863 0x0 }, /* POOL32Sxf_4~*(33) */
20864 { reserved_block , 0 , 0 , 32,
20865 0xfc00ffff, 0xc000453c, 0 , 0,
20866 0x0 }, /* POOL32Sxf_4~*(34) */
20867 { reserved_block , 0 , 0 , 32,
20868 0xfc00ffff, 0xc000473c, 0 , 0,
20869 0x0 }, /* POOL32Sxf_4~*(35) */
20870 { reserved_block , 0 , 0 , 32,
20871 0xfc00ffff, 0xc000493c, 0 , 0,
20872 0x0 }, /* POOL32Sxf_4~*(36) */
20873 { instruction , 0 , 0 , 32,
20874 0xfc00ffff, 0xc0004b3c, &NMD::DCLO , 0,
20875 MIPS64_ }, /* DCLO */
20876 { reserved_block , 0 , 0 , 32,
20877 0xfc00ffff, 0xc0004d3c, 0 , 0,
20878 0x0 }, /* POOL32Sxf_4~*(38) */
20879 { reserved_block , 0 , 0 , 32,
20880 0xfc00ffff, 0xc0004f3c, 0 , 0,
20881 0x0 }, /* POOL32Sxf_4~*(39) */
20882 { reserved_block , 0 , 0 , 32,
20883 0xfc00ffff, 0xc000513c, 0 , 0,
20884 0x0 }, /* POOL32Sxf_4~*(40) */
20885 { reserved_block , 0 , 0 , 32,
20886 0xfc00ffff, 0xc000533c, 0 , 0,
20887 0x0 }, /* POOL32Sxf_4~*(41) */
20888 { reserved_block , 0 , 0 , 32,
20889 0xfc00ffff, 0xc000553c, 0 , 0,
20890 0x0 }, /* POOL32Sxf_4~*(42) */
20891 { reserved_block , 0 , 0 , 32,
20892 0xfc00ffff, 0xc000573c, 0 , 0,
20893 0x0 }, /* POOL32Sxf_4~*(43) */
20894 { reserved_block , 0 , 0 , 32,
20895 0xfc00ffff, 0xc000593c, 0 , 0,
20896 0x0 }, /* POOL32Sxf_4~*(44) */
20897 { instruction , 0 , 0 , 32,
20898 0xfc00ffff, 0xc0005b3c, &NMD::DCLZ , 0,
20899 MIPS64_ }, /* DCLZ */
20900 { reserved_block , 0 , 0 , 32,
20901 0xfc00ffff, 0xc0005d3c, 0 , 0,
20902 0x0 }, /* POOL32Sxf_4~*(46) */
20903 { reserved_block , 0 , 0 , 32,
20904 0xfc00ffff, 0xc0005f3c, 0 , 0,
20905 0x0 }, /* POOL32Sxf_4~*(47) */
20906 { reserved_block , 0 , 0 , 32,
20907 0xfc00ffff, 0xc000613c, 0 , 0,
20908 0x0 }, /* POOL32Sxf_4~*(48) */
20909 { reserved_block , 0 , 0 , 32,
20910 0xfc00ffff, 0xc000633c, 0 , 0,
20911 0x0 }, /* POOL32Sxf_4~*(49) */
20912 { reserved_block , 0 , 0 , 32,
20913 0xfc00ffff, 0xc000653c, 0 , 0,
20914 0x0 }, /* POOL32Sxf_4~*(50) */
20915 { reserved_block , 0 , 0 , 32,
20916 0xfc00ffff, 0xc000673c, 0 , 0,
20917 0x0 }, /* POOL32Sxf_4~*(51) */
20918 { reserved_block , 0 , 0 , 32,
20919 0xfc00ffff, 0xc000693c, 0 , 0,
20920 0x0 }, /* POOL32Sxf_4~*(52) */
20921 { reserved_block , 0 , 0 , 32,
20922 0xfc00ffff, 0xc0006b3c, 0 , 0,
20923 0x0 }, /* POOL32Sxf_4~*(53) */
20924 { reserved_block , 0 , 0 , 32,
20925 0xfc00ffff, 0xc0006d3c, 0 , 0,
20926 0x0 }, /* POOL32Sxf_4~*(54) */
20927 { reserved_block , 0 , 0 , 32,
20928 0xfc00ffff, 0xc0006f3c, 0 , 0,
20929 0x0 }, /* POOL32Sxf_4~*(55) */
20930 { reserved_block , 0 , 0 , 32,
20931 0xfc00ffff, 0xc000713c, 0 , 0,
20932 0x0 }, /* POOL32Sxf_4~*(56) */
20933 { reserved_block , 0 , 0 , 32,
20934 0xfc00ffff, 0xc000733c, 0 , 0,
20935 0x0 }, /* POOL32Sxf_4~*(57) */
20936 { reserved_block , 0 , 0 , 32,
20937 0xfc00ffff, 0xc000753c, 0 , 0,
20938 0x0 }, /* POOL32Sxf_4~*(58) */
20939 { reserved_block , 0 , 0 , 32,
20940 0xfc00ffff, 0xc000773c, 0 , 0,
20941 0x0 }, /* POOL32Sxf_4~*(59) */
20942 { reserved_block , 0 , 0 , 32,
20943 0xfc00ffff, 0xc000793c, 0 , 0,
20944 0x0 }, /* POOL32Sxf_4~*(60) */
20945 { reserved_block , 0 , 0 , 32,
20946 0xfc00ffff, 0xc0007b3c, 0 , 0,
20947 0x0 }, /* POOL32Sxf_4~*(61) */
20948 { reserved_block , 0 , 0 , 32,
20949 0xfc00ffff, 0xc0007d3c, 0 , 0,
20950 0x0 }, /* POOL32Sxf_4~*(62) */
20951 { reserved_block , 0 , 0 , 32,
20952 0xfc00ffff, 0xc0007f3c, 0 , 0,
20953 0x0 }, /* POOL32Sxf_4~*(63) */
20954 { reserved_block , 0 , 0 , 32,
20955 0xfc00ffff, 0xc000813c, 0 , 0,
20956 0x0 }, /* POOL32Sxf_4~*(64) */
20957 { reserved_block , 0 , 0 , 32,
20958 0xfc00ffff, 0xc000833c, 0 , 0,
20959 0x0 }, /* POOL32Sxf_4~*(65) */
20960 { reserved_block , 0 , 0 , 32,
20961 0xfc00ffff, 0xc000853c, 0 , 0,
20962 0x0 }, /* POOL32Sxf_4~*(66) */
20963 { reserved_block , 0 , 0 , 32,
20964 0xfc00ffff, 0xc000873c, 0 , 0,
20965 0x0 }, /* POOL32Sxf_4~*(67) */
20966 { reserved_block , 0 , 0 , 32,
20967 0xfc00ffff, 0xc000893c, 0 , 0,
20968 0x0 }, /* POOL32Sxf_4~*(68) */
20969 { reserved_block , 0 , 0 , 32,
20970 0xfc00ffff, 0xc0008b3c, 0 , 0,
20971 0x0 }, /* POOL32Sxf_4~*(69) */
20972 { reserved_block , 0 , 0 , 32,
20973 0xfc00ffff, 0xc0008d3c, 0 , 0,
20974 0x0 }, /* POOL32Sxf_4~*(70) */
20975 { reserved_block , 0 , 0 , 32,
20976 0xfc00ffff, 0xc0008f3c, 0 , 0,
20977 0x0 }, /* POOL32Sxf_4~*(71) */
20978 { reserved_block , 0 , 0 , 32,
20979 0xfc00ffff, 0xc000913c, 0 , 0,
20980 0x0 }, /* POOL32Sxf_4~*(72) */
20981 { reserved_block , 0 , 0 , 32,
20982 0xfc00ffff, 0xc000933c, 0 , 0,
20983 0x0 }, /* POOL32Sxf_4~*(73) */
20984 { reserved_block , 0 , 0 , 32,
20985 0xfc00ffff, 0xc000953c, 0 , 0,
20986 0x0 }, /* POOL32Sxf_4~*(74) */
20987 { reserved_block , 0 , 0 , 32,
20988 0xfc00ffff, 0xc000973c, 0 , 0,
20989 0x0 }, /* POOL32Sxf_4~*(75) */
20990 { reserved_block , 0 , 0 , 32,
20991 0xfc00ffff, 0xc000993c, 0 , 0,
20992 0x0 }, /* POOL32Sxf_4~*(76) */
20993 { reserved_block , 0 , 0 , 32,
20994 0xfc00ffff, 0xc0009b3c, 0 , 0,
20995 0x0 }, /* POOL32Sxf_4~*(77) */
20996 { reserved_block , 0 , 0 , 32,
20997 0xfc00ffff, 0xc0009d3c, 0 , 0,
20998 0x0 }, /* POOL32Sxf_4~*(78) */
20999 { reserved_block , 0 , 0 , 32,
21000 0xfc00ffff, 0xc0009f3c, 0 , 0,
21001 0x0 }, /* POOL32Sxf_4~*(79) */
21002 { reserved_block , 0 , 0 , 32,
21003 0xfc00ffff, 0xc000a13c, 0 , 0,
21004 0x0 }, /* POOL32Sxf_4~*(80) */
21005 { reserved_block , 0 , 0 , 32,
21006 0xfc00ffff, 0xc000a33c, 0 , 0,
21007 0x0 }, /* POOL32Sxf_4~*(81) */
21008 { reserved_block , 0 , 0 , 32,
21009 0xfc00ffff, 0xc000a53c, 0 , 0,
21010 0x0 }, /* POOL32Sxf_4~*(82) */
21011 { reserved_block , 0 , 0 , 32,
21012 0xfc00ffff, 0xc000a73c, 0 , 0,
21013 0x0 }, /* POOL32Sxf_4~*(83) */
21014 { reserved_block , 0 , 0 , 32,
21015 0xfc00ffff, 0xc000a93c, 0 , 0,
21016 0x0 }, /* POOL32Sxf_4~*(84) */
21017 { reserved_block , 0 , 0 , 32,
21018 0xfc00ffff, 0xc000ab3c, 0 , 0,
21019 0x0 }, /* POOL32Sxf_4~*(85) */
21020 { reserved_block , 0 , 0 , 32,
21021 0xfc00ffff, 0xc000ad3c, 0 , 0,
21022 0x0 }, /* POOL32Sxf_4~*(86) */
21023 { reserved_block , 0 , 0 , 32,
21024 0xfc00ffff, 0xc000af3c, 0 , 0,
21025 0x0 }, /* POOL32Sxf_4~*(87) */
21026 { reserved_block , 0 , 0 , 32,
21027 0xfc00ffff, 0xc000b13c, 0 , 0,
21028 0x0 }, /* POOL32Sxf_4~*(88) */
21029 { reserved_block , 0 , 0 , 32,
21030 0xfc00ffff, 0xc000b33c, 0 , 0,
21031 0x0 }, /* POOL32Sxf_4~*(89) */
21032 { reserved_block , 0 , 0 , 32,
21033 0xfc00ffff, 0xc000b53c, 0 , 0,
21034 0x0 }, /* POOL32Sxf_4~*(90) */
21035 { reserved_block , 0 , 0 , 32,
21036 0xfc00ffff, 0xc000b73c, 0 , 0,
21037 0x0 }, /* POOL32Sxf_4~*(91) */
21038 { reserved_block , 0 , 0 , 32,
21039 0xfc00ffff, 0xc000b93c, 0 , 0,
21040 0x0 }, /* POOL32Sxf_4~*(92) */
21041 { reserved_block , 0 , 0 , 32,
21042 0xfc00ffff, 0xc000bb3c, 0 , 0,
21043 0x0 }, /* POOL32Sxf_4~*(93) */
21044 { reserved_block , 0 , 0 , 32,
21045 0xfc00ffff, 0xc000bd3c, 0 , 0,
21046 0x0 }, /* POOL32Sxf_4~*(94) */
21047 { reserved_block , 0 , 0 , 32,
21048 0xfc00ffff, 0xc000bf3c, 0 , 0,
21049 0x0 }, /* POOL32Sxf_4~*(95) */
21050 { reserved_block , 0 , 0 , 32,
21051 0xfc00ffff, 0xc000c13c, 0 , 0,
21052 0x0 }, /* POOL32Sxf_4~*(96) */
21053 { reserved_block , 0 , 0 , 32,
21054 0xfc00ffff, 0xc000c33c, 0 , 0,
21055 0x0 }, /* POOL32Sxf_4~*(97) */
21056 { reserved_block , 0 , 0 , 32,
21057 0xfc00ffff, 0xc000c53c, 0 , 0,
21058 0x0 }, /* POOL32Sxf_4~*(98) */
21059 { reserved_block , 0 , 0 , 32,
21060 0xfc00ffff, 0xc000c73c, 0 , 0,
21061 0x0 }, /* POOL32Sxf_4~*(99) */
21062 { reserved_block , 0 , 0 , 32,
21063 0xfc00ffff, 0xc000c93c, 0 , 0,
21064 0x0 }, /* POOL32Sxf_4~*(100) */
21065 { reserved_block , 0 , 0 , 32,
21066 0xfc00ffff, 0xc000cb3c, 0 , 0,
21067 0x0 }, /* POOL32Sxf_4~*(101) */
21068 { reserved_block , 0 , 0 , 32,
21069 0xfc00ffff, 0xc000cd3c, 0 , 0,
21070 0x0 }, /* POOL32Sxf_4~*(102) */
21071 { reserved_block , 0 , 0 , 32,
21072 0xfc00ffff, 0xc000cf3c, 0 , 0,
21073 0x0 }, /* POOL32Sxf_4~*(103) */
21074 { reserved_block , 0 , 0 , 32,
21075 0xfc00ffff, 0xc000d13c, 0 , 0,
21076 0x0 }, /* POOL32Sxf_4~*(104) */
21077 { reserved_block , 0 , 0 , 32,
21078 0xfc00ffff, 0xc000d33c, 0 , 0,
21079 0x0 }, /* POOL32Sxf_4~*(105) */
21080 { reserved_block , 0 , 0 , 32,
21081 0xfc00ffff, 0xc000d53c, 0 , 0,
21082 0x0 }, /* POOL32Sxf_4~*(106) */
21083 { reserved_block , 0 , 0 , 32,
21084 0xfc00ffff, 0xc000d73c, 0 , 0,
21085 0x0 }, /* POOL32Sxf_4~*(107) */
21086 { reserved_block , 0 , 0 , 32,
21087 0xfc00ffff, 0xc000d93c, 0 , 0,
21088 0x0 }, /* POOL32Sxf_4~*(108) */
21089 { reserved_block , 0 , 0 , 32,
21090 0xfc00ffff, 0xc000db3c, 0 , 0,
21091 0x0 }, /* POOL32Sxf_4~*(109) */
21092 { reserved_block , 0 , 0 , 32,
21093 0xfc00ffff, 0xc000dd3c, 0 , 0,
21094 0x0 }, /* POOL32Sxf_4~*(110) */
21095 { reserved_block , 0 , 0 , 32,
21096 0xfc00ffff, 0xc000df3c, 0 , 0,
21097 0x0 }, /* POOL32Sxf_4~*(111) */
21098 { reserved_block , 0 , 0 , 32,
21099 0xfc00ffff, 0xc000e13c, 0 , 0,
21100 0x0 }, /* POOL32Sxf_4~*(112) */
21101 { reserved_block , 0 , 0 , 32,
21102 0xfc00ffff, 0xc000e33c, 0 , 0,
21103 0x0 }, /* POOL32Sxf_4~*(113) */
21104 { reserved_block , 0 , 0 , 32,
21105 0xfc00ffff, 0xc000e53c, 0 , 0,
21106 0x0 }, /* POOL32Sxf_4~*(114) */
21107 { reserved_block , 0 , 0 , 32,
21108 0xfc00ffff, 0xc000e73c, 0 , 0,
21109 0x0 }, /* POOL32Sxf_4~*(115) */
21110 { reserved_block , 0 , 0 , 32,
21111 0xfc00ffff, 0xc000e93c, 0 , 0,
21112 0x0 }, /* POOL32Sxf_4~*(116) */
21113 { reserved_block , 0 , 0 , 32,
21114 0xfc00ffff, 0xc000eb3c, 0 , 0,
21115 0x0 }, /* POOL32Sxf_4~*(117) */
21116 { reserved_block , 0 , 0 , 32,
21117 0xfc00ffff, 0xc000ed3c, 0 , 0,
21118 0x0 }, /* POOL32Sxf_4~*(118) */
21119 { reserved_block , 0 , 0 , 32,
21120 0xfc00ffff, 0xc000ef3c, 0 , 0,
21121 0x0 }, /* POOL32Sxf_4~*(119) */
21122 { reserved_block , 0 , 0 , 32,
21123 0xfc00ffff, 0xc000f13c, 0 , 0,
21124 0x0 }, /* POOL32Sxf_4~*(120) */
21125 { reserved_block , 0 , 0 , 32,
21126 0xfc00ffff, 0xc000f33c, 0 , 0,
21127 0x0 }, /* POOL32Sxf_4~*(121) */
21128 { reserved_block , 0 , 0 , 32,
21129 0xfc00ffff, 0xc000f53c, 0 , 0,
21130 0x0 }, /* POOL32Sxf_4~*(122) */
21131 { reserved_block , 0 , 0 , 32,
21132 0xfc00ffff, 0xc000f73c, 0 , 0,
21133 0x0 }, /* POOL32Sxf_4~*(123) */
21134 { reserved_block , 0 , 0 , 32,
21135 0xfc00ffff, 0xc000f93c, 0 , 0,
21136 0x0 }, /* POOL32Sxf_4~*(124) */
21137 { reserved_block , 0 , 0 , 32,
21138 0xfc00ffff, 0xc000fb3c, 0 , 0,
21139 0x0 }, /* POOL32Sxf_4~*(125) */
21140 { reserved_block , 0 , 0 , 32,
21141 0xfc00ffff, 0xc000fd3c, 0 , 0,
21142 0x0 }, /* POOL32Sxf_4~*(126) */
21143 { reserved_block , 0 , 0 , 32,
21144 0xfc00ffff, 0xc000ff3c, 0 , 0,
21145 0x0 }, /* POOL32Sxf_4~*(127) */
21146 };
21147
21148
21149 NMD::Pool NMD::POOL32Sxf[8] = {
21150 { reserved_block , 0 , 0 , 32,
21151 0xfc0001ff, 0xc000003c, 0 , 0,
21152 0x0 }, /* POOL32Sxf~*(0) */
21153 { reserved_block , 0 , 0 , 32,
21154 0xfc0001ff, 0xc000007c, 0 , 0,
21155 0x0 }, /* POOL32Sxf~*(1) */
21156 { reserved_block , 0 , 0 , 32,
21157 0xfc0001ff, 0xc00000bc, 0 , 0,
21158 0x0 }, /* POOL32Sxf~*(2) */
21159 { reserved_block , 0 , 0 , 32,
21160 0xfc0001ff, 0xc00000fc, 0 , 0,
21161 0x0 }, /* POOL32Sxf~*(3) */
21162 { pool , POOL32Sxf_4 , 128 , 32,
21163 0xfc0001ff, 0xc000013c, 0 , 0,
21164 0x0 }, /* POOL32Sxf_4 */
21165 { reserved_block , 0 , 0 , 32,
21166 0xfc0001ff, 0xc000017c, 0 , 0,
21167 0x0 }, /* POOL32Sxf~*(5) */
21168 { reserved_block , 0 , 0 , 32,
21169 0xfc0001ff, 0xc00001bc, 0 , 0,
21170 0x0 }, /* POOL32Sxf~*(6) */
21171 { reserved_block , 0 , 0 , 32,
21172 0xfc0001ff, 0xc00001fc, 0 , 0,
21173 0x0 }, /* POOL32Sxf~*(7) */
21174 };
21175
21176
21177 NMD::Pool NMD::POOL32S_4[8] = {
21178 { instruction , 0 , 0 , 32,
21179 0xfc00003f, 0xc0000004, &NMD::EXTD , 0,
21180 MIPS64_ }, /* EXTD */
21181 { instruction , 0 , 0 , 32,
21182 0xfc00003f, 0xc000000c, &NMD::EXTD32 , 0,
21183 MIPS64_ }, /* EXTD32 */
21184 { reserved_block , 0 , 0 , 32,
21185 0xfc00003f, 0xc0000014, 0 , 0,
21186 0x0 }, /* POOL32S_4~*(2) */
21187 { reserved_block , 0 , 0 , 32,
21188 0xfc00003f, 0xc000001c, 0 , 0,
21189 0x0 }, /* POOL32S_4~*(3) */
21190 { reserved_block , 0 , 0 , 32,
21191 0xfc00003f, 0xc0000024, 0 , 0,
21192 0x0 }, /* POOL32S_4~*(4) */
21193 { reserved_block , 0 , 0 , 32,
21194 0xfc00003f, 0xc000002c, 0 , 0,
21195 0x0 }, /* POOL32S_4~*(5) */
21196 { reserved_block , 0 , 0 , 32,
21197 0xfc00003f, 0xc0000034, 0 , 0,
21198 0x0 }, /* POOL32S_4~*(6) */
21199 { pool , POOL32Sxf , 8 , 32,
21200 0xfc00003f, 0xc000003c, 0 , 0,
21201 0x0 }, /* POOL32Sxf */
21202 };
21203
21204
21205 NMD::Pool NMD::POOL32S[8] = {
21206 { pool , POOL32S_0 , 64 , 32,
21207 0xfc000007, 0xc0000000, 0 , 0,
21208 0x0 }, /* POOL32S_0 */
21209 { reserved_block , 0 , 0 , 32,
21210 0xfc000007, 0xc0000001, 0 , 0,
21211 0x0 }, /* POOL32S~*(1) */
21212 { reserved_block , 0 , 0 , 32,
21213 0xfc000007, 0xc0000002, 0 , 0,
21214 0x0 }, /* POOL32S~*(2) */
21215 { reserved_block , 0 , 0 , 32,
21216 0xfc000007, 0xc0000003, 0 , 0,
21217 0x0 }, /* POOL32S~*(3) */
21218 { pool , POOL32S_4 , 8 , 32,
21219 0xfc000007, 0xc0000004, 0 , 0,
21220 0x0 }, /* POOL32S_4 */
21221 { reserved_block , 0 , 0 , 32,
21222 0xfc000007, 0xc0000005, 0 , 0,
21223 0x0 }, /* POOL32S~*(5) */
21224 { reserved_block , 0 , 0 , 32,
21225 0xfc000007, 0xc0000006, 0 , 0,
21226 0x0 }, /* POOL32S~*(6) */
21227 { reserved_block , 0 , 0 , 32,
21228 0xfc000007, 0xc0000007, 0 , 0,
21229 0x0 }, /* POOL32S~*(7) */
21230 };
21231
21232
21233 NMD::Pool NMD::P_LUI[2] = {
21234 { instruction , 0 , 0 , 32,
21235 0xfc000002, 0xe0000000, &NMD::LUI , 0,
21236 0x0 }, /* LUI */
21237 { instruction , 0 , 0 , 32,
21238 0xfc000002, 0xe0000002, &NMD::ALUIPC , 0,
21239 0x0 }, /* ALUIPC */
21240 };
21241
21242
21243 NMD::Pool NMD::P_GP_LH[2] = {
21244 { instruction , 0 , 0 , 32,
21245 0xfc1c0001, 0x44100000, &NMD::LH_GP_ , 0,
21246 0x0 }, /* LH[GP] */
21247 { instruction , 0 , 0 , 32,
21248 0xfc1c0001, 0x44100001, &NMD::LHU_GP_ , 0,
21249 0x0 }, /* LHU[GP] */
21250 };
21251
21252
21253 NMD::Pool NMD::P_GP_SH[2] = {
21254 { instruction , 0 , 0 , 32,
21255 0xfc1c0001, 0x44140000, &NMD::SH_GP_ , 0,
21256 0x0 }, /* SH[GP] */
21257 { reserved_block , 0 , 0 , 32,
21258 0xfc1c0001, 0x44140001, 0 , 0,
21259 0x0 }, /* P.GP.SH~*(1) */
21260 };
21261
21262
21263 NMD::Pool NMD::P_GP_CP1[4] = {
21264 { instruction , 0 , 0 , 32,
21265 0xfc1c0003, 0x44180000, &NMD::LWC1_GP_ , 0,
21266 CP1_ }, /* LWC1[GP] */
21267 { instruction , 0 , 0 , 32,
21268 0xfc1c0003, 0x44180001, &NMD::SWC1_GP_ , 0,
21269 CP1_ }, /* SWC1[GP] */
21270 { instruction , 0 , 0 , 32,
21271 0xfc1c0003, 0x44180002, &NMD::LDC1_GP_ , 0,
21272 CP1_ }, /* LDC1[GP] */
21273 { instruction , 0 , 0 , 32,
21274 0xfc1c0003, 0x44180003, &NMD::SDC1_GP_ , 0,
21275 CP1_ }, /* SDC1[GP] */
21276 };
21277
21278
21279 NMD::Pool NMD::P_GP_M64[4] = {
21280 { instruction , 0 , 0 , 32,
21281 0xfc1c0003, 0x441c0000, &NMD::LWU_GP_ , 0,
21282 MIPS64_ }, /* LWU[GP] */
21283 { reserved_block , 0 , 0 , 32,
21284 0xfc1c0003, 0x441c0001, 0 , 0,
21285 0x0 }, /* P.GP.M64~*(1) */
21286 { reserved_block , 0 , 0 , 32,
21287 0xfc1c0003, 0x441c0002, 0 , 0,
21288 0x0 }, /* P.GP.M64~*(2) */
21289 { reserved_block , 0 , 0 , 32,
21290 0xfc1c0003, 0x441c0003, 0 , 0,
21291 0x0 }, /* P.GP.M64~*(3) */
21292 };
21293
21294
21295 NMD::Pool NMD::P_GP_BH[8] = {
21296 { instruction , 0 , 0 , 32,
21297 0xfc1c0000, 0x44000000, &NMD::LB_GP_ , 0,
21298 0x0 }, /* LB[GP] */
21299 { instruction , 0 , 0 , 32,
21300 0xfc1c0000, 0x44040000, &NMD::SB_GP_ , 0,
21301 0x0 }, /* SB[GP] */
21302 { instruction , 0 , 0 , 32,
21303 0xfc1c0000, 0x44080000, &NMD::LBU_GP_ , 0,
21304 0x0 }, /* LBU[GP] */
21305 { instruction , 0 , 0 , 32,
21306 0xfc1c0000, 0x440c0000, &NMD::ADDIU_GP_B_ , 0,
21307 0x0 }, /* ADDIU[GP.B] */
21308 { pool , P_GP_LH , 2 , 32,
21309 0xfc1c0000, 0x44100000, 0 , 0,
21310 0x0 }, /* P.GP.LH */
21311 { pool , P_GP_SH , 2 , 32,
21312 0xfc1c0000, 0x44140000, 0 , 0,
21313 0x0 }, /* P.GP.SH */
21314 { pool , P_GP_CP1 , 4 , 32,
21315 0xfc1c0000, 0x44180000, 0 , 0,
21316 0x0 }, /* P.GP.CP1 */
21317 { pool , P_GP_M64 , 4 , 32,
21318 0xfc1c0000, 0x441c0000, 0 , 0,
21319 0x0 }, /* P.GP.M64 */
21320 };
21321
21322
21323 NMD::Pool NMD::P_LS_U12[16] = {
21324 { instruction , 0 , 0 , 32,
21325 0xfc00f000, 0x84000000, &NMD::LB_U12_ , 0,
21326 0x0 }, /* LB[U12] */
21327 { instruction , 0 , 0 , 32,
21328 0xfc00f000, 0x84001000, &NMD::SB_U12_ , 0,
21329 0x0 }, /* SB[U12] */
21330 { instruction , 0 , 0 , 32,
21331 0xfc00f000, 0x84002000, &NMD::LBU_U12_ , 0,
21332 0x0 }, /* LBU[U12] */
21333 { instruction , 0 , 0 , 32,
21334 0xfc00f000, 0x84003000, &NMD::PREF_U12_ , 0,
21335 0x0 }, /* PREF[U12] */
21336 { instruction , 0 , 0 , 32,
21337 0xfc00f000, 0x84004000, &NMD::LH_U12_ , 0,
21338 0x0 }, /* LH[U12] */
21339 { instruction , 0 , 0 , 32,
21340 0xfc00f000, 0x84005000, &NMD::SH_U12_ , 0,
21341 0x0 }, /* SH[U12] */
21342 { instruction , 0 , 0 , 32,
21343 0xfc00f000, 0x84006000, &NMD::LHU_U12_ , 0,
21344 0x0 }, /* LHU[U12] */
21345 { instruction , 0 , 0 , 32,
21346 0xfc00f000, 0x84007000, &NMD::LWU_U12_ , 0,
21347 MIPS64_ }, /* LWU[U12] */
21348 { instruction , 0 , 0 , 32,
21349 0xfc00f000, 0x84008000, &NMD::LW_U12_ , 0,
21350 0x0 }, /* LW[U12] */
21351 { instruction , 0 , 0 , 32,
21352 0xfc00f000, 0x84009000, &NMD::SW_U12_ , 0,
21353 0x0 }, /* SW[U12] */
21354 { instruction , 0 , 0 , 32,
21355 0xfc00f000, 0x8400a000, &NMD::LWC1_U12_ , 0,
21356 CP1_ }, /* LWC1[U12] */
21357 { instruction , 0 , 0 , 32,
21358 0xfc00f000, 0x8400b000, &NMD::SWC1_U12_ , 0,
21359 CP1_ }, /* SWC1[U12] */
21360 { instruction , 0 , 0 , 32,
21361 0xfc00f000, 0x8400c000, &NMD::LD_U12_ , 0,
21362 MIPS64_ }, /* LD[U12] */
21363 { instruction , 0 , 0 , 32,
21364 0xfc00f000, 0x8400d000, &NMD::SD_U12_ , 0,
21365 MIPS64_ }, /* SD[U12] */
21366 { instruction , 0 , 0 , 32,
21367 0xfc00f000, 0x8400e000, &NMD::LDC1_U12_ , 0,
21368 CP1_ }, /* LDC1[U12] */
21369 { instruction , 0 , 0 , 32,
21370 0xfc00f000, 0x8400f000, &NMD::SDC1_U12_ , 0,
21371 CP1_ }, /* SDC1[U12] */
21372 };
21373
21374
21375 NMD::Pool NMD::P_PREF_S9_[2] = {
21376 { instruction , 0 , 0 , 32,
21377 0xffe07f00, 0xa7e01800, &NMD::SYNCI , 0,
21378 0x0 }, /* SYNCI */
21379 { instruction , 0 , 0 , 32,
21380 0xfc007f00, 0xa4001800, &NMD::PREF_S9_ , &NMD::PREF_S9__cond ,
21381 0x0 }, /* PREF[S9] */
21382 };
21383
21384
21385 NMD::Pool NMD::P_LS_S0[16] = {
21386 { instruction , 0 , 0 , 32,
21387 0xfc007f00, 0xa4000000, &NMD::LB_S9_ , 0,
21388 0x0 }, /* LB[S9] */
21389 { instruction , 0 , 0 , 32,
21390 0xfc007f00, 0xa4000800, &NMD::SB_S9_ , 0,
21391 0x0 }, /* SB[S9] */
21392 { instruction , 0 , 0 , 32,
21393 0xfc007f00, 0xa4001000, &NMD::LBU_S9_ , 0,
21394 0x0 }, /* LBU[S9] */
21395 { pool , P_PREF_S9_ , 2 , 32,
21396 0xfc007f00, 0xa4001800, 0 , 0,
21397 0x0 }, /* P.PREF[S9] */
21398 { instruction , 0 , 0 , 32,
21399 0xfc007f00, 0xa4002000, &NMD::LH_S9_ , 0,
21400 0x0 }, /* LH[S9] */
21401 { instruction , 0 , 0 , 32,
21402 0xfc007f00, 0xa4002800, &NMD::SH_S9_ , 0,
21403 0x0 }, /* SH[S9] */
21404 { instruction , 0 , 0 , 32,
21405 0xfc007f00, 0xa4003000, &NMD::LHU_S9_ , 0,
21406 0x0 }, /* LHU[S9] */
21407 { instruction , 0 , 0 , 32,
21408 0xfc007f00, 0xa4003800, &NMD::LWU_S9_ , 0,
21409 MIPS64_ }, /* LWU[S9] */
21410 { instruction , 0 , 0 , 32,
21411 0xfc007f00, 0xa4004000, &NMD::LW_S9_ , 0,
21412 0x0 }, /* LW[S9] */
21413 { instruction , 0 , 0 , 32,
21414 0xfc007f00, 0xa4004800, &NMD::SW_S9_ , 0,
21415 0x0 }, /* SW[S9] */
21416 { instruction , 0 , 0 , 32,
21417 0xfc007f00, 0xa4005000, &NMD::LWC1_S9_ , 0,
21418 CP1_ }, /* LWC1[S9] */
21419 { instruction , 0 , 0 , 32,
21420 0xfc007f00, 0xa4005800, &NMD::SWC1_S9_ , 0,
21421 CP1_ }, /* SWC1[S9] */
21422 { instruction , 0 , 0 , 32,
21423 0xfc007f00, 0xa4006000, &NMD::LD_S9_ , 0,
21424 MIPS64_ }, /* LD[S9] */
21425 { instruction , 0 , 0 , 32,
21426 0xfc007f00, 0xa4006800, &NMD::SD_S9_ , 0,
21427 MIPS64_ }, /* SD[S9] */
21428 { instruction , 0 , 0 , 32,
21429 0xfc007f00, 0xa4007000, &NMD::LDC1_S9_ , 0,
21430 CP1_ }, /* LDC1[S9] */
21431 { instruction , 0 , 0 , 32,
21432 0xfc007f00, 0xa4007800, &NMD::SDC1_S9_ , 0,
21433 CP1_ }, /* SDC1[S9] */
21434 };
21435
21436
21437 NMD::Pool NMD::ASET_ACLR[2] = {
21438 { instruction , 0 , 0 , 32,
21439 0xfe007f00, 0xa4001100, &NMD::ASET , 0,
21440 MCU_ }, /* ASET */
21441 { instruction , 0 , 0 , 32,
21442 0xfe007f00, 0xa6001100, &NMD::ACLR , 0,
21443 MCU_ }, /* ACLR */
21444 };
21445
21446
21447 NMD::Pool NMD::P_LL[4] = {
21448 { instruction , 0 , 0 , 32,
21449 0xfc007f03, 0xa4005100, &NMD::LL , 0,
21450 0x0 }, /* LL */
21451 { instruction , 0 , 0 , 32,
21452 0xfc007f03, 0xa4005101, &NMD::LLWP , 0,
21453 XNP_ }, /* LLWP */
21454 { reserved_block , 0 , 0 , 32,
21455 0xfc007f03, 0xa4005102, 0 , 0,
21456 0x0 }, /* P.LL~*(2) */
21457 { reserved_block , 0 , 0 , 32,
21458 0xfc007f03, 0xa4005103, 0 , 0,
21459 0x0 }, /* P.LL~*(3) */
21460 };
21461
21462
21463 NMD::Pool NMD::P_SC[4] = {
21464 { instruction , 0 , 0 , 32,
21465 0xfc007f03, 0xa4005900, &NMD::SC , 0,
21466 0x0 }, /* SC */
21467 { instruction , 0 , 0 , 32,
21468 0xfc007f03, 0xa4005901, &NMD::SCWP , 0,
21469 XNP_ }, /* SCWP */
21470 { reserved_block , 0 , 0 , 32,
21471 0xfc007f03, 0xa4005902, 0 , 0,
21472 0x0 }, /* P.SC~*(2) */
21473 { reserved_block , 0 , 0 , 32,
21474 0xfc007f03, 0xa4005903, 0 , 0,
21475 0x0 }, /* P.SC~*(3) */
21476 };
21477
21478
21479 NMD::Pool NMD::P_LLD[8] = {
21480 { instruction , 0 , 0 , 32,
21481 0xfc007f07, 0xa4007100, &NMD::LLD , 0,
21482 MIPS64_ }, /* LLD */
21483 { instruction , 0 , 0 , 32,
21484 0xfc007f07, 0xa4007101, &NMD::LLDP , 0,
21485 MIPS64_ }, /* LLDP */
21486 { reserved_block , 0 , 0 , 32,
21487 0xfc007f07, 0xa4007102, 0 , 0,
21488 0x0 }, /* P.LLD~*(2) */
21489 { reserved_block , 0 , 0 , 32,
21490 0xfc007f07, 0xa4007103, 0 , 0,
21491 0x0 }, /* P.LLD~*(3) */
21492 { reserved_block , 0 , 0 , 32,
21493 0xfc007f07, 0xa4007104, 0 , 0,
21494 0x0 }, /* P.LLD~*(4) */
21495 { reserved_block , 0 , 0 , 32,
21496 0xfc007f07, 0xa4007105, 0 , 0,
21497 0x0 }, /* P.LLD~*(5) */
21498 { reserved_block , 0 , 0 , 32,
21499 0xfc007f07, 0xa4007106, 0 , 0,
21500 0x0 }, /* P.LLD~*(6) */
21501 { reserved_block , 0 , 0 , 32,
21502 0xfc007f07, 0xa4007107, 0 , 0,
21503 0x0 }, /* P.LLD~*(7) */
21504 };
21505
21506
21507 NMD::Pool NMD::P_SCD[8] = {
21508 { instruction , 0 , 0 , 32,
21509 0xfc007f07, 0xa4007900, &NMD::SCD , 0,
21510 MIPS64_ }, /* SCD */
21511 { instruction , 0 , 0 , 32,
21512 0xfc007f07, 0xa4007901, &NMD::SCDP , 0,
21513 MIPS64_ }, /* SCDP */
21514 { reserved_block , 0 , 0 , 32,
21515 0xfc007f07, 0xa4007902, 0 , 0,
21516 0x0 }, /* P.SCD~*(2) */
21517 { reserved_block , 0 , 0 , 32,
21518 0xfc007f07, 0xa4007903, 0 , 0,
21519 0x0 }, /* P.SCD~*(3) */
21520 { reserved_block , 0 , 0 , 32,
21521 0xfc007f07, 0xa4007904, 0 , 0,
21522 0x0 }, /* P.SCD~*(4) */
21523 { reserved_block , 0 , 0 , 32,
21524 0xfc007f07, 0xa4007905, 0 , 0,
21525 0x0 }, /* P.SCD~*(5) */
21526 { reserved_block , 0 , 0 , 32,
21527 0xfc007f07, 0xa4007906, 0 , 0,
21528 0x0 }, /* P.SCD~*(6) */
21529 { reserved_block , 0 , 0 , 32,
21530 0xfc007f07, 0xa4007907, 0 , 0,
21531 0x0 }, /* P.SCD~*(7) */
21532 };
21533
21534
21535 NMD::Pool NMD::P_LS_S1[16] = {
21536 { reserved_block , 0 , 0 , 32,
21537 0xfc007f00, 0xa4000100, 0 , 0,
21538 0x0 }, /* P.LS.S1~*(0) */
21539 { reserved_block , 0 , 0 , 32,
21540 0xfc007f00, 0xa4000900, 0 , 0,
21541 0x0 }, /* P.LS.S1~*(1) */
21542 { pool , ASET_ACLR , 2 , 32,
21543 0xfc007f00, 0xa4001100, 0 , 0,
21544 0x0 }, /* ASET_ACLR */
21545 { reserved_block , 0 , 0 , 32,
21546 0xfc007f00, 0xa4001900, 0 , 0,
21547 0x0 }, /* P.LS.S1~*(3) */
21548 { instruction , 0 , 0 , 32,
21549 0xfc007f00, 0xa4002100, &NMD::UALH , 0,
21550 XMMS_ }, /* UALH */
21551 { instruction , 0 , 0 , 32,
21552 0xfc007f00, 0xa4002900, &NMD::UASH , 0,
21553 XMMS_ }, /* UASH */
21554 { reserved_block , 0 , 0 , 32,
21555 0xfc007f00, 0xa4003100, 0 , 0,
21556 0x0 }, /* P.LS.S1~*(6) */
21557 { instruction , 0 , 0 , 32,
21558 0xfc007f00, 0xa4003900, &NMD::CACHE , 0,
21559 CP0_ }, /* CACHE */
21560 { instruction , 0 , 0 , 32,
21561 0xfc007f00, 0xa4004100, &NMD::LWC2 , 0,
21562 CP2_ }, /* LWC2 */
21563 { instruction , 0 , 0 , 32,
21564 0xfc007f00, 0xa4004900, &NMD::SWC2 , 0,
21565 CP2_ }, /* SWC2 */
21566 { pool , P_LL , 4 , 32,
21567 0xfc007f00, 0xa4005100, 0 , 0,
21568 0x0 }, /* P.LL */
21569 { pool , P_SC , 4 , 32,
21570 0xfc007f00, 0xa4005900, 0 , 0,
21571 0x0 }, /* P.SC */
21572 { instruction , 0 , 0 , 32,
21573 0xfc007f00, 0xa4006100, &NMD::LDC2 , 0,
21574 CP2_ }, /* LDC2 */
21575 { instruction , 0 , 0 , 32,
21576 0xfc007f00, 0xa4006900, &NMD::SDC2 , 0,
21577 CP2_ }, /* SDC2 */
21578 { pool , P_LLD , 8 , 32,
21579 0xfc007f00, 0xa4007100, 0 , 0,
21580 0x0 }, /* P.LLD */
21581 { pool , P_SCD , 8 , 32,
21582 0xfc007f00, 0xa4007900, 0 , 0,
21583 0x0 }, /* P.SCD */
21584 };
21585
21586
21587 NMD::Pool NMD::P_PREFE[2] = {
21588 { instruction , 0 , 0 , 32,
21589 0xffe07f00, 0xa7e01a00, &NMD::SYNCIE , 0,
21590 CP0_ | EVA_ }, /* SYNCIE */
21591 { instruction , 0 , 0 , 32,
21592 0xfc007f00, 0xa4001a00, &NMD::PREFE , &NMD::PREFE_cond ,
21593 CP0_ | EVA_ }, /* PREFE */
21594 };
21595
21596
21597 NMD::Pool NMD::P_LLE[4] = {
21598 { instruction , 0 , 0 , 32,
21599 0xfc007f03, 0xa4005200, &NMD::LLE , 0,
21600 CP0_ | EVA_ }, /* LLE */
21601 { instruction , 0 , 0 , 32,
21602 0xfc007f03, 0xa4005201, &NMD::LLWPE , 0,
21603 CP0_ | EVA_ }, /* LLWPE */
21604 { reserved_block , 0 , 0 , 32,
21605 0xfc007f03, 0xa4005202, 0 , 0,
21606 0x0 }, /* P.LLE~*(2) */
21607 { reserved_block , 0 , 0 , 32,
21608 0xfc007f03, 0xa4005203, 0 , 0,
21609 0x0 }, /* P.LLE~*(3) */
21610 };
21611
21612
21613 NMD::Pool NMD::P_SCE[4] = {
21614 { instruction , 0 , 0 , 32,
21615 0xfc007f03, 0xa4005a00, &NMD::SCE , 0,
21616 CP0_ | EVA_ }, /* SCE */
21617 { instruction , 0 , 0 , 32,
21618 0xfc007f03, 0xa4005a01, &NMD::SCWPE , 0,
21619 CP0_ | EVA_ }, /* SCWPE */
21620 { reserved_block , 0 , 0 , 32,
21621 0xfc007f03, 0xa4005a02, 0 , 0,
21622 0x0 }, /* P.SCE~*(2) */
21623 { reserved_block , 0 , 0 , 32,
21624 0xfc007f03, 0xa4005a03, 0 , 0,
21625 0x0 }, /* P.SCE~*(3) */
21626 };
21627
21628
21629 NMD::Pool NMD::P_LS_E0[16] = {
21630 { instruction , 0 , 0 , 32,
21631 0xfc007f00, 0xa4000200, &NMD::LBE , 0,
21632 CP0_ | EVA_ }, /* LBE */
21633 { instruction , 0 , 0 , 32,
21634 0xfc007f00, 0xa4000a00, &NMD::SBE , 0,
21635 CP0_ | EVA_ }, /* SBE */
21636 { instruction , 0 , 0 , 32,
21637 0xfc007f00, 0xa4001200, &NMD::LBUE , 0,
21638 CP0_ | EVA_ }, /* LBUE */
21639 { pool , P_PREFE , 2 , 32,
21640 0xfc007f00, 0xa4001a00, 0 , 0,
21641 0x0 }, /* P.PREFE */
21642 { instruction , 0 , 0 , 32,
21643 0xfc007f00, 0xa4002200, &NMD::LHE , 0,
21644 CP0_ | EVA_ }, /* LHE */
21645 { instruction , 0 , 0 , 32,
21646 0xfc007f00, 0xa4002a00, &NMD::SHE , 0,
21647 CP0_ | EVA_ }, /* SHE */
21648 { instruction , 0 , 0 , 32,
21649 0xfc007f00, 0xa4003200, &NMD::LHUE , 0,
21650 CP0_ | EVA_ }, /* LHUE */
21651 { instruction , 0 , 0 , 32,
21652 0xfc007f00, 0xa4003a00, &NMD::CACHEE , 0,
21653 CP0_ | EVA_ }, /* CACHEE */
21654 { instruction , 0 , 0 , 32,
21655 0xfc007f00, 0xa4004200, &NMD::LWE , 0,
21656 CP0_ | EVA_ }, /* LWE */
21657 { instruction , 0 , 0 , 32,
21658 0xfc007f00, 0xa4004a00, &NMD::SWE , 0,
21659 CP0_ | EVA_ }, /* SWE */
21660 { pool , P_LLE , 4 , 32,
21661 0xfc007f00, 0xa4005200, 0 , 0,
21662 0x0 }, /* P.LLE */
21663 { pool , P_SCE , 4 , 32,
21664 0xfc007f00, 0xa4005a00, 0 , 0,
21665 0x0 }, /* P.SCE */
21666 { reserved_block , 0 , 0 , 32,
21667 0xfc007f00, 0xa4006200, 0 , 0,
21668 0x0 }, /* P.LS.E0~*(12) */
21669 { reserved_block , 0 , 0 , 32,
21670 0xfc007f00, 0xa4006a00, 0 , 0,
21671 0x0 }, /* P.LS.E0~*(13) */
21672 { reserved_block , 0 , 0 , 32,
21673 0xfc007f00, 0xa4007200, 0 , 0,
21674 0x0 }, /* P.LS.E0~*(14) */
21675 { reserved_block , 0 , 0 , 32,
21676 0xfc007f00, 0xa4007a00, 0 , 0,
21677 0x0 }, /* P.LS.E0~*(15) */
21678 };
21679
21680
21681 NMD::Pool NMD::P_LS_WM[2] = {
21682 { instruction , 0 , 0 , 32,
21683 0xfc000f00, 0xa4000400, &NMD::LWM , 0,
21684 XMMS_ }, /* LWM */
21685 { instruction , 0 , 0 , 32,
21686 0xfc000f00, 0xa4000c00, &NMD::SWM , 0,
21687 XMMS_ }, /* SWM */
21688 };
21689
21690
21691 NMD::Pool NMD::P_LS_UAWM[2] = {
21692 { instruction , 0 , 0 , 32,
21693 0xfc000f00, 0xa4000500, &NMD::UALWM , 0,
21694 XMMS_ }, /* UALWM */
21695 { instruction , 0 , 0 , 32,
21696 0xfc000f00, 0xa4000d00, &NMD::UASWM , 0,
21697 XMMS_ }, /* UASWM */
21698 };
21699
21700
21701 NMD::Pool NMD::P_LS_DM[2] = {
21702 { instruction , 0 , 0 , 32,
21703 0xfc000f00, 0xa4000600, &NMD::LDM , 0,
21704 MIPS64_ }, /* LDM */
21705 { instruction , 0 , 0 , 32,
21706 0xfc000f00, 0xa4000e00, &NMD::SDM , 0,
21707 MIPS64_ }, /* SDM */
21708 };
21709
21710
21711 NMD::Pool NMD::P_LS_UADM[2] = {
21712 { instruction , 0 , 0 , 32,
21713 0xfc000f00, 0xa4000700, &NMD::UALDM , 0,
21714 MIPS64_ }, /* UALDM */
21715 { instruction , 0 , 0 , 32,
21716 0xfc000f00, 0xa4000f00, &NMD::UASDM , 0,
21717 MIPS64_ }, /* UASDM */
21718 };
21719
21720
21721 NMD::Pool NMD::P_LS_S9[8] = {
21722 { pool , P_LS_S0 , 16 , 32,
21723 0xfc000700, 0xa4000000, 0 , 0,
21724 0x0 }, /* P.LS.S0 */
21725 { pool , P_LS_S1 , 16 , 32,
21726 0xfc000700, 0xa4000100, 0 , 0,
21727 0x0 }, /* P.LS.S1 */
21728 { pool , P_LS_E0 , 16 , 32,
21729 0xfc000700, 0xa4000200, 0 , 0,
21730 0x0 }, /* P.LS.E0 */
21731 { reserved_block , 0 , 0 , 32,
21732 0xfc000700, 0xa4000300, 0 , 0,
21733 0x0 }, /* P.LS.S9~*(3) */
21734 { pool , P_LS_WM , 2 , 32,
21735 0xfc000700, 0xa4000400, 0 , 0,
21736 0x0 }, /* P.LS.WM */
21737 { pool , P_LS_UAWM , 2 , 32,
21738 0xfc000700, 0xa4000500, 0 , 0,
21739 0x0 }, /* P.LS.UAWM */
21740 { pool , P_LS_DM , 2 , 32,
21741 0xfc000700, 0xa4000600, 0 , 0,
21742 0x0 }, /* P.LS.DM */
21743 { pool , P_LS_UADM , 2 , 32,
21744 0xfc000700, 0xa4000700, 0 , 0,
21745 0x0 }, /* P.LS.UADM */
21746 };
21747
21748
21749 NMD::Pool NMD::P_BAL[2] = {
21750 { branch_instruction , 0 , 0 , 32,
21751 0xfe000000, 0x28000000, &NMD::BC_32_ , 0,
21752 0x0 }, /* BC[32] */
21753 { call_instruction , 0 , 0 , 32,
21754 0xfe000000, 0x2a000000, &NMD::BALC_32_ , 0,
21755 0x0 }, /* BALC[32] */
21756 };
21757
21758
21759 NMD::Pool NMD::P_BALRSC[2] = {
21760 { branch_instruction , 0 , 0 , 32,
21761 0xffe0f000, 0x48008000, &NMD::BRSC , 0,
21762 0x0 }, /* BRSC */
21763 { call_instruction , 0 , 0 , 32,
21764 0xfc00f000, 0x48008000, &NMD::BALRSC , &NMD::BALRSC_cond ,
21765 0x0 }, /* BALRSC */
21766 };
21767
21768
21769 NMD::Pool NMD::P_J[16] = {
21770 { call_instruction , 0 , 0 , 32,
21771 0xfc00f000, 0x48000000, &NMD::JALRC_32_ , 0,
21772 0x0 }, /* JALRC[32] */
21773 { call_instruction , 0 , 0 , 32,
21774 0xfc00f000, 0x48001000, &NMD::JALRC_HB , 0,
21775 0x0 }, /* JALRC.HB */
21776 { reserved_block , 0 , 0 , 32,
21777 0xfc00f000, 0x48002000, 0 , 0,
21778 0x0 }, /* P.J~*(2) */
21779 { reserved_block , 0 , 0 , 32,
21780 0xfc00f000, 0x48003000, 0 , 0,
21781 0x0 }, /* P.J~*(3) */
21782 { reserved_block , 0 , 0 , 32,
21783 0xfc00f000, 0x48004000, 0 , 0,
21784 0x0 }, /* P.J~*(4) */
21785 { reserved_block , 0 , 0 , 32,
21786 0xfc00f000, 0x48005000, 0 , 0,
21787 0x0 }, /* P.J~*(5) */
21788 { reserved_block , 0 , 0 , 32,
21789 0xfc00f000, 0x48006000, 0 , 0,
21790 0x0 }, /* P.J~*(6) */
21791 { reserved_block , 0 , 0 , 32,
21792 0xfc00f000, 0x48007000, 0 , 0,
21793 0x0 }, /* P.J~*(7) */
21794 { pool , P_BALRSC , 2 , 32,
21795 0xfc00f000, 0x48008000, 0 , 0,
21796 0x0 }, /* P.BALRSC */
21797 { reserved_block , 0 , 0 , 32,
21798 0xfc00f000, 0x48009000, 0 , 0,
21799 0x0 }, /* P.J~*(9) */
21800 { reserved_block , 0 , 0 , 32,
21801 0xfc00f000, 0x4800a000, 0 , 0,
21802 0x0 }, /* P.J~*(10) */
21803 { reserved_block , 0 , 0 , 32,
21804 0xfc00f000, 0x4800b000, 0 , 0,
21805 0x0 }, /* P.J~*(11) */
21806 { reserved_block , 0 , 0 , 32,
21807 0xfc00f000, 0x4800c000, 0 , 0,
21808 0x0 }, /* P.J~*(12) */
21809 { reserved_block , 0 , 0 , 32,
21810 0xfc00f000, 0x4800d000, 0 , 0,
21811 0x0 }, /* P.J~*(13) */
21812 { reserved_block , 0 , 0 , 32,
21813 0xfc00f000, 0x4800e000, 0 , 0,
21814 0x0 }, /* P.J~*(14) */
21815 { reserved_block , 0 , 0 , 32,
21816 0xfc00f000, 0x4800f000, 0 , 0,
21817 0x0 }, /* P.J~*(15) */
21818 };
21819
21820
21821 NMD::Pool NMD::P_BR3A[32] = {
21822 { branch_instruction , 0 , 0 , 32,
21823 0xfc1fc000, 0x88004000, &NMD::BC1EQZC , 0,
21824 CP1_ }, /* BC1EQZC */
21825 { branch_instruction , 0 , 0 , 32,
21826 0xfc1fc000, 0x88014000, &NMD::BC1NEZC , 0,
21827 CP1_ }, /* BC1NEZC */
21828 { branch_instruction , 0 , 0 , 32,
21829 0xfc1fc000, 0x88024000, &NMD::BC2EQZC , 0,
21830 CP2_ }, /* BC2EQZC */
21831 { branch_instruction , 0 , 0 , 32,
21832 0xfc1fc000, 0x88034000, &NMD::BC2NEZC , 0,
21833 CP2_ }, /* BC2NEZC */
21834 { branch_instruction , 0 , 0 , 32,
21835 0xfc1fc000, 0x88044000, &NMD::BPOSGE32C , 0,
21836 DSP_ }, /* BPOSGE32C */
21837 { reserved_block , 0 , 0 , 32,
21838 0xfc1fc000, 0x88054000, 0 , 0,
21839 0x0 }, /* P.BR3A~*(5) */
21840 { reserved_block , 0 , 0 , 32,
21841 0xfc1fc000, 0x88064000, 0 , 0,
21842 0x0 }, /* P.BR3A~*(6) */
21843 { reserved_block , 0 , 0 , 32,
21844 0xfc1fc000, 0x88074000, 0 , 0,
21845 0x0 }, /* P.BR3A~*(7) */
21846 { reserved_block , 0 , 0 , 32,
21847 0xfc1fc000, 0x88084000, 0 , 0,
21848 0x0 }, /* P.BR3A~*(8) */
21849 { reserved_block , 0 , 0 , 32,
21850 0xfc1fc000, 0x88094000, 0 , 0,
21851 0x0 }, /* P.BR3A~*(9) */
21852 { reserved_block , 0 , 0 , 32,
21853 0xfc1fc000, 0x880a4000, 0 , 0,
21854 0x0 }, /* P.BR3A~*(10) */
21855 { reserved_block , 0 , 0 , 32,
21856 0xfc1fc000, 0x880b4000, 0 , 0,
21857 0x0 }, /* P.BR3A~*(11) */
21858 { reserved_block , 0 , 0 , 32,
21859 0xfc1fc000, 0x880c4000, 0 , 0,
21860 0x0 }, /* P.BR3A~*(12) */
21861 { reserved_block , 0 , 0 , 32,
21862 0xfc1fc000, 0x880d4000, 0 , 0,
21863 0x0 }, /* P.BR3A~*(13) */
21864 { reserved_block , 0 , 0 , 32,
21865 0xfc1fc000, 0x880e4000, 0 , 0,
21866 0x0 }, /* P.BR3A~*(14) */
21867 { reserved_block , 0 , 0 , 32,
21868 0xfc1fc000, 0x880f4000, 0 , 0,
21869 0x0 }, /* P.BR3A~*(15) */
21870 { reserved_block , 0 , 0 , 32,
21871 0xfc1fc000, 0x88104000, 0 , 0,
21872 0x0 }, /* P.BR3A~*(16) */
21873 { reserved_block , 0 , 0 , 32,
21874 0xfc1fc000, 0x88114000, 0 , 0,
21875 0x0 }, /* P.BR3A~*(17) */
21876 { reserved_block , 0 , 0 , 32,
21877 0xfc1fc000, 0x88124000, 0 , 0,
21878 0x0 }, /* P.BR3A~*(18) */
21879 { reserved_block , 0 , 0 , 32,
21880 0xfc1fc000, 0x88134000, 0 , 0,
21881 0x0 }, /* P.BR3A~*(19) */
21882 { reserved_block , 0 , 0 , 32,
21883 0xfc1fc000, 0x88144000, 0 , 0,
21884 0x0 }, /* P.BR3A~*(20) */
21885 { reserved_block , 0 , 0 , 32,
21886 0xfc1fc000, 0x88154000, 0 , 0,
21887 0x0 }, /* P.BR3A~*(21) */
21888 { reserved_block , 0 , 0 , 32,
21889 0xfc1fc000, 0x88164000, 0 , 0,
21890 0x0 }, /* P.BR3A~*(22) */
21891 { reserved_block , 0 , 0 , 32,
21892 0xfc1fc000, 0x88174000, 0 , 0,
21893 0x0 }, /* P.BR3A~*(23) */
21894 { reserved_block , 0 , 0 , 32,
21895 0xfc1fc000, 0x88184000, 0 , 0,
21896 0x0 }, /* P.BR3A~*(24) */
21897 { reserved_block , 0 , 0 , 32,
21898 0xfc1fc000, 0x88194000, 0 , 0,
21899 0x0 }, /* P.BR3A~*(25) */
21900 { reserved_block , 0 , 0 , 32,
21901 0xfc1fc000, 0x881a4000, 0 , 0,
21902 0x0 }, /* P.BR3A~*(26) */
21903 { reserved_block , 0 , 0 , 32,
21904 0xfc1fc000, 0x881b4000, 0 , 0,
21905 0x0 }, /* P.BR3A~*(27) */
21906 { reserved_block , 0 , 0 , 32,
21907 0xfc1fc000, 0x881c4000, 0 , 0,
21908 0x0 }, /* P.BR3A~*(28) */
21909 { reserved_block , 0 , 0 , 32,
21910 0xfc1fc000, 0x881d4000, 0 , 0,
21911 0x0 }, /* P.BR3A~*(29) */
21912 { reserved_block , 0 , 0 , 32,
21913 0xfc1fc000, 0x881e4000, 0 , 0,
21914 0x0 }, /* P.BR3A~*(30) */
21915 { reserved_block , 0 , 0 , 32,
21916 0xfc1fc000, 0x881f4000, 0 , 0,
21917 0x0 }, /* P.BR3A~*(31) */
21918 };
21919
21920
21921 NMD::Pool NMD::P_BR1[4] = {
21922 { branch_instruction , 0 , 0 , 32,
21923 0xfc00c000, 0x88000000, &NMD::BEQC_32_ , 0,
21924 0x0 }, /* BEQC[32] */
21925 { pool , P_BR3A , 32 , 32,
21926 0xfc00c000, 0x88004000, 0 , 0,
21927 0x0 }, /* P.BR3A */
21928 { branch_instruction , 0 , 0 , 32,
21929 0xfc00c000, 0x88008000, &NMD::BGEC , 0,
21930 0x0 }, /* BGEC */
21931 { branch_instruction , 0 , 0 , 32,
21932 0xfc00c000, 0x8800c000, &NMD::BGEUC , 0,
21933 0x0 }, /* BGEUC */
21934 };
21935
21936
21937 NMD::Pool NMD::P_BR2[4] = {
21938 { branch_instruction , 0 , 0 , 32,
21939 0xfc00c000, 0xa8000000, &NMD::BNEC_32_ , 0,
21940 0x0 }, /* BNEC[32] */
21941 { reserved_block , 0 , 0 , 32,
21942 0xfc00c000, 0xa8004000, 0 , 0,
21943 0x0 }, /* P.BR2~*(1) */
21944 { branch_instruction , 0 , 0 , 32,
21945 0xfc00c000, 0xa8008000, &NMD::BLTC , 0,
21946 0x0 }, /* BLTC */
21947 { branch_instruction , 0 , 0 , 32,
21948 0xfc00c000, 0xa800c000, &NMD::BLTUC , 0,
21949 0x0 }, /* BLTUC */
21950 };
21951
21952
21953 NMD::Pool NMD::P_BRI[8] = {
21954 { branch_instruction , 0 , 0 , 32,
21955 0xfc1c0000, 0xc8000000, &NMD::BEQIC , 0,
21956 0x0 }, /* BEQIC */
21957 { branch_instruction , 0 , 0 , 32,
21958 0xfc1c0000, 0xc8040000, &NMD::BBEQZC , 0,
21959 XMMS_ }, /* BBEQZC */
21960 { branch_instruction , 0 , 0 , 32,
21961 0xfc1c0000, 0xc8080000, &NMD::BGEIC , 0,
21962 0x0 }, /* BGEIC */
21963 { branch_instruction , 0 , 0 , 32,
21964 0xfc1c0000, 0xc80c0000, &NMD::BGEIUC , 0,
21965 0x0 }, /* BGEIUC */
21966 { branch_instruction , 0 , 0 , 32,
21967 0xfc1c0000, 0xc8100000, &NMD::BNEIC , 0,
21968 0x0 }, /* BNEIC */
21969 { branch_instruction , 0 , 0 , 32,
21970 0xfc1c0000, 0xc8140000, &NMD::BBNEZC , 0,
21971 XMMS_ }, /* BBNEZC */
21972 { branch_instruction , 0 , 0 , 32,
21973 0xfc1c0000, 0xc8180000, &NMD::BLTIC , 0,
21974 0x0 }, /* BLTIC */
21975 { branch_instruction , 0 , 0 , 32,
21976 0xfc1c0000, 0xc81c0000, &NMD::BLTIUC , 0,
21977 0x0 }, /* BLTIUC */
21978 };
21979
21980
21981 NMD::Pool NMD::P32[32] = {
21982 { pool , P_ADDIU , 2 , 32,
21983 0xfc000000, 0x00000000, 0 , 0,
21984 0x0 }, /* P.ADDIU */
21985 { pool , P32A , 8 , 32,
21986 0xfc000000, 0x20000000, 0 , 0,
21987 0x0 }, /* P32A */
21988 { pool , P_GP_W , 4 , 32,
21989 0xfc000000, 0x40000000, 0 , 0,
21990 0x0 }, /* P.GP.W */
21991 { pool , POOL48I , 32 , 48,
21992 0xfc0000000000ull, 0x600000000000ull, 0 , 0,
21993 0x0 }, /* POOL48I */
21994 { pool , P_U12 , 16 , 32,
21995 0xfc000000, 0x80000000, 0 , 0,
21996 0x0 }, /* P.U12 */
21997 { pool , POOL32F , 8 , 32,
21998 0xfc000000, 0xa0000000, 0 , 0,
21999 CP1_ }, /* POOL32F */
22000 { pool , POOL32S , 8 , 32,
22001 0xfc000000, 0xc0000000, 0 , 0,
22002 0x0 }, /* POOL32S */
22003 { pool , P_LUI , 2 , 32,
22004 0xfc000000, 0xe0000000, 0 , 0,
22005 0x0 }, /* P.LUI */
22006 { instruction , 0 , 0 , 32,
22007 0xfc000000, 0x04000000, &NMD::ADDIUPC_32_ , 0,
22008 0x0 }, /* ADDIUPC[32] */
22009 { reserved_block , 0 , 0 , 32,
22010 0xfc000000, 0x24000000, 0 , 0,
22011 0x0 }, /* P32~*(5) */
22012 { pool , P_GP_BH , 8 , 32,
22013 0xfc000000, 0x44000000, 0 , 0,
22014 0x0 }, /* P.GP.BH */
22015 { reserved_block , 0 , 0 , 32,
22016 0xfc000000, 0x64000000, 0 , 0,
22017 0x0 }, /* P32~*(13) */
22018 { pool , P_LS_U12 , 16 , 32,
22019 0xfc000000, 0x84000000, 0 , 0,
22020 0x0 }, /* P.LS.U12 */
22021 { pool , P_LS_S9 , 8 , 32,
22022 0xfc000000, 0xa4000000, 0 , 0,
22023 0x0 }, /* P.LS.S9 */
22024 { reserved_block , 0 , 0 , 32,
22025 0xfc000000, 0xc4000000, 0 , 0,
22026 0x0 }, /* P32~*(25) */
22027 { reserved_block , 0 , 0 , 32,
22028 0xfc000000, 0xe4000000, 0 , 0,
22029 0x0 }, /* P32~*(29) */
22030 { call_instruction , 0 , 0 , 32,
22031 0xfc000000, 0x08000000, &NMD::MOVE_BALC , 0,
22032 XMMS_ }, /* MOVE.BALC */
22033 { pool , P_BAL , 2 , 32,
22034 0xfc000000, 0x28000000, 0 , 0,
22035 0x0 }, /* P.BAL */
22036 { pool , P_J , 16 , 32,
22037 0xfc000000, 0x48000000, 0 , 0,
22038 0x0 }, /* P.J */
22039 { reserved_block , 0 , 0 , 32,
22040 0xfc000000, 0x68000000, 0 , 0,
22041 0x0 }, /* P32~*(14) */
22042 { pool , P_BR1 , 4 , 32,
22043 0xfc000000, 0x88000000, 0 , 0,
22044 0x0 }, /* P.BR1 */
22045 { pool , P_BR2 , 4 , 32,
22046 0xfc000000, 0xa8000000, 0 , 0,
22047 0x0 }, /* P.BR2 */
22048 { pool , P_BRI , 8 , 32,
22049 0xfc000000, 0xc8000000, 0 , 0,
22050 0x0 }, /* P.BRI */
22051 { reserved_block , 0 , 0 , 32,
22052 0xfc000000, 0xe8000000, 0 , 0,
22053 0x0 }, /* P32~*(30) */
22054 { reserved_block , 0 , 0 , 32,
22055 0xfc000000, 0x0c000000, 0 , 0,
22056 0x0 }, /* P32~*(3) */
22057 { reserved_block , 0 , 0 , 32,
22058 0xfc000000, 0x2c000000, 0 , 0,
22059 0x0 }, /* P32~*(7) */
22060 { reserved_block , 0 , 0 , 32,
22061 0xfc000000, 0x4c000000, 0 , 0,
22062 0x0 }, /* P32~*(11) */
22063 { reserved_block , 0 , 0 , 32,
22064 0xfc000000, 0x6c000000, 0 , 0,
22065 0x0 }, /* P32~*(15) */
22066 { reserved_block , 0 , 0 , 32,
22067 0xfc000000, 0x8c000000, 0 , 0,
22068 0x0 }, /* P32~*(19) */
22069 { reserved_block , 0 , 0 , 32,
22070 0xfc000000, 0xac000000, 0 , 0,
22071 0x0 }, /* P32~*(23) */
22072 { reserved_block , 0 , 0 , 32,
22073 0xfc000000, 0xcc000000, 0 , 0,
22074 0x0 }, /* P32~*(27) */
22075 { reserved_block , 0 , 0 , 32,
22076 0xfc000000, 0xec000000, 0 , 0,
22077 0x0 }, /* P32~*(31) */
22078 };
22079
22080
22081 NMD::Pool NMD::P16_SYSCALL[2] = {
22082 { instruction , 0 , 0 , 16,
22083 0xfffc , 0x1008 , &NMD::SYSCALL_16_ , 0,
22084 0x0 }, /* SYSCALL[16] */
22085 { instruction , 0 , 0 , 16,
22086 0xfffc , 0x100c , &NMD::HYPCALL_16_ , 0,
22087 CP0_ | VZ_ }, /* HYPCALL[16] */
22088 };
22089
22090
22091 NMD::Pool NMD::P16_RI[4] = {
22092 { reserved_block , 0 , 0 , 16,
22093 0xfff8 , 0x1000 , 0 , 0,
22094 0x0 }, /* P16.RI~*(0) */
22095 { pool , P16_SYSCALL , 2 , 16,
22096 0xfff8 , 0x1008 , 0 , 0,
22097 0x0 }, /* P16.SYSCALL */
22098 { instruction , 0 , 0 , 16,
22099 0xfff8 , 0x1010 , &NMD::BREAK_16_ , 0,
22100 0x0 }, /* BREAK[16] */
22101 { instruction , 0 , 0 , 16,
22102 0xfff8 , 0x1018 , &NMD::SDBBP_16_ , 0,
22103 EJTAG_ }, /* SDBBP[16] */
22104 };
22105
22106
22107 NMD::Pool NMD::P16_MV[2] = {
22108 { pool , P16_RI , 4 , 16,
22109 0xffe0 , 0x1000 , 0 , 0,
22110 0x0 }, /* P16.RI */
22111 { instruction , 0 , 0 , 16,
22112 0xfc00 , 0x1000 , &NMD::MOVE , &NMD::MOVE_cond ,
22113 0x0 }, /* MOVE */
22114 };
22115
22116
22117 NMD::Pool NMD::P16_SHIFT[2] = {
22118 { instruction , 0 , 0 , 16,
22119 0xfc08 , 0x3000 , &NMD::SLL_16_ , 0,
22120 0x0 }, /* SLL[16] */
22121 { instruction , 0 , 0 , 16,
22122 0xfc08 , 0x3008 , &NMD::SRL_16_ , 0,
22123 0x0 }, /* SRL[16] */
22124 };
22125
22126
22127 NMD::Pool NMD::POOL16C_00[4] = {
22128 { instruction , 0 , 0 , 16,
22129 0xfc0f , 0x5000 , &NMD::NOT_16_ , 0,
22130 0x0 }, /* NOT[16] */
22131 { instruction , 0 , 0 , 16,
22132 0xfc0f , 0x5004 , &NMD::XOR_16_ , 0,
22133 0x0 }, /* XOR[16] */
22134 { instruction , 0 , 0 , 16,
22135 0xfc0f , 0x5008 , &NMD::AND_16_ , 0,
22136 0x0 }, /* AND[16] */
22137 { instruction , 0 , 0 , 16,
22138 0xfc0f , 0x500c , &NMD::OR_16_ , 0,
22139 0x0 }, /* OR[16] */
22140 };
22141
22142
22143 NMD::Pool NMD::POOL16C_0[2] = {
22144 { pool , POOL16C_00 , 4 , 16,
22145 0xfc03 , 0x5000 , 0 , 0,
22146 0x0 }, /* POOL16C_00 */
22147 { reserved_block , 0 , 0 , 16,
22148 0xfc03 , 0x5002 , 0 , 0,
22149 0x0 }, /* POOL16C_0~*(1) */
22150 };
22151
22152
22153 NMD::Pool NMD::P16C[2] = {
22154 { pool , POOL16C_0 , 2 , 16,
22155 0xfc01 , 0x5000 , 0 , 0,
22156 0x0 }, /* POOL16C_0 */
22157 { instruction , 0 , 0 , 16,
22158 0xfc01 , 0x5001 , &NMD::LWXS_16_ , 0,
22159 0x0 }, /* LWXS[16] */
22160 };
22161
22162
22163 NMD::Pool NMD::P16_A1[2] = {
22164 { reserved_block , 0 , 0 , 16,
22165 0xfc40 , 0x7000 , 0 , 0,
22166 0x0 }, /* P16.A1~*(0) */
22167 { instruction , 0 , 0 , 16,
22168 0xfc40 , 0x7040 , &NMD::ADDIU_R1_SP_ , 0,
22169 0x0 }, /* ADDIU[R1.SP] */
22170 };
22171
22172
22173 NMD::Pool NMD::P_ADDIU_RS5_[2] = {
22174 { instruction , 0 , 0 , 16,
22175 0xffe8 , 0x9008 , &NMD::NOP_16_ , 0,
22176 0x0 }, /* NOP[16] */
22177 { instruction , 0 , 0 , 16,
22178 0xfc08 , 0x9008 , &NMD::ADDIU_RS5_ , &NMD::ADDIU_RS5__cond ,
22179 0x0 }, /* ADDIU[RS5] */
22180 };
22181
22182
22183 NMD::Pool NMD::P16_A2[2] = {
22184 { instruction , 0 , 0 , 16,
22185 0xfc08 , 0x9000 , &NMD::ADDIU_R2_ , 0,
22186 0x0 }, /* ADDIU[R2] */
22187 { pool , P_ADDIU_RS5_ , 2 , 16,
22188 0xfc08 , 0x9008 , 0 , 0,
22189 0x0 }, /* P.ADDIU[RS5] */
22190 };
22191
22192
22193 NMD::Pool NMD::P16_ADDU[2] = {
22194 { instruction , 0 , 0 , 16,
22195 0xfc01 , 0xb000 , &NMD::ADDU_16_ , 0,
22196 0x0 }, /* ADDU[16] */
22197 { instruction , 0 , 0 , 16,
22198 0xfc01 , 0xb001 , &NMD::SUBU_16_ , 0,
22199 0x0 }, /* SUBU[16] */
22200 };
22201
22202
22203 NMD::Pool NMD::P16_JRC[2] = {
22204 { branch_instruction , 0 , 0 , 16,
22205 0xfc1f , 0xd800 , &NMD::JRC , 0,
22206 0x0 }, /* JRC */
22207 { call_instruction , 0 , 0 , 16,
22208 0xfc1f , 0xd810 , &NMD::JALRC_16_ , 0,
22209 0x0 }, /* JALRC[16] */
22210 };
22211
22212
22213 NMD::Pool NMD::P16_BR1[2] = {
22214 { branch_instruction , 0 , 0 , 16,
22215 0xfc00 , 0xd800 , &NMD::BEQC_16_ , &NMD::BEQC_16__cond ,
22216 XMMS_ }, /* BEQC[16] */
22217 { branch_instruction , 0 , 0 , 16,
22218 0xfc00 , 0xd800 , &NMD::BNEC_16_ , &NMD::BNEC_16__cond ,
22219 XMMS_ }, /* BNEC[16] */
22220 };
22221
22222
22223 NMD::Pool NMD::P16_BR[2] = {
22224 { pool , P16_JRC , 2 , 16,
22225 0xfc0f , 0xd800 , 0 , 0,
22226 0x0 }, /* P16.JRC */
22227 { pool , P16_BR1 , 2 , 16,
22228 0xfc00 , 0xd800 , 0 , &NMD::P16_BR1_cond ,
22229 0x0 }, /* P16.BR1 */
22230 };
22231
22232
22233 NMD::Pool NMD::P16_SR[2] = {
22234 { instruction , 0 , 0 , 16,
22235 0xfd00 , 0x1c00 , &NMD::SAVE_16_ , 0,
22236 0x0 }, /* SAVE[16] */
22237 { return_instruction , 0 , 0 , 16,
22238 0xfd00 , 0x1d00 , &NMD::RESTORE_JRC_16_ , 0,
22239 0x0 }, /* RESTORE.JRC[16] */
22240 };
22241
22242
22243 NMD::Pool NMD::P16_4X4[4] = {
22244 { instruction , 0 , 0 , 16,
22245 0xfd08 , 0x3c00 , &NMD::ADDU_4X4_ , 0,
22246 XMMS_ }, /* ADDU[4X4] */
22247 { instruction , 0 , 0 , 16,
22248 0xfd08 , 0x3c08 , &NMD::MUL_4X4_ , 0,
22249 XMMS_ }, /* MUL[4X4] */
22250 { reserved_block , 0 , 0 , 16,
22251 0xfd08 , 0x3d00 , 0 , 0,
22252 0x0 }, /* P16.4X4~*(2) */
22253 { reserved_block , 0 , 0 , 16,
22254 0xfd08 , 0x3d08 , 0 , 0,
22255 0x0 }, /* P16.4X4~*(3) */
22256 };
22257
22258
22259 NMD::Pool NMD::P16_LB[4] = {
22260 { instruction , 0 , 0 , 16,
22261 0xfc0c , 0x5c00 , &NMD::LB_16_ , 0,
22262 0x0 }, /* LB[16] */
22263 { instruction , 0 , 0 , 16,
22264 0xfc0c , 0x5c04 , &NMD::SB_16_ , 0,
22265 0x0 }, /* SB[16] */
22266 { instruction , 0 , 0 , 16,
22267 0xfc0c , 0x5c08 , &NMD::LBU_16_ , 0,
22268 0x0 }, /* LBU[16] */
22269 { reserved_block , 0 , 0 , 16,
22270 0xfc0c , 0x5c0c , 0 , 0,
22271 0x0 }, /* P16.LB~*(3) */
22272 };
22273
22274
22275 NMD::Pool NMD::P16_LH[4] = {
22276 { instruction , 0 , 0 , 16,
22277 0xfc09 , 0x7c00 , &NMD::LH_16_ , 0,
22278 0x0 }, /* LH[16] */
22279 { instruction , 0 , 0 , 16,
22280 0xfc09 , 0x7c01 , &NMD::SH_16_ , 0,
22281 0x0 }, /* SH[16] */
22282 { instruction , 0 , 0 , 16,
22283 0xfc09 , 0x7c08 , &NMD::LHU_16_ , 0,
22284 0x0 }, /* LHU[16] */
22285 { reserved_block , 0 , 0 , 16,
22286 0xfc09 , 0x7c09 , 0 , 0,
22287 0x0 }, /* P16.LH~*(3) */
22288 };
22289
22290
22291 NMD::Pool NMD::P16[32] = {
22292 { pool , P16_MV , 2 , 16,
22293 0xfc00 , 0x1000 , 0 , 0,
22294 0x0 }, /* P16.MV */
22295 { pool , P16_SHIFT , 2 , 16,
22296 0xfc00 , 0x3000 , 0 , 0,
22297 0x0 }, /* P16.SHIFT */
22298 { pool , P16C , 2 , 16,
22299 0xfc00 , 0x5000 , 0 , 0,
22300 0x0 }, /* P16C */
22301 { pool , P16_A1 , 2 , 16,
22302 0xfc00 , 0x7000 , 0 , 0,
22303 0x0 }, /* P16.A1 */
22304 { pool , P16_A2 , 2 , 16,
22305 0xfc00 , 0x9000 , 0 , 0,
22306 0x0 }, /* P16.A2 */
22307 { pool , P16_ADDU , 2 , 16,
22308 0xfc00 , 0xb000 , 0 , 0,
22309 0x0 }, /* P16.ADDU */
22310 { instruction , 0 , 0 , 16,
22311 0xfc00 , 0xd000 , &NMD::LI_16_ , 0,
22312 0x0 }, /* LI[16] */
22313 { instruction , 0 , 0 , 16,
22314 0xfc00 , 0xf000 , &NMD::ANDI_16_ , 0,
22315 0x0 }, /* ANDI[16] */
22316 { instruction , 0 , 0 , 16,
22317 0xfc00 , 0x1400 , &NMD::LW_16_ , 0,
22318 0x0 }, /* LW[16] */
22319 { instruction , 0 , 0 , 16,
22320 0xfc00 , 0x3400 , &NMD::LW_SP_ , 0,
22321 0x0 }, /* LW[SP] */
22322 { instruction , 0 , 0 , 16,
22323 0xfc00 , 0x5400 , &NMD::LW_GP16_ , 0,
22324 0x0 }, /* LW[GP16] */
22325 { instruction , 0 , 0 , 16,
22326 0xfc00 , 0x7400 , &NMD::LW_4X4_ , 0,
22327 XMMS_ }, /* LW[4X4] */
22328 { instruction , 0 , 0 , 16,
22329 0xfc00 , 0x9400 , &NMD::SW_16_ , 0,
22330 0x0 }, /* SW[16] */
22331 { instruction , 0 , 0 , 16,
22332 0xfc00 , 0xb400 , &NMD::SW_SP_ , 0,
22333 0x0 }, /* SW[SP] */
22334 { instruction , 0 , 0 , 16,
22335 0xfc00 , 0xd400 , &NMD::SW_GP16_ , 0,
22336 0x0 }, /* SW[GP16] */
22337 { instruction , 0 , 0 , 16,
22338 0xfc00 , 0xf400 , &NMD::SW_4X4_ , 0,
22339 XMMS_ }, /* SW[4X4] */
22340 { branch_instruction , 0 , 0 , 16,
22341 0xfc00 , 0x1800 , &NMD::BC_16_ , 0,
22342 0x0 }, /* BC[16] */
22343 { call_instruction , 0 , 0 , 16,
22344 0xfc00 , 0x3800 , &NMD::BALC_16_ , 0,
22345 0x0 }, /* BALC[16] */
22346 { reserved_block , 0 , 0 , 16,
22347 0xfc00 , 0x5800 , 0 , 0,
22348 0x0 }, /* P16~*(10) */
22349 { reserved_block , 0 , 0 , 16,
22350 0xfc00 , 0x7800 , 0 , 0,
22351 0x0 }, /* P16~*(14) */
22352 { branch_instruction , 0 , 0 , 16,
22353 0xfc00 , 0x9800 , &NMD::BEQZC_16_ , 0,
22354 0x0 }, /* BEQZC[16] */
22355 { branch_instruction , 0 , 0 , 16,
22356 0xfc00 , 0xb800 , &NMD::BNEZC_16_ , 0,
22357 0x0 }, /* BNEZC[16] */
22358 { pool , P16_BR , 2 , 16,
22359 0xfc00 , 0xd800 , 0 , 0,
22360 0x0 }, /* P16.BR */
22361 { reserved_block , 0 , 0 , 16,
22362 0xfc00 , 0xf800 , 0 , 0,
22363 0x0 }, /* P16~*(30) */
22364 { pool , P16_SR , 2 , 16,
22365 0xfc00 , 0x1c00 , 0 , 0,
22366 0x0 }, /* P16.SR */
22367 { pool , P16_4X4 , 4 , 16,
22368 0xfc00 , 0x3c00 , 0 , 0,
22369 0x0 }, /* P16.4X4 */
22370 { pool , P16_LB , 4 , 16,
22371 0xfc00 , 0x5c00 , 0 , 0,
22372 0x0 }, /* P16.LB */
22373 { pool , P16_LH , 4 , 16,
22374 0xfc00 , 0x7c00 , 0 , 0,
22375 0x0 }, /* P16.LH */
22376 { reserved_block , 0 , 0 , 16,
22377 0xfc00 , 0x9c00 , 0 , 0,
22378 0x0 }, /* P16~*(19) */
22379 { instruction , 0 , 0 , 16,
22380 0xfc00 , 0xbc00 , &NMD::MOVEP , 0,
22381 XMMS_ }, /* MOVEP */
22382 { reserved_block , 0 , 0 , 16,
22383 0xfc00 , 0xdc00 , 0 , 0,
22384 0x0 }, /* P16~*(27) */
22385 { instruction , 0 , 0 , 16,
22386 0xfc00 , 0xfc00 , &NMD::MOVEP_REV_ , 0,
22387 XMMS_ }, /* MOVEP[REV] */
22388 };
22389
22390
22391 NMD::Pool NMD::MAJOR[2] = {
22392 { pool , P32 , 32 , 32,
22393 0x10000000, 0x00000000, 0 , 0,
22394 0x0 }, /* P32 */
22395 { pool , P16 , 32 , 16,
22396 0x1000 , 0x1000 , 0 , 0,
22397 0x0 }, /* P16 */
22398 };