]> git.proxmox.com Git - mirror_qemu.git/blame - disas/nanomips.cpp
block/export: Conditionally ignore set-context error
[mirror_qemu.git] / disas / nanomips.cpp
CommitLineData
89a955e8
AM
1/*
2 * Source file for nanoMIPS disassembler component of QEMU
3 *
8bae1509 4 * Copyright (C) 2018 Wave Computing, Inc.
89a955e8 5 * Copyright (C) 2018 Matthew Fortune <matthew.fortune@mips.com>
8bae1509 6 * Copyright (C) 2018 Aleksandar Markovic <amarkovic@wavecomp.com>
89a955e8
AM
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
8bae1509 10 * the Free Software Foundation, either version 2 of the License, or
89a955e8
AM
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/>.
8bae1509 20 *
89a955e8
AM
21 */
22
779bdf41
AM
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
89a955e8 30#include "qemu/osdep.h"
3979fca4 31#include "disas/dis-asm.h"
89a955e8
AM
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
44int 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
61int 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
140namespace 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
264std::string to_string(img::address a)
265{
266 char buffer[256];
8c33ea59 267 sprintf(buffer, "0x%" PRIx64, a);
89a955e8
AM
268 return buffer;
269}
270
271
272uint64 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
278int64 sign_extend(int64 data, int msb)
279{
280 uint64 shift = 63 - msb;
281 return (data << shift) >> shift;
282}
283
284
285uint64 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(
8c33ea59
SW
293 "Invalid register mapping index %" PRIu64
294 ", size of list = %zu",
89a955e8
AM
295 index, register_list_size));
296}
297
298
eabf76a0
AM
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 */
325uint64 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 */
361uint64 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
89a955e8 370/*
01fc2557
AM
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]
89a955e8 419 */
988d6c89 420uint64 NMD::decode_gpr_gpr3(uint64 d)
89a955e8
AM
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
6ab8abfc
AM
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 */
8191856b 460uint64 NMD::decode_gpr_gpr3_src_store(uint64 d)
89a955e8
AM
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
8e2919f6
AM
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 */
4671783a 490uint64 NMD::decode_gpr_gpr2_reg1(uint64 d)
89a955e8
AM
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
a21e0520
AM
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 */
ce0f2617 520uint64 NMD::decode_gpr_gpr2_reg2(uint64 d)
89a955e8
AM
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
eabf76a0
AM
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 */
549uint64 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
89a955e8
AM
557uint64 NMD::copy(uint64 d)
558{
559 return d;
560}
561
562
563int64 NMD::copy(int64 d)
564{
565 return d;
566}
567
568
569int64 NMD::neg_copy(uint64 d)
570{
571 return 0ll - d;
572}
573
574
575int64 NMD::neg_copy(int64 d)
576{
577 return -d;
578}
579
580
581/* strange wrapper around gpr3 */
582uint64 NMD::encode_rs3_and_check_rs3_ge_rt3(uint64 d)
583{
988d6c89 584return decode_gpr_gpr3(d);
89a955e8
AM
585}
586
587
588/* strange wrapper around gpr3 */
589uint64 NMD::encode_rs3_and_check_rs3_lt_rt3(uint64 d)
590{
988d6c89 591 return decode_gpr_gpr3(d);
89a955e8
AM
592}
593
594
595/* nop - done by extraction function */
596uint64 NMD::encode_s_from_address(uint64 d)
597{
598 return d;
599}
600
601
602/* nop - done by extraction function */
603uint64 NMD::encode_u_from_address(uint64 d)
604{
605 return d;
606}
607
608
609/* nop - done by extraction function */
610uint64 NMD::encode_s_from_s_hi(uint64 d)
611{
612 return d;
613}
614
615
616uint64 NMD::encode_count3_from_count(uint64 d)
617{
618 IMGASSERTONCE(d < 8);
619 return d == 0ull ? 8ull : d;
620}
621
622
623uint64 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 */
631int64 NMD::encode_eu_from_s_li16(uint64 d)
632{
633 IMGASSERTONCE(d < 128);
634 return d == 127 ? -1 : (int64)d;
635}
636
637
638uint64 NMD::encode_msbd_from_size(uint64 d)
639{
640 IMGASSERTONCE(d < 32);
641 return d + 1;
642}
643
644
645uint64 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
658uint64 NMD::encode_msbd_from_pos_and_size(uint64 d)
659{
660 IMGASSERTONCE(0);
661 return d;
662}
663
664
665/* save16 / restore16 ???? */
666uint64 NMD::encode_rt1_from_rt(uint64 d)
667{
668 return d ? 31 : 30;
669}
670
671
672/* ? */
673uint64 NMD::encode_lsb_from_pos_and_size(uint64 d)
674{
675 return d;
676}
677
678
679std::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
693std::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
8c33ea59
SW
706 throw std::runtime_error(img::format("Invalid GPR register index %" PRIu64,
707 reg));
89a955e8
AM
708}
709
710
711std::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
8c33ea59
SW
724 throw std::runtime_error(img::format("Invalid FPR register index %" PRIu64,
725 reg));
89a955e8
AM
726}
727
728
729std::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
8c33ea59
SW
739 throw std::runtime_error(img::format("Invalid AC register index %" PRIu64,
740 reg));
89a955e8
AM
741}
742
743
744std::string NMD::IMMEDIATE(uint64 value)
745{
8c33ea59 746 return img::format("0x%" PRIx64, value);
89a955e8
AM
747}
748
749
750std::string NMD::IMMEDIATE(int64 value)
751{
8c33ea59 752 return img::format("%" PRId64, value);
89a955e8
AM
753}
754
755
756std::string NMD::CPR(uint64 reg)
757{
758 /* needs more work */
8c33ea59 759 return img::format("CP%" PRIu64, reg);
89a955e8
AM
760}
761
762
763std::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
774uint64 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
789int 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 */
807int 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 */
cba42d61 838 dis = "ASE attribute mismatch";
89a955e8
AM
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
874uint64 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
882uint64 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
11b9732a 890uint64 NMD::extract_u_11_10_9_8_7_6_5_4_3__s3(uint64 instruction)
89a955e8
AM
891{
892 uint64 value = 0;
893 value |= extract_bits(instruction, 3, 9) << 3;
894 return value;
895}
896
897
898uint64 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
906uint64 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
11b9732a 914uint64 NMD::extract_u_17_to_1__s1(uint64 instruction)
89a955e8
AM
915{
916 uint64 value = 0;
917 value |= extract_bits(instruction, 1, 17) << 1;
918 return value;
919}
920
921
d3605cc0 922int64 NMD::extract_s__se9_20_19_18_17_16_15_14_13_12_11(uint64 instruction)
89a955e8
AM
923{
924 int64 value = 0;
925 value |= extract_bits(instruction, 11, 10);
926 value = sign_extend(value, 9);
927 return value;
928}
929
930
d3605cc0 931int64 NMD::extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(uint64 instruction)
89a955e8
AM
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
941uint64 NMD::extract_u_10(uint64 instruction)
942{
943 uint64 value = 0;
944 value |= extract_bits(instruction, 10, 1);
945 return value;
946}
947
948
949uint64 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
958uint64 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
966uint64 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
11b9732a 974uint64 NMD::extract_shiftx_10_9_8_7__s1(uint64 instruction)
89a955e8
AM
975{
976 uint64 value = 0;
977 value |= extract_bits(instruction, 7, 4) << 1;
978 return value;
979}
980
981
982uint64 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
990uint64 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
d3605cc0 998int64 NMD::extract_s__se31_0_11_to_2_20_to_12_s12(uint64 instruction)
89a955e8
AM
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
d3605cc0 1009int64 NMD::extract_s__se7_0_6_5_4_3_2_1_s1(uint64 instruction)
89a955e8
AM
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
1019uint64 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
1027uint64 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
1035uint64 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
11b9732a 1043uint64 NMD::extract_u_2_1__s1(uint64 instruction)
89a955e8
AM
1044{
1045 uint64 value = 0;
1046 value |= extract_bits(instruction, 1, 2) << 1;
1047 return value;
1048}
1049
1050
1051uint64 NMD::extract_stripe_6(uint64 instruction)
1052{
1053 uint64 value = 0;
1054 value |= extract_bits(instruction, 6, 1);
1055 return value;
1056}
1057
1058
0f74e61d 1059uint64 NMD::extract_ac_15_14(uint64 instruction)
89a955e8
AM
1060{
1061 uint64 value = 0;
1062 value |= extract_bits(instruction, 14, 2);
1063 return value;
1064}
1065
1066
1067uint64 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
1075uint64 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
d3605cc0 1083int64 NMD::extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(uint64 instruction)
89a955e8
AM
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
1093uint64 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
1101uint64 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
89a955e8
AM
1109uint64 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
1117uint64 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
89a955e8
AM
1125uint64 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
1133uint64 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
11b9732a 1141uint64 NMD::extract_u_20_to_3__s3(uint64 instruction)
89a955e8
AM
1142{
1143 uint64 value = 0;
1144 value |= extract_bits(instruction, 3, 18) << 3;
1145 return value;
1146}
1147
1148
11b9732a 1149uint64 NMD::extract_u_3_2_1_0__s2(uint64 instruction)
89a955e8
AM
1150{
1151 uint64 value = 0;
1152 value |= extract_bits(instruction, 0, 4) << 2;
1153 return value;
1154}
1155
1156
1157uint64 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
11b9732a 1165uint64 NMD::extract_u_2_1_0__s2(uint64 instruction)
89a955e8
AM
1166{
1167 uint64 value = 0;
1168 value |= extract_bits(instruction, 0, 3) << 2;
1169 return value;
1170}
1171
1172
89a955e8
AM
1173uint64 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
1181uint64 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
1189uint64 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
1197uint64 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
89a955e8
AM
1205uint64 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
89a955e8
AM
1213uint64 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
d3605cc0 1222int64 NMD::extract_s__se21_0_20_to_1_s1(uint64 instruction)
89a955e8
AM
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
1232uint64 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
1240uint64 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
1249uint64 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
1257uint64 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
d3605cc0 1265int64 NMD::extract_shift__se5_21_20_19_18_17_16(uint64 instruction)
89a955e8
AM
1266{
1267 int64 value = 0;
1268 value |= extract_bits(instruction, 16, 6);
1269 value = sign_extend(value, 5);
1270 return value;
1271}
1272
1273
89a955e8
AM
1274uint64 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
89a955e8
AM
1283uint64 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
89a955e8
AM
1291uint64 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
d3605cc0 1299int64 NMD::extract_s__se8_15_7_6_5_4_3_2_s2(uint64 instruction)
89a955e8
AM
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
1309uint64 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
52a96d22 1317uint64 NMD::extract_fs_20_19_18_17_16(uint64 instruction)
89a955e8
AM
1318{
1319 uint64 value = 0;
1320 value |= extract_bits(instruction, 16, 5);
1321 return value;
1322}
1323
1324
d3605cc0 1325int64 NMD::extract_s__se8_15_7_6_5_4_3_2_1_0(uint64 instruction)
89a955e8
AM
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
1335uint64 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
1343uint64 NMD::extract_rtl_11(uint64 instruction)
1344{
1345 uint64 value = 0;
1346 value |= extract_bits(instruction, 9, 1);
1347 return value;
1348}
1349
1350
1351uint64 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
89a955e8
AM
1359uint64 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
1367uint64 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
89a955e8
AM
1375uint64 NMD::extract_gp_2(uint64 instruction)
1376{
1377 uint64 value = 0;
1378 value |= extract_bits(instruction, 2, 1);
1379 return value;
1380}
1381
1382
1383uint64 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
17ce2f00 1391uint64 NMD::extract_ft_25_24_23_22_21(uint64 instruction)
89a955e8
AM
1392{
1393 uint64 value = 0;
1394 value |= extract_bits(instruction, 21, 5);
1395 return value;
1396}
1397
1398
1399uint64 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
1407uint64 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
89a955e8
AM
1415uint64 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
1424uint64 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
11b9732a 1432uint64 NMD::extract_u_5_4_3_2_1_0__s2(uint64 instruction)
89a955e8
AM
1433{
1434 uint64 value = 0;
1435 value |= extract_bits(instruction, 0, 6) << 2;
1436 return value;
1437}
1438
1439
89a955e8
AM
1440uint64 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
d3605cc0 1448int64 NMD::extract_s__se14_0_13_to_1_s1(uint64 instruction)
89a955e8
AM
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
1458uint64 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
11b9732a 1466uint64 NMD::extract_u_31_to_0__s32(uint64 instruction)
89a955e8
AM
1467{
1468 uint64 value = 0;
1469 value |= extract_bits(instruction, 0, 32) << 32;
1470 return value;
1471}
1472
1473
1474uint64 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
1482uint64 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
1490uint64 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
1498uint64 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
1506uint64 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
11b9732a 1514uint64 NMD::extract_u_6_5_4_3_2_1_0__s2(uint64 instruction)
89a955e8
AM
1515{
1516 uint64 value = 0;
1517 value |= extract_bits(instruction, 0, 7) << 2;
1518 return value;
1519}
1520
1521
1522uint64 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
89a955e8
AM
1530uint64 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
1538uint64 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
11b9732a 1546uint64 NMD::extract_u_7_6_5_4__s4(uint64 instruction)
89a955e8
AM
1547{
1548 uint64 value = 0;
1549 value |= extract_bits(instruction, 4, 4) << 4;
1550 return value;
1551}
1552
1553
d3605cc0 1554int64 NMD::extract_s__se8_15_7_6_5_4_3_s3(uint64 instruction)
89a955e8
AM
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
1564uint64 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
d3605cc0 1572int64 NMD::extract_s__se31_15_to_0_31_to_16(uint64 instruction)
89a955e8
AM
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
1582uint64 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
11b9732a 1590uint64 NMD::extract_u_17_to_2__s2(uint64 instruction)
89a955e8
AM
1591{
1592 uint64 value = 0;
1593 value |= extract_bits(instruction, 2, 16) << 2;
1594 return value;
1595}
1596
1597
b4c5d21c 1598uint64 NMD::extract_rd_15_14_13_12_11(uint64 instruction)
89a955e8
AM
1599{
1600 uint64 value = 0;
1601 value |= extract_bits(instruction, 11, 5);
1602 return value;
1603}
1604
1605
1606uint64 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
1614uint64 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
d3605cc0 1622int64 NMD::extract_s__se25_0_24_to_1_s1(uint64 instruction)
89a955e8
AM
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
89a955e8
AM
1632uint64 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
11b9732a 1640uint64 NMD::extract_u_3_8__s2(uint64 instruction)
89a955e8
AM
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
d0c60abd 1649uint64 NMD::extract_fd_15_14_13_12_11(uint64 instruction)
89a955e8
AM
1650{
1651 uint64 value = 0;
1652 value |= extract_bits(instruction, 11, 5);
1653 return value;
1654}
1655
1656
11b9732a 1657uint64 NMD::extract_u_4_3_2_1_0__s2(uint64 instruction)
89a955e8
AM
1658{
1659 uint64 value = 0;
1660 value |= extract_bits(instruction, 0, 5) << 2;
1661 return value;
1662}
1663
1664
1665uint64 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
1674uint64 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
1682uint64 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
11b9732a 1690uint64 NMD::extract_u_20_to_2__s2(uint64 instruction)
89a955e8
AM
1691{
1692 uint64 value = 0;
1693 value |= extract_bits(instruction, 2, 19) << 2;
1694 return value;
1695}
1696
1697
d3605cc0 1698int64 NMD::extract_s__se3_4_2_1_0(uint64 instruction)
89a955e8
AM
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
11b9732a 1708uint64 NMD::extract_u_3_2_1_0__s1(uint64 instruction)
89a955e8
AM
1709{
1710 uint64 value = 0;
1711 value |= extract_bits(instruction, 0, 4) << 1;
1712 return value;
1713}
1714
1715
89a955e8
AM
1716
1717bool 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
1724bool 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
1731bool NMD::BALRSC_cond(uint64 instruction)
1732{
1733 uint64 rt = extract_rt_25_24_23_22_21(instruction);
1734 return rt != 0;
1735}
1736
1737
1738bool 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);
11b9732a 1742 uint64 u = extract_u_3_2_1_0__s1(instruction);
89a955e8
AM
1743 return rs3 < rt3 && u != 0;
1744}
1745
1746
1747bool 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);
11b9732a 1751 uint64 u = extract_u_3_2_1_0__s1(instruction);
89a955e8
AM
1752 return rs3 >= rt3 && u != 0;
1753}
1754
1755
1756bool NMD::MOVE_cond(uint64 instruction)
1757{
1758 uint64 rt = extract_rt_9_8_7_6_5(instruction);
1759 return rt != 0;
1760}
1761
1762
1763bool NMD::P16_BR1_cond(uint64 instruction)
1764{
11b9732a 1765 uint64 u = extract_u_3_2_1_0__s1(instruction);
89a955e8
AM
1766 return u != 0;
1767}
1768
1769
1770bool 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
1777bool NMD::PREFE_cond(uint64 instruction)
1778{
1779 uint64 hint = extract_hint_25_24_23_22_21(instruction);
1780 return hint != 31;
1781}
1782
1783
1784bool NMD::SLTU_cond(uint64 instruction)
1785{
b4c5d21c 1786 uint64 rd = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
1802std::string NMD::ABS_D(uint64 instruction)
1803{
17ce2f00 1804 uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 1805 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
1824std::string NMD::ABS_S(uint64 instruction)
1825{
17ce2f00 1826 uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 1827 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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/*
fc95c241
AM
1837 * [DSP] ABSQ_S.PH rt, rs - Find absolute value of two fractional halfwords
1838 * with 16-bit saturation
89a955e8
AM
1839 *
1840 * 3 2 1
1841 * 10987654321098765432109876543210
1842 * 001000 0001000100111111
1843 * rt -----
1844 * rs -----
1845 */
1846std::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/*
fc95c241
AM
1859 * [DSP] ABSQ_S.QB rt, rs - Find absolute value of four fractional byte values
1860 * with 8-bit saturation
89a955e8
AM
1861 *
1862 * 3 2 1
1863 * 10987654321098765432109876543210
1864 * 001000 0000000100111111
1865 * rt -----
1866 * rs -----
1867 */
1868std::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/*
fc95c241
AM
1881 * [DSP] ABSQ_S.W rt, rs - Find absolute value of fractional word with 32-bit
1882 * saturation
89a955e8
AM
1883 *
1884 * 3 2 1
1885 * 10987654321098765432109876543210
1886 * 001000 0010000100111111
1887 * rt -----
1888 * rs -----
1889 */
1890std::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 */
1911std::string NMD::ACLR(uint64 instruction)
1912{
1913 uint64 bit_value = extract_bit_23_22_21(instruction);
89a955e8 1914 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 1915 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
1934std::string NMD::ADD(uint64 instruction)
1935{
1936 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 1937 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 1938 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
1959std::string NMD::ADD_D(uint64 instruction)
1960{
17ce2f00 1961 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 1962 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 1963 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
1984std::string NMD::ADD_S(uint64 instruction)
1985{
17ce2f00 1986 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 1987 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 1988 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
2007std::string NMD::ADDIU_32_(uint64 instruction)
2008{
2009 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2010 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2011 uint64 u_value = extract_u_15_to_0(instruction);
89a955e8
AM
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 */
2030std::string NMD::ADDIU_48_(uint64 instruction)
2031{
2032 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
d3605cc0 2033 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
89a955e8
AM
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 */
2051std::string NMD::ADDIU_GP48_(uint64 instruction)
2052{
2053 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
d3605cc0 2054 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
89a955e8
AM
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 */
2072std::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 */
2093std::string NMD::ADDIU_GP_W_(uint64 instruction)
2094{
2095 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11b9732a 2096 uint64 u_value = extract_u_20_to_2__s2(instruction);
89a955e8
AM
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 */
2114std::string NMD::ADDIU_NEG_(uint64 instruction)
2115{
2116 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2117 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2118 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
2137std::string NMD::ADDIU_R1_SP_(uint64 instruction)
2138{
11b9732a 2139 uint64 u_value = extract_u_5_4_3_2_1_0__s2(instruction);
89a955e8
AM
2140 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2141
988d6c89 2142 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8
AM
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 */
2158std::string NMD::ADDIU_R2_(uint64 instruction)
2159{
89a955e8
AM
2160 uint64 rt3_value = extract_rt3_9_8_7(instruction);
2161 uint64 rs3_value = extract_rs3_6_5_4(instruction);
75199b40 2162 uint64 u_value = extract_u_2_1_0__s2(instruction);
89a955e8 2163
988d6c89
AM
2164 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2165 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
2180std::string NMD::ADDIU_RS5_(uint64 instruction)
2181{
2182 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
d3605cc0 2183 int64 s_value = extract_s__se3_4_2_1_0(instruction);
89a955e8
AM
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 */
2202std::string NMD::ADDIUPC_32_(uint64 instruction)
2203{
2204 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
d3605cc0 2205 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
89a955e8
AM
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 */
2224std::string NMD::ADDIUPC_48_(uint64 instruction)
2225{
2226 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
d3605cc0 2227 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
89a955e8
AM
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/*
fc95c241 2237 * [DSP] ADDQ.PH rd, rt, rs - Add fractional halfword vectors
89a955e8
AM
2238 *
2239 * 3 2 1
2240 * 10987654321098765432109876543210
2241 * 001000 00000001101
2242 * rt -----
2243 * rs -----
2244 * rd -----
2245 */
2246std::string NMD::ADDQ_PH(uint64 instruction)
2247{
2248 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2249 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2250 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241
AM
2261 * [DSP] ADDQ_S.PH rd, rt, rs - Add fractional halfword vectors with 16-bit
2262 * saturation
89a955e8
AM
2263 *
2264 * 3 2 1
2265 * 10987654321098765432109876543210
2266 * 001000 10000001101
2267 * rt -----
2268 * rs -----
2269 * rd -----
2270 */
2271std::string NMD::ADDQ_S_PH(uint64 instruction)
2272{
2273 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2274 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2275 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241 2286 * [DSP] ADDQ_S.W rd, rt, rs - Add fractional words with 32-bit saturation
89a955e8
AM
2287 *
2288 * 3 2 1
2289 * 10987654321098765432109876543210
2290 * 001000 x1100000101
2291 * rt -----
2292 * rs -----
2293 * rd -----
2294 */
2295std::string NMD::ADDQ_S_W(uint64 instruction)
2296{
2297 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2298 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2299 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241
AM
2310 * [DSP] ADDQH.PH rd, rt, rs - Add fractional halfword vectors and shift
2311 * right to halve results
89a955e8
AM
2312 *
2313 * 3 2 1
2314 * 10987654321098765432109876543210
2315 * 001000 00001001101
2316 * rt -----
2317 * rs -----
2318 * rd -----
2319 */
2320std::string NMD::ADDQH_PH(uint64 instruction)
2321{
2322 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2323 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2324 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241
AM
2335 * [DSP] ADDQH_R.PH rd, rt, rs - Add fractional halfword vectors and shift
2336 * right to halve results with rounding
89a955e8
AM
2337 *
2338 * 3 2 1
2339 * 10987654321098765432109876543210
2340 * 001000 10001001101
2341 * rt -----
2342 * rs -----
2343 * rd -----
2344 */
2345std::string NMD::ADDQH_R_PH(uint64 instruction)
2346{
2347 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2348 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2349 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241
AM
2360 * [DSP] ADDQH_R.W rd, rt, rs - Add fractional words and shift right to halve
2361 * results with rounding
89a955e8
AM
2362 *
2363 * 3 2 1
2364 * 10987654321098765432109876543210
2365 * 001000 00010001101
2366 * rt -----
2367 * rs -----
2368 * rd -----
2369 */
2370std::string NMD::ADDQH_R_W(uint64 instruction)
2371{
2372 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2373 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2374 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241
AM
2385 * [DSP] ADDQH.W rd, rt, rs - Add fractional words and shift right to halve
2386 * results
89a955e8
AM
2387 *
2388 * 3 2 1
2389 * 10987654321098765432109876543210
2390 * 001000 10010001101
2391 * rt -----
2392 * rs -----
2393 * rd -----
2394 */
2395std::string NMD::ADDQH_W(uint64 instruction)
2396{
2397 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2398 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2399 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241 2410 * [DSP] ADDSC rd, rt, rs - Add two signed words and set carry bit
89a955e8
AM
2411 *
2412 * 3 2 1
2413 * 10987654321098765432109876543210
2414 * 001000 x1110000101
2415 * rt -----
2416 * rs -----
2417 * rd -----
2418 */
2419std::string NMD::ADDSC(uint64 instruction)
2420{
2421 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2422 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2423 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
2442std::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
988d6c89
AM
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));
89a955e8
AM
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 */
2466std::string NMD::ADDU_32_(uint64 instruction)
2467{
2468 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2469 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2470 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
2490std::string NMD::ADDU_4X4_(uint64 instruction)
2491{
89a955e8 2492 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
86b5f803 2493 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
89a955e8 2494
131e9b92
AM
2495 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
2496 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
89a955e8
AM
2497
2498 return img::format("ADDU %s, %s", rs4, rt4);
2499}
2500
2501
2502/*
fc95c241 2503 * [DSP] ADDU.PH rd, rt, rs - Add two pairs of unsigned halfwords
89a955e8
AM
2504 *
2505 * 3 2 1
2506 * 10987654321098765432109876543210
2507 * 001000 00100001101
2508 * rt -----
2509 * rs -----
2510 * rd -----
2511 */
2512std::string NMD::ADDU_PH(uint64 instruction)
2513{
2514 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2515 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2516 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
2536std::string NMD::ADDU_QB(uint64 instruction)
2537{
2538 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2539 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2540 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241
AM
2551 * [DSP] ADDU_S.PH rd, rt, rs - Add two pairs of unsigned halfwords with 16-bit
2552 * saturation
89a955e8
AM
2553 *
2554 * 3 2 1
2555 * 10987654321098765432109876543210
2556 * 001000 10100001101
2557 * rt -----
2558 * rs -----
2559 * rd -----
2560 */
2561std::string NMD::ADDU_S_PH(uint64 instruction)
2562{
2563 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2564 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2565 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
2585std::string NMD::ADDU_S_QB(uint64 instruction)
2586{
2587 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2588 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2589 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
2610std::string NMD::ADDUH_QB(uint64 instruction)
2611{
2612 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2613 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2614 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
2635std::string NMD::ADDUH_R_QB(uint64 instruction)
2636{
2637 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2638 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2639 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
2658std::string NMD::ADDWC(uint64 instruction)
2659{
2660 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2661 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2662 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
2682std::string NMD::ALUIPC(uint64 instruction)
2683{
2684 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
d3605cc0 2685 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
89a955e8
AM
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 */
2703std::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
988d6c89
AM
2708 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2709 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
2725std::string NMD::AND_32_(uint64 instruction)
2726{
2727 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2728 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2729 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
2748std::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
988d6c89
AM
2754 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
2755 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
2772std::string NMD::ANDI_32_(uint64 instruction)
2773{
2774 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2775 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2776 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
2796std::string NMD::APPEND(uint64 instruction)
2797{
2798 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 2799 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 2800 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
89a955e8
AM
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 */
2820std::string NMD::ASET(uint64 instruction)
2821{
2822 uint64 bit_value = extract_bit_23_22_21(instruction);
89a955e8 2823 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 2824 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
2844std::string NMD::BALC_16_(uint64 instruction)
2845{
d3605cc0 2846 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
89a955e8
AM
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 */
2864std::string NMD::BALC_32_(uint64 instruction)
2865{
d3605cc0 2866 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
89a955e8
AM
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 */
2884std::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 */
2906std::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);
d3605cc0 2910 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
89a955e8
AM
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 */
2930std::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);
d3605cc0 2934 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
89a955e8
AM
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 */
2954std::string NMD::BC_16_(uint64 instruction)
2955{
d3605cc0 2956 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
89a955e8
AM
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 */
2974std::string NMD::BC_32_(uint64 instruction)
2975{
d3605cc0 2976 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
89a955e8
AM
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 */
2994std::string NMD::BC1EQZC(uint64 instruction)
2995{
17ce2f00 2996 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
75199b40 2997 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
89a955e8
AM
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 */
3016std::string NMD::BC1NEZC(uint64 instruction)
3017{
17ce2f00 3018 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
75199b40 3019 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
89a955e8
AM
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 */
3038std::string NMD::BC2EQZC(uint64 instruction)
3039{
89a955e8 3040 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
75199b40 3041 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
89a955e8
AM
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 */
3060std::string NMD::BC2NEZC(uint64 instruction)
3061{
89a955e8 3062 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
75199b40 3063 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
89a955e8
AM
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 */
3082std::string NMD::BEQC_16_(uint64 instruction)
3083{
89a955e8
AM
3084 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3085 uint64 rs3_value = extract_rs3_6_5_4(instruction);
75199b40 3086 uint64 u_value = extract_u_3_2_1_0__s1(instruction);
89a955e8
AM
3087
3088 std::string rs3 = GPR(encode_rs3_and_check_rs3_lt_rt3(rs3_value));
988d6c89 3089 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8
AM
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 */
3106std::string NMD::BEQC_32_(uint64 instruction)
3107{
3108 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 3109 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 3110 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
89a955e8
AM
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 */
3130std::string NMD::BEQIC(uint64 instruction)
3131{
3132 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 3133 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
75199b40 3134 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
89a955e8
AM
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 */
3154std::string NMD::BEQZC_16_(uint64 instruction)
3155{
89a955e8 3156 uint64 rt3_value = extract_rt3_9_8_7(instruction);
75199b40 3157 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
89a955e8 3158
988d6c89 3159 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8
AM
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 */
3176std::string NMD::BGEC(uint64 instruction)
3177{
3178 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 3179 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 3180 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
89a955e8
AM
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 */
3200std::string NMD::BGEIC(uint64 instruction)
3201{
3202 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 3203 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
75199b40 3204 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
89a955e8
AM
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 */
3224std::string NMD::BGEIUC(uint64 instruction)
3225{
3226 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 3227 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
75199b40 3228 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
89a955e8
AM
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 */
3248std::string NMD::BGEUC(uint64 instruction)
3249{
3250 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 3251 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 3252 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
89a955e8
AM
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 */
3272std::string NMD::BLTC(uint64 instruction)
3273{
3274 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 3275 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 3276 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
89a955e8
AM
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 */
3296std::string NMD::BLTIC(uint64 instruction)
3297{
3298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 3299 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
75199b40 3300 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
89a955e8
AM
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 */
3320std::string NMD::BLTIUC(uint64 instruction)
3321{
3322 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 3323 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
75199b40 3324 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
89a955e8
AM
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 */
3344std::string NMD::BLTUC(uint64 instruction)
3345{
3346 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 3347 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 3348 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
89a955e8
AM
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 */
3368std::string NMD::BNEC_16_(uint64 instruction)
3369{
89a955e8
AM
3370 uint64 rt3_value = extract_rt3_9_8_7(instruction);
3371 uint64 rs3_value = extract_rs3_6_5_4(instruction);
75199b40 3372 uint64 u_value = extract_u_3_2_1_0__s1(instruction);
89a955e8
AM
3373
3374 std::string rs3 = GPR(encode_rs3_and_check_rs3_ge_rt3(rs3_value));
988d6c89 3375 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8
AM
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 */
3392std::string NMD::BNEC_32_(uint64 instruction)
3393{
3394 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 3395 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 3396 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
89a955e8
AM
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 */
3416std::string NMD::BNEIC(uint64 instruction)
3417{
3418 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 3419 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
75199b40 3420 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
89a955e8
AM
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 */
3440std::string NMD::BNEZC_16_(uint64 instruction)
3441{
89a955e8 3442 uint64 rt3_value = extract_rt3_9_8_7(instruction);
75199b40 3443 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
89a955e8 3444
988d6c89 3445 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8
AM
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/*
5c65eed6
AM
3453 * [DSP] BPOSGE32C offset - Branch on greater than or equal to value 32 in
3454 * DSPControl Pos field
89a955e8
AM
3455 *
3456 * 3 2 1
3457 * 10987654321098765432109876543210
5c65eed6
AM
3458 * 100010xxxxx0010001
3459 * s[13:1] -------------
3460 * s[14] -
89a955e8
AM
3461 */
3462std::string NMD::BPOSGE32C(uint64 instruction)
3463{
d3605cc0 3464 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
89a955e8
AM
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 */
3482std::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 */
3502std::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 */
3522std::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 */
3542std::string NMD::CACHE(uint64 instruction)
3543{
89a955e8
AM
3544 uint64 op_value = extract_op_25_24_23_22_21(instruction);
3545 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 3546 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
3566std::string NMD::CACHEE(uint64 instruction)
3567{
89a955e8
AM
3568 uint64 op_value = extract_op_25_24_23_22_21(instruction);
3569 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 3570 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
3590std::string NMD::CEIL_L_D(uint64 instruction)
3591{
17ce2f00 3592 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 3593 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
3612std::string NMD::CEIL_L_S(uint64 instruction)
3613{
17ce2f00 3614 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 3615 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
3634std::string NMD::CEIL_W_D(uint64 instruction)
3635{
17ce2f00 3636 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 3637 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
3656std::string NMD::CEIL_W_S(uint64 instruction)
3657{
17ce2f00 3658 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 3659 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
3678std::string NMD::CFC1(uint64 instruction)
3679{
89a955e8 3680 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 3681 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
3700std::string NMD::CFC2(uint64 instruction)
3701{
89a955e8 3702 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 3703 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
3722std::string NMD::CLASS_D(uint64 instruction)
3723{
17ce2f00 3724 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 3725 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
3744std::string NMD::CLASS_S(uint64 instruction)
3745{
17ce2f00 3746 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 3747 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
3766std::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 */
3788std::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 */
3810std::string NMD::CMP_AF_D(uint64 instruction)
3811{
17ce2f00 3812 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 3813 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 3814 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
3834std::string NMD::CMP_AF_S(uint64 instruction)
3835{
17ce2f00 3836 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 3837 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 3838 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
3858std::string NMD::CMP_EQ_D(uint64 instruction)
3859{
17ce2f00 3860 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 3861 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 3862 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6 3873 * [DSP] CMP.EQ.PH rs, rt - Compare vectors of signed integer halfword values
89a955e8
AM
3874 *
3875 * 3 2 1
3876 * 10987654321098765432109876543210
5c65eed6 3877 * 001000 xxxxxx0000000101
89a955e8
AM
3878 * rt -----
3879 * rs -----
89a955e8
AM
3880 */
3881std::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 */
3903std::string NMD::CMP_EQ_S(uint64 instruction)
3904{
17ce2f00 3905 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 3906 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 3907 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
3927std::string NMD::CMP_LE_D(uint64 instruction)
3928{
17ce2f00 3929 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 3930 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 3931 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6 3942 * [DSP] CMP.LE.PH rs, rt - Compare vectors of signed integer halfword values
89a955e8
AM
3943 *
3944 * 3 2 1
3945 * 10987654321098765432109876543210
5c65eed6 3946 * 001000 xxxxxx0010000101
89a955e8
AM
3947 * rt -----
3948 * rs -----
89a955e8
AM
3949 */
3950std::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 */
3972std::string NMD::CMP_LE_S(uint64 instruction)
3973{
17ce2f00 3974 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 3975 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 3976 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
3996std::string NMD::CMP_LT_D(uint64 instruction)
3997{
17ce2f00 3998 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 3999 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4000 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6 4011 * [DSP] CMP.LT.PH rs, rt - Compare vectors of signed integer halfword values
89a955e8
AM
4012 *
4013 * 3 2 1
4014 * 10987654321098765432109876543210
5c65eed6 4015 * 001000 xxxxxx0001000101
89a955e8
AM
4016 * rt -----
4017 * rs -----
89a955e8
AM
4018 */
4019std::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 */
4041std::string NMD::CMP_LT_S(uint64 instruction)
4042{
17ce2f00 4043 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4044 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4045 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4065std::string NMD::CMP_NE_D(uint64 instruction)
4066{
17ce2f00 4067 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4068 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4069 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4089std::string NMD::CMP_NE_S(uint64 instruction)
4090{
17ce2f00 4091 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4092 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4093 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4113std::string NMD::CMP_OR_D(uint64 instruction)
4114{
17ce2f00 4115 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4116 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4117 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4137std::string NMD::CMP_OR_S(uint64 instruction)
4138{
17ce2f00 4139 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4140 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4141 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4161std::string NMD::CMP_SAF_D(uint64 instruction)
4162{
17ce2f00 4163 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4164 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4165 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4185std::string NMD::CMP_SAF_S(uint64 instruction)
4186{
17ce2f00 4187 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4188 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4189 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4209std::string NMD::CMP_SEQ_D(uint64 instruction)
4210{
17ce2f00 4211 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4212 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4213 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4233std::string NMD::CMP_SEQ_S(uint64 instruction)
4234{
17ce2f00 4235 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4236 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4237 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4257std::string NMD::CMP_SLE_D(uint64 instruction)
4258{
17ce2f00 4259 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4260 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4261 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4281std::string NMD::CMP_SLE_S(uint64 instruction)
4282{
17ce2f00 4283 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4284 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4285 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4305std::string NMD::CMP_SLT_D(uint64 instruction)
4306{
17ce2f00 4307 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4308 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4309 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4329std::string NMD::CMP_SLT_S(uint64 instruction)
4330{
17ce2f00 4331 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4332 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4333 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4353std::string NMD::CMP_SNE_D(uint64 instruction)
4354{
17ce2f00 4355 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4356 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4357 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4377std::string NMD::CMP_SNE_S(uint64 instruction)
4378{
17ce2f00 4379 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4380 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4381 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4401std::string NMD::CMP_SOR_D(uint64 instruction)
4402{
17ce2f00 4403 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4404 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4405 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4425std::string NMD::CMP_SOR_S(uint64 instruction)
4426{
17ce2f00 4427 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4428 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4429 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4449std::string NMD::CMP_SUEQ_D(uint64 instruction)
4450{
17ce2f00 4451 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4452 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4453 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4473std::string NMD::CMP_SUEQ_S(uint64 instruction)
4474{
17ce2f00 4475 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4476 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4477 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4497std::string NMD::CMP_SULE_D(uint64 instruction)
4498{
17ce2f00 4499 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4500 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4501 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4521std::string NMD::CMP_SULE_S(uint64 instruction)
4522{
17ce2f00 4523 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4524 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4525 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4545std::string NMD::CMP_SULT_D(uint64 instruction)
4546{
17ce2f00 4547 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4548 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4549 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4569std::string NMD::CMP_SULT_S(uint64 instruction)
4570{
17ce2f00 4571 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4572 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4573 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4593std::string NMD::CMP_SUN_D(uint64 instruction)
4594{
17ce2f00 4595 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4596 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4597 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4617std::string NMD::CMP_SUNE_D(uint64 instruction)
4618{
17ce2f00 4619 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4620 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4621 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4641std::string NMD::CMP_SUNE_S(uint64 instruction)
4642{
17ce2f00 4643 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4644 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4645 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4665std::string NMD::CMP_SUN_S(uint64 instruction)
4666{
17ce2f00 4667 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4668 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4669 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4689std::string NMD::CMP_UEQ_D(uint64 instruction)
4690{
17ce2f00 4691 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4692 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4693 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4713std::string NMD::CMP_UEQ_S(uint64 instruction)
4714{
17ce2f00 4715 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4716 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4717 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4737std::string NMD::CMP_ULE_D(uint64 instruction)
4738{
17ce2f00 4739 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4740 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4741 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4761std::string NMD::CMP_ULE_S(uint64 instruction)
4762{
17ce2f00 4763 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4764 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4765 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4785std::string NMD::CMP_ULT_D(uint64 instruction)
4786{
17ce2f00 4787 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4788 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4789 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4809std::string NMD::CMP_ULT_S(uint64 instruction)
4810{
17ce2f00 4811 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4812 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4813 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4833std::string NMD::CMP_UN_D(uint64 instruction)
4834{
17ce2f00 4835 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4836 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4837 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4857std::string NMD::CMP_UNE_D(uint64 instruction)
4858{
17ce2f00 4859 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4860 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4861 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4881std::string NMD::CMP_UNE_S(uint64 instruction)
4882{
17ce2f00 4883 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4884 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4885 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
4905std::string NMD::CMP_UN_S(uint64 instruction)
4906{
17ce2f00 4907 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 4908 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 4909 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
4920 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4921 * four bytes and write result to GPR and DSPControl
89a955e8
AM
4922 *
4923 * 3 2 1
4924 * 10987654321098765432109876543210
5c65eed6 4925 * 001000 x0110000101
89a955e8
AM
4926 * rt -----
4927 * rs -----
4928 * rd -----
4929 */
4930std::string NMD::CMPGDU_EQ_QB(uint64 instruction)
4931{
4932 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 4933 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 4934 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
4945 * [DSP] CMPGDU.LE.QB rd, rs, rt - Compare unsigned vector of
4946 * four bytes and write result to GPR and DSPControl
89a955e8
AM
4947 *
4948 * 3 2 1
4949 * 10987654321098765432109876543210
5c65eed6 4950 * 001000 x1000000101
89a955e8
AM
4951 * rt -----
4952 * rs -----
4953 * rd -----
4954 */
4955std::string NMD::CMPGDU_LE_QB(uint64 instruction)
4956{
4957 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 4958 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 4959 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
4970 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4971 * four bytes and write result to GPR and DSPControl
89a955e8
AM
4972 *
4973 * 3 2 1
4974 * 10987654321098765432109876543210
5c65eed6 4975 * 001000 x0111000101
89a955e8
AM
4976 * rt -----
4977 * rs -----
4978 * rd -----
4979 */
4980std::string NMD::CMPGDU_LT_QB(uint64 instruction)
4981{
4982 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 4983 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 4984 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
4995 * [DSP] CMPGU.EQ.QB rd, rs, rt - Compare vectors of unsigned
4996 * byte values and write result to a GPR
89a955e8
AM
4997 *
4998 * 3 2 1
4999 * 10987654321098765432109876543210
5c65eed6 5000 * 001000 x0011000101
89a955e8
AM
5001 * rt -----
5002 * rs -----
5003 * rd -----
5004 */
5005std::string NMD::CMPGU_EQ_QB(uint64 instruction)
5006{
5007 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 5008 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 5009 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
5020 * [DSP] CMPGU.LE.QB rd, rs, rt - Compare vectors of unsigned
5021 * byte values and write result to a GPR
89a955e8
AM
5022 *
5023 * 3 2 1
5024 * 10987654321098765432109876543210
5c65eed6 5025 * 001000 x0101000101
89a955e8
AM
5026 * rt -----
5027 * rs -----
5028 * rd -----
5029 */
5030std::string NMD::CMPGU_LE_QB(uint64 instruction)
5031{
5032 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 5033 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 5034 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
5045 * [DSP] CMPGU.LT.QB rd, rs, rt - Compare vectors of unsigned
5046 * byte values and write result to a GPR
89a955e8
AM
5047 *
5048 * 3 2 1
5049 * 10987654321098765432109876543210
5c65eed6 5050 * 001000 x0100000101
89a955e8
AM
5051 * rt -----
5052 * rs -----
5053 * rd -----
5054 */
5055std::string NMD::CMPGU_LT_QB(uint64 instruction)
5056{
5057 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 5058 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 5059 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
5070 * [DSP] CMPU.EQ.QB rd, rs, rt - Compare vectors of unsigned
5071 * byte values
89a955e8
AM
5072 *
5073 * 3 2 1
5074 * 10987654321098765432109876543210
5c65eed6 5075 * 001000 xxxxxx1001000101
89a955e8
AM
5076 * rt -----
5077 * rs -----
89a955e8
AM
5078 */
5079std::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/*
5c65eed6
AM
5092 * [DSP] CMPU.LE.QB rd, rs, rt - Compare vectors of unsigned
5093 * byte values
89a955e8
AM
5094 *
5095 * 3 2 1
5096 * 10987654321098765432109876543210
5c65eed6 5097 * 001000 xxxxxx1011000101
89a955e8
AM
5098 * rt -----
5099 * rs -----
89a955e8
AM
5100 */
5101std::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/*
5c65eed6
AM
5114 * [DSP] CMPU.LT.QB rd, rs, rt - Compare vectors of unsigned
5115 * byte values
89a955e8
AM
5116 *
5117 * 3 2 1
5118 * 10987654321098765432109876543210
5c65eed6 5119 * 001000 xxxxxx1010000101
89a955e8
AM
5120 * rt -----
5121 * rs -----
89a955e8
AM
5122 */
5123std::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 */
5145std::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 */
5165std::string NMD::CTC1(uint64 instruction)
5166{
89a955e8 5167 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 5168 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5187std::string NMD::CTC2(uint64 instruction)
5188{
89a955e8 5189 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 5190 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5209std::string NMD::CVT_D_L(uint64 instruction)
5210{
17ce2f00 5211 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5212 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5231std::string NMD::CVT_D_S(uint64 instruction)
5232{
17ce2f00 5233 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5234 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5253std::string NMD::CVT_D_W(uint64 instruction)
5254{
17ce2f00 5255 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5256 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5275std::string NMD::CVT_L_D(uint64 instruction)
5276{
17ce2f00 5277 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5278 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5297std::string NMD::CVT_L_S(uint64 instruction)
5298{
17ce2f00 5299 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5300 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5319std::string NMD::CVT_S_D(uint64 instruction)
5320{
17ce2f00 5321 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5322 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5341std::string NMD::CVT_S_L(uint64 instruction)
5342{
17ce2f00 5343 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5344 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5363std::string NMD::CVT_S_PL(uint64 instruction)
5364{
17ce2f00 5365 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5366 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5385std::string NMD::CVT_S_PU(uint64 instruction)
5386{
17ce2f00 5387 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5388 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5407std::string NMD::CVT_S_W(uint64 instruction)
5408{
17ce2f00 5409 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5410 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5429std::string NMD::CVT_W_D(uint64 instruction)
5430{
17ce2f00 5431 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5432 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5451std::string NMD::CVT_W_S(uint64 instruction)
5452{
17ce2f00 5453 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5454 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
5473std::string NMD::DADDIU_48_(uint64 instruction)
5474{
5475 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
d3605cc0 5476 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
89a955e8
AM
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 */
5495std::string NMD::DADDIU_NEG_(uint64 instruction)
5496{
5497 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 5498 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 5499 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
5519std::string NMD::DADDIU_U12_(uint64 instruction)
5520{
5521 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 5522 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 5523 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
5543std::string NMD::DADD(uint64 instruction)
5544{
5545 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 5546 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 5547 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
5567std::string NMD::DADDU(uint64 instruction)
5568{
5569 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 5570 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 5571 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
5591std::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 */
5613std::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 */
5635std::string NMD::DDIV(uint64 instruction)
5636{
5637 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 5638 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 5639 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
5659std::string NMD::DDIVU(uint64 instruction)
5660{
5661 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 5662 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 5663 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
5683std::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 */
5701std::string NMD::DEXTM(uint64 instruction)
5702{
5703 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 5704 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
89a955e8
AM
5705 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5706 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
89a955e8
AM
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 */
5727std::string NMD::DEXT(uint64 instruction)
5728{
5729 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 5730 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
89a955e8
AM
5731 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5732 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
89a955e8
AM
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 */
5753std::string NMD::DEXTU(uint64 instruction)
5754{
5755 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 5756 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
89a955e8
AM
5757 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5758 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
89a955e8
AM
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 */
5779std::string NMD::DINSM(uint64 instruction)
5780{
5781 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 5782 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
89a955e8
AM
5783 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5784 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
89a955e8
AM
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 */
5807std::string NMD::DINS(uint64 instruction)
5808{
5809 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 5810 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
89a955e8
AM
5811 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5812 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
89a955e8
AM
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 */
5835std::string NMD::DINSU(uint64 instruction)
5836{
5837 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 5838 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
89a955e8
AM
5839 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5840 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
89a955e8
AM
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 */
5863std::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 */
5883std::string NMD::DIV(uint64 instruction)
5884{
5885 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 5886 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 5887 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
5907std::string NMD::DIV_D(uint64 instruction)
5908{
17ce2f00 5909 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5910 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 5911 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
5931std::string NMD::DIV_S(uint64 instruction)
5932{
17ce2f00 5933 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 5934 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 5935 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
5955std::string NMD::DIVU(uint64 instruction)
5956{
5957 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 5958 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 5959 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
5979std::string NMD::DLSA(uint64 instruction)
5980{
5981 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 5982 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
b4c5d21c 5983 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8 5984 uint64 u2_value = extract_u2_10_9(instruction);
89a955e8
AM
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 */
6005std::string NMD::DLUI_48_(uint64 instruction)
6006{
6007 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
11b9732a 6008 uint64 u_value = extract_u_31_to_0__s32(instruction);
89a955e8
AM
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 */
6027std::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 */
6051std::string NMD::DMFC1(uint64 instruction)
6052{
6053 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
52a96d22 6054 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
6073std::string NMD::DMFC2(uint64 instruction)
6074{
89a955e8 6075 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 6076 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
6095std::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 */
6119std::string NMD::DMOD(uint64 instruction)
6120{
6121 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6122 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6123 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
6143std::string NMD::DMODU(uint64 instruction)
6144{
6145 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6146 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6147 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
6167std::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 */
6191std::string NMD::DMTC1(uint64 instruction)
6192{
6193 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
52a96d22 6194 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
6213std::string NMD::DMTC2(uint64 instruction)
6214{
89a955e8 6215 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 6216 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
6235std::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 */
6259std::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 */
6279std::string NMD::DMUH(uint64 instruction)
6280{
6281 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6282 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6283 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
6303std::string NMD::DMUHU(uint64 instruction)
6304{
6305 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6306 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6307 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
6327std::string NMD::DMUL(uint64 instruction)
6328{
6329 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6330 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6331 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
6351std::string NMD::DMULU(uint64 instruction)
6352{
6353 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6354 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6355 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
6366 * [DSP] DPA.W.PH ac, rs, rt - Dot product with accumulate on
6367 * vector integer halfword elements
89a955e8
AM
6368 *
6369 * 3 2 1
6370 * 10987654321098765432109876543210
5c65eed6 6371 * 001000 00000010111111
89a955e8
AM
6372 * rt -----
6373 * rs -----
5c65eed6 6374 * ac --
89a955e8
AM
6375 */
6376std::string NMD::DPA_W_PH(uint64 instruction)
6377{
6378 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6379 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6380 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6400std::string NMD::DPAQ_SA_L_W(uint64 instruction)
6401{
6402 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6403 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6404 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6424std::string NMD::DPAQ_S_W_PH(uint64 instruction)
6425{
6426 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6427 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6428 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6448std::string NMD::DPAQX_SA_W_PH(uint64 instruction)
6449{
6450 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6451 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6452 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6472std::string NMD::DPAQX_S_W_PH(uint64 instruction)
6473{
6474 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6475 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6476 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6496std::string NMD::DPAU_H_QBL(uint64 instruction)
6497{
6498 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6499 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6500 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6520std::string NMD::DPAU_H_QBR(uint64 instruction)
6521{
6522 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6523 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6524 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6544std::string NMD::DPAX_W_PH(uint64 instruction)
6545{
6546 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6547 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6548 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6568std::string NMD::DPS_W_PH(uint64 instruction)
6569{
6570 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6571 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6572 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6592std::string NMD::DPSQ_SA_L_W(uint64 instruction)
6593{
6594 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6595 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6596 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6616std::string NMD::DPSQ_S_W_PH(uint64 instruction)
6617{
6618 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6619 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6620 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6640std::string NMD::DPSQX_SA_W_PH(uint64 instruction)
6641{
6642 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6643 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6644 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6664std::string NMD::DPSQX_S_W_PH(uint64 instruction)
6665{
6666 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6667 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6668 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6688std::string NMD::DPSU_H_QBL(uint64 instruction)
6689{
6690 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6691 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6692 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6712std::string NMD::DPSU_H_QBR(uint64 instruction)
6713{
6714 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6715 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6716 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6736std::string NMD::DPSX_W_PH(uint64 instruction)
6737{
6738 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6739 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 6740 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
6760std::string NMD::DROTR(uint64 instruction)
6761{
6762 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6763 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6764 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
89a955e8
AM
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 */
6784std::string NMD::DROTR32(uint64 instruction)
6785{
6786 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6787 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6788 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
89a955e8
AM
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 */
6808std::string NMD::DROTRV(uint64 instruction)
6809{
6810 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6811 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6812 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
6832std::string NMD::DROTX(uint64 instruction)
6833{
6834 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6835 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803
AM
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);
89a955e8
AM
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 */
6858std::string NMD::DSLL(uint64 instruction)
6859{
6860 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6861 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6862 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
89a955e8
AM
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 */
6882std::string NMD::DSLL32(uint64 instruction)
6883{
6884 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6885 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6886 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
89a955e8
AM
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 */
6906std::string NMD::DSLLV(uint64 instruction)
6907{
6908 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6909 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6910 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
6930std::string NMD::DSRA(uint64 instruction)
6931{
6932 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6933 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6934 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
89a955e8
AM
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 */
6954std::string NMD::DSRA32(uint64 instruction)
6955{
6956 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6957 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6958 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
89a955e8
AM
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 */
6978std::string NMD::DSRAV(uint64 instruction)
6979{
6980 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 6981 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 6982 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
7002std::string NMD::DSRL(uint64 instruction)
7003{
7004 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7005 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 7006 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
89a955e8
AM
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 */
7026std::string NMD::DSRL32(uint64 instruction)
7027{
7028 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7029 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 7030 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
89a955e8
AM
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 */
7050std::string NMD::DSRLV(uint64 instruction)
7051{
7052 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7053 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 7054 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
7074std::string NMD::DSUB(uint64 instruction)
7075{
7076 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7077 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 7078 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
7098std::string NMD::DSUBU(uint64 instruction)
7099{
7100 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7101 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 7102 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
7122std::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 */
7142std::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 */
7162std::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 */
7180std::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 */
7200std::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 */
7220std::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 */
7238std::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 */
7256std::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 */
7276std::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 */
7296std::string NMD::EXT(uint64 instruction)
7297{
7298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
75199b40 7299 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
89a955e8
AM
7300 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
7301 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
89a955e8
AM
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 */
7322std::string NMD::EXTD(uint64 instruction)
7323{
7324 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7325 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 7326 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
75199b40 7327 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
89a955e8
AM
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 */
7348std::string NMD::EXTD32(uint64 instruction)
7349{
7350 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7351 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 7352 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
75199b40 7353 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
89a955e8
AM
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 */
7374std::string NMD::EXTPDP(uint64 instruction)
7375{
7376 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7377 uint64 size_value = extract_size_20_19_18_17_16(instruction);
0f74e61d 7378 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
7398std::string NMD::EXTPDPV(uint64 instruction)
7399{
7400 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7401 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 7402 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
7422std::string NMD::EXTP(uint64 instruction)
7423{
7424 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7425 uint64 size_value = extract_size_20_19_18_17_16(instruction);
0f74e61d 7426 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
7446std::string NMD::EXTPV(uint64 instruction)
7447{
7448 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7449 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 7450 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6
AM
7461 * [DSP] EXTR_RS.W rt, ac, shift - Extract word value from accumulator to GPR
7462 * with right shift
89a955e8
AM
7463 *
7464 * 3 2 1
7465 * 10987654321098765432109876543210
5c65eed6 7466 * 001000 10111001111111
89a955e8 7467 * rt -----
5c65eed6
AM
7468 * shift -----
7469 * ac --
89a955e8
AM
7470 */
7471std::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);
0f74e61d 7475 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6
AM
7486 * [DSP] EXTR_R.W rt, ac, shift - Extract word value from accumulator to GPR
7487 * with right shift
89a955e8
AM
7488 *
7489 * 3 2 1
7490 * 10987654321098765432109876543210
5c65eed6 7491 * 001000 01111001111111
89a955e8 7492 * rt -----
5c65eed6
AM
7493 * shift -----
7494 * ac --
89a955e8
AM
7495 */
7496std::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);
0f74e61d 7500 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6
AM
7511 * [DSP] EXTR_S.H rt, ac, shift - Extract halfword value from accumulator
7512 * to GPR with right shift and saturate
89a955e8
AM
7513 *
7514 * 3 2 1
7515 * 10987654321098765432109876543210
5c65eed6 7516 * 001000 11111001111111
89a955e8 7517 * rt -----
5c65eed6
AM
7518 * shift -----
7519 * ac --
89a955e8
AM
7520 */
7521std::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);
0f74e61d 7525 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6
AM
7536 * [DSP] EXTR.W rt, ac, shift - Extract word value from accumulator to GPR
7537 * with right shift
89a955e8
AM
7538 *
7539 * 3 2 1
7540 * 10987654321098765432109876543210
5c65eed6 7541 * 001000 00111001111111
89a955e8 7542 * rt -----
5c65eed6
AM
7543 * shift -----
7544 * ac --
89a955e8
AM
7545 */
7546std::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);
0f74e61d 7550 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6
AM
7561 * [DSP] EXTRV_RS.W rt, ac, rs - Extract word value with variable
7562 * right shift from accumulator to GPR
89a955e8
AM
7563 *
7564 * 3 2 1
7565 * 10987654321098765432109876543210
5c65eed6 7566 * 001000 10111010111111
89a955e8
AM
7567 * rt -----
7568 * rs -----
5c65eed6 7569 * ac --
89a955e8
AM
7570 */
7571std::string NMD::EXTRV_RS_W(uint64 instruction)
7572{
7573 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7574 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 7575 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6
AM
7586 * [DSP] EXTRV_R.W rt, ac, rs - Extract word value with variable
7587 * right shift from accumulator to GPR
89a955e8
AM
7588 *
7589 * 3 2 1
7590 * 10987654321098765432109876543210
5c65eed6 7591 * 001000 01111010111111
89a955e8
AM
7592 * rt -----
7593 * rs -----
5c65eed6 7594 * ac --
89a955e8
AM
7595 */
7596std::string NMD::EXTRV_R_W(uint64 instruction)
7597{
7598 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7599 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 7600 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6
AM
7611 * [DSP] EXTRV_S.H rt, ac, rs - Extract halfword value variable from
7612 * accumulator to GPR with right shift and saturate
89a955e8
AM
7613 *
7614 * 3 2 1
7615 * 10987654321098765432109876543210
5c65eed6 7616 * 001000 11111010111111
89a955e8
AM
7617 * rt -----
7618 * rs -----
5c65eed6 7619 * ac --
89a955e8
AM
7620 */
7621std::string NMD::EXTRV_S_H(uint64 instruction)
7622{
7623 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7624 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 7625 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6
AM
7636 * [DSP] EXTRV.W rt, ac, rs - Extract word value with variable
7637 * right shift from accumulator to GPR
89a955e8
AM
7638 *
7639 * 3 2 1
7640 * 10987654321098765432109876543210
5c65eed6 7641 * 001000 00111010111111
89a955e8
AM
7642 * rt -----
7643 * rs -----
5c65eed6 7644 * ac --
89a955e8
AM
7645 */
7646std::string NMD::EXTRV_W(uint64 instruction)
7647{
7648 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7649 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 7650 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
7671std::string NMD::EXTW(uint64 instruction)
7672{
7673 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7674 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 7675 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
75199b40 7676 uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
89a955e8
AM
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 */
7697std::string NMD::FLOOR_L_D(uint64 instruction)
7698{
17ce2f00 7699 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 7700 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
7719std::string NMD::FLOOR_L_S(uint64 instruction)
7720{
17ce2f00 7721 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 7722 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
7741std::string NMD::FLOOR_W_D(uint64 instruction)
7742{
17ce2f00 7743 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 7744 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
7763std::string NMD::FLOOR_W_S(uint64 instruction)
7764{
17ce2f00 7765 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 7766 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
7785std::string NMD::FORK(uint64 instruction)
7786{
7787 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 7788 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 7789 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
7809std::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 */
7829std::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 */
7849std::string NMD::INS(uint64 instruction)
7850{
7851 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
75199b40 7852 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
89a955e8
AM
7853 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
7854 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
89a955e8
AM
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/*
5c65eed6 7868 * [DSP] INSV rt, rs - Insert bit field variable
89a955e8
AM
7869 *
7870 * 3 2 1
7871 * 10987654321098765432109876543210
5c65eed6 7872 * 001000 0100000100111111
89a955e8
AM
7873 * rt -----
7874 * rs -----
89a955e8
AM
7875 */
7876std::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 */
7898std::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 */
7916std::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 */
7936std::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 */
7958std::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 */
7980std::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 */
8000std::string NMD::LB_16_(uint64 instruction)
8001{
89a955e8
AM
8002 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8003 uint64 rs3_value = extract_rs3_6_5_4(instruction);
75199b40 8004 uint64 u_value = extract_u_1_0(instruction);
89a955e8 8005
988d6c89 8006 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8 8007 std::string u = IMMEDIATE(copy(u_value));
988d6c89 8008 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
8024std::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 */
8046std::string NMD::LB_S9_(uint64 instruction)
8047{
8048 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8049 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8050 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8070std::string NMD::LB_U12_(uint64 instruction)
8071{
8072 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8073 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 8074 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8094std::string NMD::LBE(uint64 instruction)
8095{
8096 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8097 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8098 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8118std::string NMD::LBU_16_(uint64 instruction)
8119{
89a955e8
AM
8120 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8121 uint64 rs3_value = extract_rs3_6_5_4(instruction);
75199b40 8122 uint64 u_value = extract_u_1_0(instruction);
89a955e8 8123
988d6c89 8124 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8 8125 std::string u = IMMEDIATE(copy(u_value));
988d6c89 8126 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
8142std::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 */
8164std::string NMD::LBU_S9_(uint64 instruction)
8165{
8166 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8167 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8168 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8188std::string NMD::LBU_U12_(uint64 instruction)
8189{
8190 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8191 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 8192 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8212std::string NMD::LBUE(uint64 instruction)
8213{
8214 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8215 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8216 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8236std::string NMD::LBUX(uint64 instruction)
8237{
8238 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8239 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 8240 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
8260std::string NMD::LBX(uint64 instruction)
8261{
8262 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8263 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 8264 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
8284std::string NMD::LD_GP_(uint64 instruction)
8285{
8286 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11b9732a 8287 uint64 u_value = extract_u_20_to_3__s3(instruction);
89a955e8
AM
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 */
8306std::string NMD::LD_S9_(uint64 instruction)
8307{
8308 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8309 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8310 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8330std::string NMD::LD_U12_(uint64 instruction)
8331{
8332 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8333 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 8334 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8354std::string NMD::LDC1_GP_(uint64 instruction)
8355{
17ce2f00 8356 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11b9732a 8357 uint64 u_value = extract_u_17_to_2__s2(instruction);
89a955e8
AM
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 */
8376std::string NMD::LDC1_S9_(uint64 instruction)
8377{
17ce2f00 8378 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
89a955e8 8379 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8380 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8400std::string NMD::LDC1_U12_(uint64 instruction)
8401{
17ce2f00 8402 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
89a955e8 8403 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8404 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8424std::string NMD::LDC1XS(uint64 instruction)
8425{
8426 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8427 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8428 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
89a955e8
AM
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 */
8448std::string NMD::LDC1X(uint64 instruction)
8449{
8450 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8451 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8452 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
89a955e8
AM
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 */
8472std::string NMD::LDC2(uint64 instruction)
8473{
89a955e8
AM
8474 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
8475 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8476 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8496std::string NMD::LDM(uint64 instruction)
8497{
8498 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8499 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40
AM
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);
89a955e8
AM
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 */
8522std::string NMD::LDPC_48_(uint64 instruction)
8523{
8524 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
d3605cc0 8525 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
89a955e8
AM
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 */
8544std::string NMD::LDX(uint64 instruction)
8545{
8546 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8547 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 8548 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
8568std::string NMD::LDXS(uint64 instruction)
8569{
8570 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8571 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 8572 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
8592std::string NMD::LH_16_(uint64 instruction)
8593{
89a955e8
AM
8594 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8595 uint64 rs3_value = extract_rs3_6_5_4(instruction);
75199b40 8596 uint64 u_value = extract_u_2_1__s1(instruction);
89a955e8 8597
988d6c89 8598 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8 8599 std::string u = IMMEDIATE(copy(u_value));
988d6c89 8600 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
8616std::string NMD::LH_GP_(uint64 instruction)
8617{
8618 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11b9732a 8619 uint64 u_value = extract_u_17_to_1__s1(instruction);
89a955e8
AM
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 */
8638std::string NMD::LH_S9_(uint64 instruction)
8639{
8640 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8641 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8642 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8662std::string NMD::LH_U12_(uint64 instruction)
8663{
8664 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8665 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 8666 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8686std::string NMD::LHE(uint64 instruction)
8687{
8688 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8689 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8690 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8710std::string NMD::LHU_16_(uint64 instruction)
8711{
89a955e8
AM
8712 uint64 rt3_value = extract_rt3_9_8_7(instruction);
8713 uint64 rs3_value = extract_rs3_6_5_4(instruction);
75199b40 8714 uint64 u_value = extract_u_2_1__s1(instruction);
89a955e8 8715
988d6c89 8716 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8 8717 std::string u = IMMEDIATE(copy(u_value));
988d6c89 8718 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
8734std::string NMD::LHU_GP_(uint64 instruction)
8735{
8736 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11b9732a 8737 uint64 u_value = extract_u_17_to_1__s1(instruction);
89a955e8
AM
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 */
8756std::string NMD::LHU_S9_(uint64 instruction)
8757{
8758 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8759 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8760 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8780std::string NMD::LHU_U12_(uint64 instruction)
8781{
8782 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8783 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 8784 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8804std::string NMD::LHUE(uint64 instruction)
8805{
8806 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8807 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8808 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
8828std::string NMD::LHUX(uint64 instruction)
8829{
8830 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8831 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 8832 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
8852std::string NMD::LHUXS(uint64 instruction)
8853{
8854 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8855 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 8856 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
8876std::string NMD::LHXS(uint64 instruction)
8877{
8878 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8879 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 8880 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
8900std::string NMD::LHX(uint64 instruction)
8901{
8902 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8903 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 8904 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
8924std::string NMD::LI_16_(uint64 instruction)
8925{
89a955e8 8926 uint64 rt3_value = extract_rt3_9_8_7(instruction);
75199b40 8927 uint64 eu_value = extract_eu_6_5_4_3_2_1_0(instruction);
89a955e8 8928
988d6c89 8929 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8
AM
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 */
8946std::string NMD::LI_48_(uint64 instruction)
8947{
8948 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
d3605cc0 8949 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
89a955e8
AM
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 */
8968std::string NMD::LL(uint64 instruction)
8969{
8970 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8971 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8972 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
89a955e8
AM
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 */
8992std::string NMD::LLD(uint64 instruction)
8993{
8994 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 8995 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 8996 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
89a955e8
AM
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 */
9016std::string NMD::LLDP(uint64 instruction)
9017{
9018 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9019 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 9020 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
89a955e8
AM
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 */
9040std::string NMD::LLE(uint64 instruction)
9041{
9042 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9043 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 9044 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
89a955e8
AM
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 */
9064std::string NMD::LLWP(uint64 instruction)
9065{
9066 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9067 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 9068 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
89a955e8
AM
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 */
9088std::string NMD::LLWPE(uint64 instruction)
9089{
9090 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9091 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 9092 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
89a955e8
AM
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 */
9112std::string NMD::LSA(uint64 instruction)
9113{
9114 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
75199b40 9115 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
b4c5d21c 9116 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8 9117 uint64 u2_value = extract_u2_10_9(instruction);
89a955e8
AM
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 */
9138std::string NMD::LUI(uint64 instruction)
9139{
9140 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
d3605cc0 9141 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
89a955e8
AM
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 */
9160std::string NMD::LW_16_(uint64 instruction)
9161{
89a955e8
AM
9162 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9163 uint64 rs3_value = extract_rs3_6_5_4(instruction);
75199b40 9164 uint64 u_value = extract_u_3_2_1_0__s2(instruction);
89a955e8 9165
988d6c89 9166 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8 9167 std::string u = IMMEDIATE(copy(u_value));
988d6c89 9168 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
9184std::string NMD::LW_4X4_(uint64 instruction)
9185{
89a955e8 9186 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
75199b40 9187 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
11b9732a 9188 uint64 u_value = extract_u_3_8__s2(instruction);
89a955e8 9189
131e9b92 9190 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
89a955e8 9191 std::string u = IMMEDIATE(copy(u_value));
131e9b92 9192 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
89a955e8
AM
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 */
9208std::string NMD::LW_GP_(uint64 instruction)
9209{
9210 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11b9732a 9211 uint64 u_value = extract_u_20_to_2__s2(instruction);
89a955e8
AM
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 */
9230std::string NMD::LW_GP16_(uint64 instruction)
9231{
89a955e8 9232 uint64 rt3_value = extract_rt3_9_8_7(instruction);
75199b40 9233 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
89a955e8 9234
988d6c89 9235 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8
AM
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 */
9252std::string NMD::LW_S9_(uint64 instruction)
9253{
9254 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9255 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 9256 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
9276std::string NMD::LW_SP_(uint64 instruction)
9277{
9278 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
11b9732a 9279 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
89a955e8
AM
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 */
9298std::string NMD::LW_U12_(uint64 instruction)
9299{
9300 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9301 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 9302 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
9322std::string NMD::LWC1_GP_(uint64 instruction)
9323{
17ce2f00 9324 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11b9732a 9325 uint64 u_value = extract_u_17_to_2__s2(instruction);
89a955e8
AM
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 */
9344std::string NMD::LWC1_S9_(uint64 instruction)
9345{
17ce2f00 9346 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
89a955e8 9347 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 9348 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
9368std::string NMD::LWC1_U12_(uint64 instruction)
9369{
17ce2f00 9370 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
89a955e8 9371 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 9372 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
9392std::string NMD::LWC1X(uint64 instruction)
9393{
9394 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9395 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 9396 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
89a955e8
AM
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 */
9416std::string NMD::LWC1XS(uint64 instruction)
9417{
9418 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9419 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 9420 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
89a955e8
AM
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 */
9440std::string NMD::LWC2(uint64 instruction)
9441{
89a955e8
AM
9442 uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
9443 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 9444 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
9464std::string NMD::LWE(uint64 instruction)
9465{
9466 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9467 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 9468 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
9488std::string NMD::LWM(uint64 instruction)
9489{
9490 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9491 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40
AM
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);
89a955e8
AM
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 */
9514std::string NMD::LWPC_48_(uint64 instruction)
9515{
9516 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
d3605cc0 9517 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
89a955e8
AM
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 */
9536std::string NMD::LWU_GP_(uint64 instruction)
9537{
9538 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11b9732a 9539 uint64 u_value = extract_u_17_to_2__s2(instruction);
89a955e8
AM
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 */
9558std::string NMD::LWU_S9_(uint64 instruction)
9559{
9560 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9561 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 9562 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
9582std::string NMD::LWU_U12_(uint64 instruction)
9583{
9584 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9585 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 9586 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
9606std::string NMD::LWUX(uint64 instruction)
9607{
9608 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9609 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 9610 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
9630std::string NMD::LWUXS(uint64 instruction)
9631{
9632 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9633 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 9634 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
9654std::string NMD::LWX(uint64 instruction)
9655{
9656 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9657 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 9658 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
9678std::string NMD::LWXS_16_(uint64 instruction)
9679{
89a955e8
AM
9680 uint64 rt3_value = extract_rt3_9_8_7(instruction);
9681 uint64 rs3_value = extract_rs3_6_5_4(instruction);
86b5f803 9682 uint64 rd3_value = extract_rd3_3_2_1(instruction);
89a955e8 9683
988d6c89
AM
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));
89a955e8
AM
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 */
9702std::string NMD::LWXS_32_(uint64 instruction)
9703{
9704 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9705 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 9706 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241
AM
9717 * [DSP] MADD ac, rs, rt - Multiply two words and add to the specified
9718 * accumulator
89a955e8
AM
9719 *
9720 * 3 2 1
9721 * 10987654321098765432109876543210
9722 * 001000 x1110000101
9723 * rt -----
9724 * rs -----
9725 * rd -----
9726 */
9727std::string NMD::MADD_DSP_(uint64 instruction)
9728{
9729 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9730 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 9731 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
9751std::string NMD::MADDF_D(uint64 instruction)
9752{
17ce2f00 9753 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 9754 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 9755 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
9775std::string NMD::MADDF_S(uint64 instruction)
9776{
17ce2f00 9777 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 9778 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 9779 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241
AM
9790 * [DSP] MADDU ac, rs, rt - Multiply two unsigned words and add to the
9791 * specified accumulator
89a955e8
AM
9792 *
9793 * 3 2 1
9794 * 10987654321098765432109876543210
9795 * 001000 x1110000101
9796 * rt -----
9797 * rs -----
9798 * rd -----
9799 */
9800std::string NMD::MADDU_DSP_(uint64 instruction)
9801{
9802 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9803 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 9804 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
fc95c241
AM
9815 * [DSP] MAQ_S.W.PHL ac, rs, rt - Multiply the left-most single vector
9816 * fractional halfword elements with accumulation
89a955e8
AM
9817 *
9818 * 3 2 1
9819 * 10987654321098765432109876543210
9820 * 001000 x1110000101
9821 * rt -----
9822 * rs -----
9823 * rd -----
9824 */
9825std::string NMD::MAQ_S_W_PHL(uint64 instruction)
9826{
9827 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9828 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 9829 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
fc95c241
AM
9840 * [DSP] MAQ_S.W.PHR ac, rs, rt - Multiply the right-most single vector
9841 * fractional halfword elements with accumulation
89a955e8
AM
9842 *
9843 * 3 2 1
9844 * 10987654321098765432109876543210
9845 * 001000 x1110000101
9846 * rt -----
9847 * rs -----
9848 * rd -----
9849 */
9850std::string NMD::MAQ_S_W_PHR(uint64 instruction)
9851{
9852 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9853 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 9854 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
fc95c241
AM
9865 * [DSP] MAQ_SA.W.PHL ac, rs, rt - Multiply the left-most single vector
9866 * fractional halfword elements with saturating accumulation
89a955e8
AM
9867 *
9868 * 3 2 1
9869 * 10987654321098765432109876543210
9870 * 001000 x1110000101
9871 * rt -----
9872 * rs -----
9873 * rd -----
9874 */
9875std::string NMD::MAQ_SA_W_PHL(uint64 instruction)
9876{
9877 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9878 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 9879 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
fc95c241
AM
9890 * [DSP] MAQ_SA.W.PHR ac, rs, rt - Multiply the right-most single vector
9891 * fractional halfword elements with saturating accumulation
89a955e8
AM
9892 *
9893 * 3 2 1
9894 * 10987654321098765432109876543210
9895 * 001000 x1110000101
9896 * rt -----
9897 * rs -----
9898 * rd -----
9899 */
9900std::string NMD::MAQ_SA_W_PHR(uint64 instruction)
9901{
9902 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 9903 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 9904 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
9924std::string NMD::MAX_D(uint64 instruction)
9925{
17ce2f00 9926 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 9927 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 9928 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
9948std::string NMD::MAX_S(uint64 instruction)
9949{
17ce2f00 9950 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 9951 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 9952 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
9972std::string NMD::MAXA_D(uint64 instruction)
9973{
17ce2f00 9974 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 9975 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 9976 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
9996std::string NMD::MAXA_S(uint64 instruction)
9997{
17ce2f00 9998 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 9999 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 10000 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
10020std::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 */
10044std::string NMD::MFC1(uint64 instruction)
10045{
10046 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
52a96d22 10047 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
10066std::string NMD::MFC2(uint64 instruction)
10067{
89a955e8 10068 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 10069 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
10088std::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 */
10112std::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 */
10136std::string NMD::MFHC1(uint64 instruction)
10137{
10138 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
52a96d22 10139 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
10158std::string NMD::MFHC2(uint64 instruction)
10159{
89a955e8 10160 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 10161 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
10180std::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/*
5c65eed6 10195 * [DSP] MFHI rs, ac - Move from HI register
89a955e8
AM
10196 *
10197 * 3 2 1
10198 * 10987654321098765432109876543210
5c65eed6 10199 * 001000 xxxxx 00000001111111
89a955e8 10200 * rt -----
5c65eed6 10201 * ac --
89a955e8
AM
10202 */
10203std::string NMD::MFHI_DSP_(uint64 instruction)
10204{
10205 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
0f74e61d 10206 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
10225std::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/*
5c65eed6 10242 * [DSP] MFLO rs, ac - Move from HI register
89a955e8
AM
10243 *
10244 * 3 2 1
10245 * 10987654321098765432109876543210
5c65eed6 10246 * 001000 xxxxx 01000001111111
89a955e8 10247 * rt -----
5c65eed6 10248 * ac --
89a955e8
AM
10249 */
10250std::string NMD::MFLO_DSP_(uint64 instruction)
10251{
10252 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
0f74e61d 10253 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
10272std::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 */
10298std::string NMD::MIN_D(uint64 instruction)
10299{
17ce2f00 10300 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 10301 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 10302 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
10322std::string NMD::MIN_S(uint64 instruction)
10323{
17ce2f00 10324 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 10325 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 10326 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
10346std::string NMD::MINA_D(uint64 instruction)
10347{
17ce2f00 10348 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 10349 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 10350 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
10370std::string NMD::MINA_S(uint64 instruction)
10371{
17ce2f00 10372 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 10373 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 10374 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
10394std::string NMD::MOD(uint64 instruction)
10395{
10396 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 10397 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 10398 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6 10409 * [DSP] MODSUB rd, rs, rt - Modular subtraction on an index value
89a955e8
AM
10410 *
10411 * 3 2 1
10412 * 10987654321098765432109876543210
10413 * 001000 x1110000101
10414 * rt -----
10415 * rs -----
10416 * rd -----
10417 */
10418std::string NMD::MODSUB(uint64 instruction)
10419{
10420 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 10421 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 10422 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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
5c65eed6 10437 * 001000 x1010010101
89a955e8
AM
10438 * rt -----
10439 * rs -----
10440 * rd -----
10441 */
10442std::string NMD::MODU(uint64 instruction)
10443{
10444 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 10445 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 10446 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
10466std::string NMD::MOV_D(uint64 instruction)
10467{
17ce2f00 10468 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 10469 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
10488std::string NMD::MOV_S(uint64 instruction)
10489{
17ce2f00 10490 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 10491 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
10510std::string NMD::MOVE_BALC(uint64 instruction)
10511{
86b5f803 10512 uint64 rtz4_value = extract_rtz4_27_26_25_23_22_21(instruction);
89a955e8 10513 uint64 rd1_value = extract_rdl_25_24(instruction);
d3605cc0 10514 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
89a955e8 10515
68d80fd5 10516 std::string rd1 = GPR(decode_gpr_gpr1(rd1_value));
9980a225 10517 std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
89a955e8
AM
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 */
10534std::string NMD::MOVEP(uint64 instruction)
10535{
89a955e8
AM
10536 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
10537 uint64 rd2_value = extract_rd2_3_8(instruction);
75199b40 10538 uint64 rsz4_value = extract_rsz4_4_2_1_0(instruction);
89a955e8 10539
4671783a 10540 std::string rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value));
ce0f2617 10541 std::string re2 = GPR(decode_gpr_gpr2_reg2(rd2_value));
89a955e8 10542 /* !!!!!!!!!! - no conversion function */
9980a225
AM
10543 std::string rsz4 = GPR(decode_gpr_gpr4_zero(rsz4_value));
10544 std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
89a955e8
AM
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 */
10561std::string NMD::MOVEP_REV_(uint64 instruction)
10562{
89a955e8
AM
10563 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
10564 uint64 rd2_value = extract_rd2_3_8(instruction);
75199b40 10565 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
89a955e8 10566
131e9b92
AM
10567 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
10568 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
4671783a 10569 std::string rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value));
ce0f2617 10570 std::string rs2 = GPR(decode_gpr_gpr2_reg2(rd2_value));
89a955e8
AM
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 */
10588std::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 */
10610std::string NMD::MOVN(uint64 instruction)
10611{
10612 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 10613 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 10614 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
10634std::string NMD::MOVZ(uint64 instruction)
10635{
10636 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 10637 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 10638 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6 10649 * [DSP] MSUB ac, rs, rt - Multiply word and subtract from accumulator
89a955e8
AM
10650 *
10651 * 3 2 1
10652 * 10987654321098765432109876543210
5c65eed6 10653 * 001000 10101010111111
89a955e8
AM
10654 * rt -----
10655 * rs -----
5c65eed6 10656 * ac --
89a955e8
AM
10657 */
10658std::string NMD::MSUB_DSP_(uint64 instruction)
10659{
10660 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 10661 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 10662 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
10682std::string NMD::MSUBF_D(uint64 instruction)
10683{
17ce2f00 10684 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 10685 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 10686 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
10706std::string NMD::MSUBF_S(uint64 instruction)
10707{
17ce2f00 10708 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 10709 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 10710 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6 10721 * [DSP] MSUBU ac, rs, rt - Multiply word and add to accumulator
89a955e8
AM
10722 *
10723 * 3 2 1
10724 * 10987654321098765432109876543210
5c65eed6 10725 * 001000 11101010111111
89a955e8
AM
10726 * rt -----
10727 * rs -----
5c65eed6 10728 * ac --
89a955e8
AM
10729 */
10730std::string NMD::MSUBU_DSP_(uint64 instruction)
10731{
10732 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 10733 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 10734 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
10754std::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 */
10778std::string NMD::MTC1(uint64 instruction)
10779{
10780 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
52a96d22 10781 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
10800std::string NMD::MTC2(uint64 instruction)
10801{
89a955e8 10802 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 10803 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
10822std::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 */
10846std::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 */
10870std::string NMD::MTHC1(uint64 instruction)
10871{
10872 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
52a96d22 10873 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
10892std::string NMD::MTHC2(uint64 instruction)
10893{
89a955e8 10894 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 10895 uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
10914std::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/*
5c65eed6 10929 * [DSP] MTHI rs, ac - Move to HI register
89a955e8
AM
10930 *
10931 * 3 2 1
10932 * 10987654321098765432109876543210
5c65eed6 10933 * 001000xxxxx 10000001111111
89a955e8 10934 * rs -----
5c65eed6 10935 * ac --
89a955e8
AM
10936 */
10937std::string NMD::MTHI_DSP_(uint64 instruction)
10938{
89a955e8 10939 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 10940 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6 10950 * [DSP] MTHLIP rs, ac - Copy LO to HI and a GPR to LO and increment pos by 32
89a955e8
AM
10951 *
10952 * 3 2 1
10953 * 10987654321098765432109876543210
5c65eed6 10954 * 001000xxxxx 00001001111111
89a955e8 10955 * rs -----
5c65eed6 10956 * ac --
89a955e8
AM
10957 */
10958std::string NMD::MTHLIP(uint64 instruction)
10959{
89a955e8 10960 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 10961 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
10980std::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/*
5c65eed6 10997 * [DSP] MTLO rs, ac - Move to LO register
89a955e8
AM
10998 *
10999 * 3 2 1
11000 * 10987654321098765432109876543210
5c65eed6 11001 * 001000xxxxx 11000001111111
89a955e8 11002 * rs -----
5c65eed6 11003 * ac --
89a955e8
AM
11004 */
11005std::string NMD::MTLO_DSP_(uint64 instruction)
11006{
89a955e8 11007 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 11008 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
11027std::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 */
11053std::string NMD::MUH(uint64 instruction)
11054{
11055 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11056 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11057 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
11077std::string NMD::MUHU(uint64 instruction)
11078{
11079 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11080 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11081 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
11101std::string NMD::MUL_32_(uint64 instruction)
11102{
11103 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11104 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11105 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
11125std::string NMD::MUL_4X4_(uint64 instruction)
11126{
89a955e8 11127 uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
75199b40 11128 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
89a955e8 11129
131e9b92
AM
11130 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
11131 std::string rt4 = GPR(decode_gpr_gpr4(rt4_value));
89a955e8
AM
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 */
11147std::string NMD::MUL_D(uint64 instruction)
11148{
17ce2f00 11149 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 11150 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 11151 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
11162 * [DSP] MUL.PH rd, rs, rt - Multiply vector integer half words to same size
11163 * products
89a955e8
AM
11164 *
11165 * 3 2 1
11166 * 10987654321098765432109876543210
5c65eed6 11167 * 001000 00000101101
89a955e8
AM
11168 * rt -----
11169 * rs -----
11170 * rd -----
11171 */
11172std::string NMD::MUL_PH(uint64 instruction)
11173{
11174 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11175 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11176 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
11187 * [DSP] MUL_S.PH rd, rs, rt - Multiply vector integer half words to same size
11188 * products (saturated)
89a955e8
AM
11189 *
11190 * 3 2 1
11191 * 10987654321098765432109876543210
5c65eed6 11192 * 001000 10000101101
89a955e8
AM
11193 * rt -----
11194 * rs -----
11195 * rd -----
11196 */
11197std::string NMD::MUL_S_PH(uint64 instruction)
11198{
11199 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11200 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11201 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
11221std::string NMD::MUL_S(uint64 instruction)
11222{
17ce2f00 11223 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 11224 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 11225 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
11236 * [DSP] MULEQ_S.W.PHL rd, rs, rt - Multiply vector fractional left halfwords
11237 * to expanded width products
89a955e8
AM
11238 *
11239 * 3 2 1
11240 * 10987654321098765432109876543210
5c65eed6 11241 * 001000 x0000100101
89a955e8
AM
11242 * rt -----
11243 * rs -----
11244 * rd -----
11245 */
11246std::string NMD::MULEQ_S_W_PHL(uint64 instruction)
11247{
11248 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11249 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11250 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
11261 * [DSP] MULEQ_S.W.PHR rd, rs, rt - Multiply vector fractional right halfwords
11262 * to expanded width products
89a955e8
AM
11263 *
11264 * 3 2 1
11265 * 10987654321098765432109876543210
5c65eed6 11266 * 001000 x0001100101
89a955e8
AM
11267 * rt -----
11268 * rs -----
11269 * rd -----
11270 */
11271std::string NMD::MULEQ_S_W_PHR(uint64 instruction)
11272{
11273 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11274 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11275 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
11286 * [DSP] MULEU_S.PH.QBL rd, rs, rt - Multiply vector fractional left bytes
11287 * by halfwords to halfword products
89a955e8
AM
11288 *
11289 * 3 2 1
11290 * 10987654321098765432109876543210
5c65eed6 11291 * 001000 x0010010101
89a955e8
AM
11292 * rt -----
11293 * rs -----
11294 * rd -----
11295 */
11296std::string NMD::MULEU_S_PH_QBL(uint64 instruction)
11297{
11298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11299 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11300 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
11311 * [DSP] MULEU_S.PH.QBR rd, rs, rt - Multiply vector fractional right bytes
11312 * by halfwords to halfword products
89a955e8
AM
11313 *
11314 * 3 2 1
11315 * 10987654321098765432109876543210
5c65eed6 11316 * 001000 x0011010101
89a955e8
AM
11317 * rt -----
11318 * rs -----
11319 * rd -----
11320 */
11321std::string NMD::MULEU_S_PH_QBR(uint64 instruction)
11322{
11323 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11324 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11325 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
11336 * [DSP] MULQ_RS.PH rd, rs, rt - Multiply vector fractional halfwords
11337 * to fractional halfword products
89a955e8
AM
11338 *
11339 * 3 2 1
11340 * 10987654321098765432109876543210
5c65eed6 11341 * 001000 x0100010101
89a955e8
AM
11342 * rt -----
11343 * rs -----
11344 * rd -----
11345 */
11346std::string NMD::MULQ_RS_PH(uint64 instruction)
11347{
11348 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11349 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11350 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
11361 * [DSP] MULQ_RS.W rd, rs, rt - Multiply fractional words to same size
11362 * product with saturation and rounding
89a955e8
AM
11363 *
11364 * 3 2 1
11365 * 10987654321098765432109876543210
5c65eed6 11366 * 001000 x0110010101
89a955e8
AM
11367 * rt -----
11368 * rs -----
11369 * rd -----
11370 */
11371std::string NMD::MULQ_RS_W(uint64 instruction)
11372{
11373 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11374 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11375 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
11386 * [DSP] MULQ_S.PH rd, rs, rt - Multiply fractional halfwords to same size
11387 * products
89a955e8
AM
11388 *
11389 * 3 2 1
11390 * 10987654321098765432109876543210
5c65eed6 11391 * 001000 x0101010101
89a955e8
AM
11392 * rt -----
11393 * rs -----
11394 * rd -----
11395 */
11396std::string NMD::MULQ_S_PH(uint64 instruction)
11397{
11398 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11399 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11400 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
11411 * [DSP] MULQ_S.W rd, rs, rt - Multiply fractional words to same size product
11412 * with saturation
89a955e8
AM
11413 *
11414 * 3 2 1
11415 * 10987654321098765432109876543210
5c65eed6 11416 * 001000 x0111010101
89a955e8
AM
11417 * rt -----
11418 * rs -----
11419 * rd -----
11420 */
11421std::string NMD::MULQ_S_W(uint64 instruction)
11422{
11423 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11424 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11425 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
11436 * [DSP] MULSA.W.PH ac, rs, rt - Multiply and subtract vector integer halfword
11437 * elements and accumulate
89a955e8
AM
11438 *
11439 * 3 2 1
11440 * 10987654321098765432109876543210
5c65eed6 11441 * 001000 10110010111111
89a955e8
AM
11442 * rt -----
11443 * rs -----
5c65eed6 11444 * ac --
89a955e8
AM
11445 */
11446std::string NMD::MULSA_W_PH(uint64 instruction)
11447{
11448 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11449 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 11450 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6
AM
11461 * [DSP] MULSAQ_S.W.PH ac, rs, rt - Multiply and subtract vector fractional
11462 * halfwords and accumulate
89a955e8
AM
11463 *
11464 * 3 2 1
11465 * 10987654321098765432109876543210
5c65eed6 11466 * 001000 11110010111111
89a955e8
AM
11467 * rt -----
11468 * rs -----
5c65eed6 11469 * ac --
89a955e8
AM
11470 */
11471std::string NMD::MULSAQ_S_W_PH(uint64 instruction)
11472{
11473 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11474 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 11475 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6 11486 * [DSP] MULT ac, rs, rt - Multiply word
89a955e8
AM
11487 *
11488 * 3 2 1
11489 * 10987654321098765432109876543210
5c65eed6 11490 * 001000 00110010111111
89a955e8
AM
11491 * rt -----
11492 * rs -----
5c65eed6 11493 * ac --
89a955e8
AM
11494 */
11495std::string NMD::MULT_DSP_(uint64 instruction)
11496{
11497 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11498 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 11499 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6 11510 * [DSP] MULTU ac, rs, rt - Multiply unsigned word
89a955e8
AM
11511 *
11512 * 3 2 1
11513 * 10987654321098765432109876543210
5c65eed6 11514 * 001000 01110010111111
89a955e8
AM
11515 * rt -----
11516 * rs -----
5c65eed6 11517 * ac --
89a955e8
AM
11518 */
11519std::string NMD::MULTU_DSP_(uint64 instruction)
11520{
11521 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11522 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 11523 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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 */
11543std::string NMD::MULU(uint64 instruction)
11544{
11545 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11546 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11547 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
11567std::string NMD::NEG_D(uint64 instruction)
11568{
17ce2f00 11569 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 11570 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
11589std::string NMD::NEG_S(uint64 instruction)
11590{
17ce2f00 11591 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 11592 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
11611std::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 */
11629std::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 */
11647std::string NMD::NOR(uint64 instruction)
11648{
11649 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11650 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11651 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
11671std::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
988d6c89
AM
11676 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
11677 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
11693std::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
988d6c89
AM
11698 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
11699 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8
AM
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 */
11715std::string NMD::OR_32_(uint64 instruction)
11716{
11717 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11718 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11719 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
11739std::string NMD::ORI(uint64 instruction)
11740{
11741 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11742 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11743 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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/*
fc95c241
AM
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
89a955e8
AM
11756 *
11757 * 3 2 1
11758 * 10987654321098765432109876543210
11759 * 001000 00010001101
11760 * rt -----
11761 * rs -----
11762 * rd -----
11763 */
11764std::string NMD::PACKRL_PH(uint64 instruction)
11765{
11766 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11767 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11768 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
11788std::string NMD::PAUSE(uint64 instruction)
11789{
11790 (void)instruction;
11791
11792 return "PAUSE ";
11793}
11794
11795
11796/*
fc95c241
AM
11797 * [DSP] PICK.PH rd, rs, rt - Pick a vector of halfwords based on condition
11798 * code bits
89a955e8
AM
11799 *
11800 * 3 2 1
11801 * 10987654321098765432109876543210
11802 * 001000 00010001101
11803 * rt -----
11804 * rs -----
11805 * rd -----
11806 */
11807std::string NMD::PICK_PH(uint64 instruction)
11808{
11809 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11810 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11811 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241
AM
11822 * [DSP] PICK.QB rd, rs, rt - Pick a vector of byte values based on condition
11823 * code bits
89a955e8
AM
11824 *
11825 * 3 2 1
11826 * 10987654321098765432109876543210
11827 * 001000 00010001101
11828 * rt -----
11829 * rs -----
11830 * rd -----
11831 */
11832std::string NMD::PICK_QB(uint64 instruction)
11833{
11834 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 11835 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 11836 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241
AM
11847 * [DSP] PRECEQ.W.PHL rt, rs - Expand the precision of the left-most element
11848 * of a paired halfword
89a955e8
AM
11849 *
11850 * 3 2 1
11851 * 10987654321098765432109876543210
11852 * 001000 00010001101
11853 * rt -----
11854 * rs -----
11855 * rd -----
11856 */
11857std::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/*
fc95c241
AM
11870 * [DSP] PRECEQ.W.PHR rt, rs - Expand the precision of the right-most element
11871 * of a paired halfword
89a955e8
AM
11872 *
11873 * 3 2 1
11874 * 10987654321098765432109876543210
11875 * 001000 00010001101
11876 * rt -----
11877 * rs -----
11878 * rd -----
11879 */
11880std::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/*
fc95c241
AM
11893 * [DSP] PRECEQU.PH.QBLA rt, rs - Expand the precision of the two
11894 * left-alternate elements of a quad byte vector
89a955e8
AM
11895 *
11896 * 3 2 1
11897 * 10987654321098765432109876543210
11898 * 001000 00010001101
11899 * rt -----
11900 * rs -----
11901 * rd -----
11902 */
11903std::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/*
fc95c241
AM
11916 * [DSP] PRECEQU.PH.QBL rt, rs - Expand the precision of the two left-most
11917 * elements of a quad byte vector
89a955e8
AM
11918 *
11919 * 3 2 1
11920 * 10987654321098765432109876543210
11921 * 001000 00010001101
11922 * rt -----
11923 * rs -----
11924 * rd -----
11925 */
11926std::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/*
fc95c241
AM
11939 * [DSP] PRECEQU.PH.QBRA rt, rs - Expand the precision of the two
11940 * right-alternate elements of a quad byte vector
89a955e8
AM
11941 *
11942 * 3 2 1
11943 * 10987654321098765432109876543210
11944 * 001000 00010001101
11945 * rt -----
11946 * rs -----
11947 * rd -----
11948 */
11949std::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/*
fc95c241
AM
11962 * [DSP] PRECEQU.PH.QBR rt, rs - Expand the precision of the two right-most
11963 * elements of a quad byte vector
89a955e8
AM
11964 *
11965 * 3 2 1
11966 * 10987654321098765432109876543210
11967 * 001000 00010001101
11968 * rt -----
11969 * rs -----
11970 * rd -----
11971 */
11972std::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/*
fc95c241
AM
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
89a955e8
AM
11988 *
11989 * 3 2 1
11990 * 10987654321098765432109876543210
11991 * 001000 00010001101
11992 * rt -----
11993 * rs -----
11994 * rd -----
11995 */
11996std::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/*
fc95c241
AM
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
89a955e8
AM
12011 *
12012 * 3 2 1
12013 * 10987654321098765432109876543210
12014 * 001000 00010001101
12015 * rt -----
12016 * rs -----
12017 * rd -----
12018 */
12019std::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/*
fc95c241
AM
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
89a955e8
AM
12035 *
12036 * 3 2 1
12037 * 10987654321098765432109876543210
12038 * 001000 00010001101
12039 * rt -----
12040 * rs -----
12041 * rd -----
12042 */
12043std::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/*
fc95c241
AM
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
89a955e8
AM
12058 *
12059 * 3 2 1
12060 * 10987654321098765432109876543210
12061 * 001000 00010001101
12062 * rt -----
12063 * rs -----
12064 * rd -----
12065 */
12066std::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/*
5c65eed6
AM
12079 * [DSP] PRECR.QB.PH rd, rs, rt - Reduce the precision of four integer
12080 * halfwords to four bytes
89a955e8
AM
12081 *
12082 * 3 2 1
12083 * 10987654321098765432109876543210
5c65eed6 12084 * 001000 x0001101101
89a955e8
AM
12085 * rt -----
12086 * rs -----
12087 * rd -----
12088 */
12089std::string NMD::PRECR_QB_PH(uint64 instruction)
12090{
12091 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 12092 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 12093 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
12104 * [DSP] PRECR_SRA.PH.W rt, rs, sa - Reduce the precision of two integer
12105 * words to halfwords after a right shift
89a955e8
AM
12106 *
12107 * 3 2 1
12108 * 10987654321098765432109876543210
12109 * 001000 x1110000101
12110 * rt -----
12111 * rs -----
12112 * rd -----
12113 */
12114std::string NMD::PRECR_SRA_PH_W(uint64 instruction)
12115{
12116 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 12117 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 12118 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
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
89a955e8
AM
12131 *
12132 * 3 2 1
12133 * 10987654321098765432109876543210
12134 * 001000 x1110000101
12135 * rt -----
12136 * rs -----
12137 * rd -----
12138 */
12139std::string NMD::PRECR_SRA_R_PH_W(uint64 instruction)
12140{
12141 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 12142 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 12143 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
12154 * [DSP] PRECRQ.PH.W rd, rs, rt - Reduce the precision of fractional
12155 * words to fractional halfwords
89a955e8
AM
12156 *
12157 * 3 2 1
12158 * 10987654321098765432109876543210
12159 * 001000 x1110000101
12160 * rt -----
12161 * rs -----
12162 * rd -----
12163 */
12164std::string NMD::PRECRQ_PH_W(uint64 instruction)
12165{
12166 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 12167 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 12168 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
12179 * [DSP] PRECRQ.QB.PH rd, rs, rt - Reduce the precision of four fractional
12180 * halfwords to four bytes
89a955e8
AM
12181 *
12182 * 3 2 1
12183 * 10987654321098765432109876543210
5c65eed6 12184 * 001000 x0010101101
89a955e8
AM
12185 * rt -----
12186 * rs -----
12187 * rd -----
12188 */
12189std::string NMD::PRECRQ_QB_PH(uint64 instruction)
12190{
12191 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 12192 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 12193 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
12204 * [DSP] PRECRQ_RS.PH.W rd, rs, rt - Reduce the precision of fractional
12205 * words to halfwords with rounding and saturation
89a955e8
AM
12206 *
12207 * 3 2 1
12208 * 10987654321098765432109876543210
12209 * 001000 x1110000101
12210 * rt -----
12211 * rs -----
12212 * rd -----
12213 */
12214std::string NMD::PRECRQ_RS_PH_W(uint64 instruction)
12215{
12216 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 12217 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 12218 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
12229 * [DSP] PRECRQU_S.QB.PH rd, rs, rt - Reduce the precision of fractional
12230 * halfwords to unsigned bytes with saturation
89a955e8
AM
12231 *
12232 * 3 2 1
12233 * 10987654321098765432109876543210
12234 * 001000 x1110000101
12235 * rt -----
12236 * rs -----
12237 * rd -----
12238 */
12239std::string NMD::PRECRQU_S_QB_PH(uint64 instruction)
12240{
12241 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 12242 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 12243 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
12263std::string NMD::PREF_S9_(uint64 instruction)
12264{
89a955e8
AM
12265 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12266 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
d3605cc0 12267 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
12287std::string NMD::PREF_U12_(uint64 instruction)
12288{
12289 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
89a955e8 12290 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 12291 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
12311std::string NMD::PREFE(uint64 instruction)
12312{
89a955e8
AM
12313 uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
12314 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 12315 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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/*
5c65eed6 12326 * [DSP] PREPEND rt, rs, sa - Right shift and prepend bits to the MSB
89a955e8
AM
12327 *
12328 * 3 2 1
12329 * 10987654321098765432109876543210
12330 * 001000 x1110000101
12331 * rt -----
12332 * rs -----
12333 * rd -----
12334 */
12335std::string NMD::PREPEND(uint64 instruction)
12336{
12337 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 12338 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 12339 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6 12350 * [DSP] RADDU.W.QB rt, rs - Unsigned reduction add of vector quad bytes
89a955e8
AM
12351 *
12352 * 3 2 1
12353 * 10987654321098765432109876543210
5c65eed6 12354 * 001000 1111000100111111
89a955e8
AM
12355 * rt -----
12356 * rs -----
89a955e8
AM
12357 */
12358std::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/*
5c65eed6 12371 * [DSP] RDDSP rt, mask - Read DSPControl register fields to a GPR
89a955e8
AM
12372 *
12373 * 3 2 1
12374 * 10987654321098765432109876543210
5c65eed6 12375 * 001000 00011001111111
89a955e8 12376 * rt -----
5c65eed6 12377 * mask -------
89a955e8
AM
12378 */
12379std::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 */
12401std::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 */
12425std::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 */
12447std::string NMD::RECIP_D(uint64 instruction)
12448{
17ce2f00 12449 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 12450 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
12469std::string NMD::RECIP_S(uint64 instruction)
12470{
17ce2f00 12471 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 12472 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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/*
5c65eed6
AM
12482 * [DSP] REPL.PH rd, s - Replicate immediate integer into all vector element
12483 * positions
89a955e8
AM
12484 *
12485 * 3 2 1
12486 * 10987654321098765432109876543210
5c65eed6 12487 * 001000 x0000111101
89a955e8 12488 * rt -----
5c65eed6 12489 * s ----------
89a955e8
AM
12490 */
12491std::string NMD::REPL_PH(uint64 instruction)
12492{
12493 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
d3605cc0 12494 int64 s_value = extract_s__se9_20_19_18_17_16_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
12504 * [DSP] REPL.QB rd, u - Replicate immediate integer into all vector element
12505 * positions
89a955e8
AM
12506 *
12507 * 3 2 1
12508 * 10987654321098765432109876543210
5c65eed6 12509 * 001000 x010111111111
89a955e8 12510 * rt -----
5c65eed6 12511 * u --------
89a955e8
AM
12512 */
12513std::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/*
5c65eed6
AM
12526 * [DSP] REPLV.PH rt, rs - Replicate a halfword into all vector element
12527 * positions
89a955e8
AM
12528 *
12529 * 3 2 1
12530 * 10987654321098765432109876543210
5c65eed6 12531 * 001000 0000001100111111
89a955e8
AM
12532 * rt -----
12533 * rs -----
89a955e8
AM
12534 */
12535std::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/*
5c65eed6 12548 * [DSP] REPLV.QB rt, rs - Replicate byte into all vector element positions
89a955e8
AM
12549 *
12550 * 3 2 1
12551 * 10987654321098765432109876543210
5c65eed6 12552 * 001000 0001001100111111
89a955e8
AM
12553 * rt -----
12554 * rs -----
89a955e8
AM
12555 */
12556std::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 */
12578std::string NMD::RESTORE_32_(uint64 instruction)
12579{
89a955e8 12580 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
75199b40 12581 uint64 count_value = extract_count_19_18_17_16(instruction);
11b9732a 12582 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
89a955e8
AM
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 */
12601std::string NMD::RESTORE_JRC_16_(uint64 instruction)
12602{
89a955e8 12603 uint64 rt1_value = extract_rtl_11(instruction);
11b9732a 12604 uint64 u_value = extract_u_7_6_5_4__s4(instruction);
75199b40 12605 uint64 count_value = extract_count_3_2_1_0(instruction);
89a955e8
AM
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 */
12623std::string NMD::RESTORE_JRC_32_(uint64 instruction)
12624{
89a955e8 12625 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 12626 uint64 count_value = extract_count_19_18_17_16(instruction);
11b9732a 12627 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
89a955e8
AM
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 */
12646std::string NMD::RESTOREF(uint64 instruction)
12647{
12648 uint64 count_value = extract_count_19_18_17_16(instruction);
11b9732a 12649 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
89a955e8
AM
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 */
12668std::string NMD::RINT_D(uint64 instruction)
12669{
17ce2f00 12670 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 12671 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
12690std::string NMD::RINT_S(uint64 instruction)
12691{
17ce2f00 12692 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 12693 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
12712std::string NMD::ROTR(uint64 instruction)
12713{
12714 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 12715 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 12716 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
89a955e8
AM
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 */
12736std::string NMD::ROTRV(uint64 instruction)
12737{
12738 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 12739 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 12740 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
12760std::string NMD::ROTX(uint64 instruction)
12761{
12762 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
86b5f803 12763 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11b9732a 12764 uint64 shiftx_value = extract_shiftx_10_9_8_7__s1(instruction);
89a955e8 12765 uint64 stripe_value = extract_stripe_6(instruction);
86b5f803 12766 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
89a955e8
AM
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 */
12789std::string NMD::ROUND_L_D(uint64 instruction)
12790{
17ce2f00 12791 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 12792 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
12811std::string NMD::ROUND_L_S(uint64 instruction)
12812{
17ce2f00 12813 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 12814 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
12833std::string NMD::ROUND_W_D(uint64 instruction)
12834{
17ce2f00 12835 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 12836 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
12855std::string NMD::ROUND_W_S(uint64 instruction)
12856{
17ce2f00 12857 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 12858 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
12877std::string NMD::RSQRT_D(uint64 instruction)
12878{
17ce2f00 12879 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 12880 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
12899std::string NMD::RSQRT_S(uint64 instruction)
12900{
17ce2f00 12901 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 12902 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
12921std::string NMD::SAVE_16_(uint64 instruction)
12922{
89a955e8 12923 uint64 rt1_value = extract_rtl_11(instruction);
11b9732a 12924 uint64 u_value = extract_u_7_6_5_4__s4(instruction);
75199b40 12925 uint64 count_value = extract_count_3_2_1_0(instruction);
89a955e8
AM
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 */
12943std::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);
11b9732a 12947 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
89a955e8
AM
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 */
12966std::string NMD::SAVEF(uint64 instruction)
12967{
12968 uint64 count_value = extract_count_19_18_17_16(instruction);
11b9732a 12969 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
89a955e8
AM
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 */
12988std::string NMD::SB_16_(uint64 instruction)
12989{
12990 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
89a955e8 12991 uint64 rs3_value = extract_rs3_6_5_4(instruction);
75199b40 12992 uint64 u_value = extract_u_1_0(instruction);
89a955e8 12993
8191856b 12994 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
89a955e8 12995 std::string u = IMMEDIATE(copy(u_value));
988d6c89 12996 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
13012std::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 */
13034std::string NMD::SB_S9_(uint64 instruction)
13035{
13036 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13037 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 13038 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
13058std::string NMD::SB_U12_(uint64 instruction)
13059{
13060 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13061 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 13062 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
13082std::string NMD::SBE(uint64 instruction)
13083{
13084 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13085 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 13086 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
13106std::string NMD::SBX(uint64 instruction)
13107{
13108 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13109 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 13110 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
13130std::string NMD::SC(uint64 instruction)
13131{
13132 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13133 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 13134 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
89a955e8
AM
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 */
13154std::string NMD::SCD(uint64 instruction)
13155{
13156 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13157 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 13158 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
89a955e8
AM
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 */
13178std::string NMD::SCDP(uint64 instruction)
13179{
13180 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13181 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 13182 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
89a955e8
AM
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 */
13202std::string NMD::SCE(uint64 instruction)
13203{
13204 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13205 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 13206 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
89a955e8
AM
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 */
13226std::string NMD::SCWP(uint64 instruction)
13227{
13228 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13229 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 13230 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
89a955e8
AM
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 */
13250std::string NMD::SCWPE(uint64 instruction)
13251{
13252 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13253 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 13254 uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
89a955e8
AM
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 */
13274std::string NMD::SD_GP_(uint64 instruction)
13275{
13276 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11b9732a 13277 uint64 u_value = extract_u_20_to_3__s3(instruction);
89a955e8
AM
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 */
13296std::string NMD::SD_S9_(uint64 instruction)
13297{
13298 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13299 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 13300 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
13320std::string NMD::SD_U12_(uint64 instruction)
13321{
13322 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13323 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 13324 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
13344std::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 */
13364std::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 */
13384std::string NMD::SDC1_GP_(uint64 instruction)
13385{
17ce2f00 13386 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11b9732a 13387 uint64 u_value = extract_u_17_to_2__s2(instruction);
89a955e8
AM
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 */
13406std::string NMD::SDC1_S9_(uint64 instruction)
13407{
17ce2f00 13408 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
89a955e8 13409 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 13410 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
13430std::string NMD::SDC1_U12_(uint64 instruction)
13431{
17ce2f00 13432 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
89a955e8 13433 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 13434 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
13454std::string NMD::SDC1X(uint64 instruction)
13455{
13456 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13457 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 13458 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
89a955e8
AM
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 */
13478std::string NMD::SDC1XS(uint64 instruction)
13479{
13480 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13481 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 13482 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
89a955e8
AM
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 */
13502std::string NMD::SDC2(uint64 instruction)
13503{
13504 uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
89a955e8 13505 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 13506 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
13526std::string NMD::SDM(uint64 instruction)
13527{
13528 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13529 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40
AM
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);
89a955e8
AM
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 */
13552std::string NMD::SDPC_48_(uint64 instruction)
13553{
13554 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
d3605cc0 13555 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
89a955e8
AM
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 */
13574std::string NMD::SDXS(uint64 instruction)
13575{
13576 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13577 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 13578 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
13598std::string NMD::SDX(uint64 instruction)
13599{
13600 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13601 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 13602 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
13622std::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 */
13644std::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 */
13666std::string NMD::SEL_D(uint64 instruction)
13667{
17ce2f00 13668 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 13669 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 13670 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
13690std::string NMD::SEL_S(uint64 instruction)
13691{
17ce2f00 13692 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 13693 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 13694 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
13714std::string NMD::SELEQZ_D(uint64 instruction)
13715{
17ce2f00 13716 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 13717 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 13718 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
13738std::string NMD::SELEQZ_S(uint64 instruction)
13739{
17ce2f00 13740 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 13741 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 13742 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
13762std::string NMD::SELNEZ_D(uint64 instruction)
13763{
17ce2f00 13764 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 13765 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 13766 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
13786std::string NMD::SELNEZ_S(uint64 instruction)
13787{
17ce2f00 13788 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 13789 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 13790 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
13810std::string NMD::SEQI(uint64 instruction)
13811{
13812 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13813 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 13814 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
13834std::string NMD::SH_16_(uint64 instruction)
13835{
13836 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
89a955e8 13837 uint64 rs3_value = extract_rs3_6_5_4(instruction);
75199b40 13838 uint64 u_value = extract_u_2_1__s1(instruction);
89a955e8 13839
8191856b 13840 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
89a955e8 13841 std::string u = IMMEDIATE(copy(u_value));
988d6c89 13842 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
13858std::string NMD::SH_GP_(uint64 instruction)
13859{
13860 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11b9732a 13861 uint64 u_value = extract_u_17_to_1__s1(instruction);
89a955e8
AM
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 */
13880std::string NMD::SH_S9_(uint64 instruction)
13881{
13882 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13883 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 13884 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
13904std::string NMD::SH_U12_(uint64 instruction)
13905{
13906 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13907 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 13908 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
13928std::string NMD::SHE(uint64 instruction)
13929{
13930 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 13931 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 13932 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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/*
5c65eed6
AM
13943 * [DSP] SHILO ac, shift - Shift an accumulator value leaving the result in
13944 * the same accumulator
89a955e8
AM
13945 *
13946 * 3 2 1
13947 * 10987654321098765432109876543210
13948 * 001000xxxx xxxx0000011101
13949 * shift ------
13950 * ac --
13951 */
13952std::string NMD::SHILO(uint64 instruction)
13953{
d3605cc0 13954 int64 shift_value = extract_shift__se5_21_20_19_18_17_16(instruction);
0f74e61d 13955 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6
AM
13965 * [DSP] SHILOV ac, rs - Variable shift of accumulator value leaving the result
13966 * in the same accumulator
89a955e8
AM
13967 *
13968 * 3 2 1
13969 * 10987654321098765432109876543210
13970 * 001000xxxxx 01001001111111
13971 * rs -----
13972 * ac --
13973 */
13974std::string NMD::SHILOV(uint64 instruction)
13975{
13976 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
0f74e61d 13977 uint64 ac_value = extract_ac_15_14(instruction);
89a955e8
AM
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/*
5c65eed6 13987 * [DSP] SHLL.PH rt, rs, sa - Shift left logical vector pair halfwords
89a955e8
AM
13988 *
13989 * 3 2 1
13990 * 10987654321098765432109876543210
13991 * 001000 001110110101
13992 * rt -----
13993 * rs -----
13994 * sa ----
13995 */
13996std::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/*
5c65eed6 14011 * [DSP] SHLL.QB rt, rs, sa - Shift left logical vector quad bytes
89a955e8
AM
14012 *
14013 * 3 2 1
14014 * 10987654321098765432109876543210
14015 * 001000 0100001111111
14016 * rt -----
14017 * rs -----
14018 * sa ---
14019 */
14020std::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/*
5c65eed6
AM
14035 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical vector pair halfwords
14036 * with saturation
89a955e8
AM
14037 *
14038 * 3 2 1
14039 * 10987654321098765432109876543210
14040 * 001000 001110110101
14041 * rt -----
14042 * rs -----
14043 * sa ----
14044 */
14045std::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/*
5c65eed6 14060 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical word with saturation
89a955e8
AM
14061 *
14062 * 3 2 1
14063 * 10987654321098765432109876543210
5c65eed6 14064 * 001000 x1111110101
89a955e8
AM
14065 * rt -----
14066 * rs -----
5c65eed6 14067 * sa -----
89a955e8
AM
14068 */
14069std::string NMD::SHLL_S_W(uint64 instruction)
14070{
14071 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14072 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 14073 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
14084 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
14085 * halfwords
89a955e8
AM
14086 *
14087 * 3 2 1
14088 * 10987654321098765432109876543210
5c65eed6 14089 * 001000 01110001101
89a955e8
AM
14090 * rt -----
14091 * rs -----
14092 * rd -----
14093 */
14094std::string NMD::SHLLV_PH(uint64 instruction)
14095{
14096 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14097 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14098 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6 14109 * [DSP] SHLLV_S.QB rd, rt, rs - Shift left logical variable vector quad bytes
89a955e8
AM
14110 *
14111 * 3 2 1
14112 * 10987654321098765432109876543210
5c65eed6 14113 * 001000 x1110010101
89a955e8
AM
14114 * rt -----
14115 * rs -----
14116 * rd -----
14117 */
14118std::string NMD::SHLLV_QB(uint64 instruction)
14119{
14120 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14121 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14122 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
14133 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
14134 * halfwords with saturation
89a955e8
AM
14135 *
14136 * 3 2 1
14137 * 10987654321098765432109876543210
5c65eed6 14138 * 001000 11110001101
89a955e8
AM
14139 * rt -----
14140 * rs -----
14141 * rd -----
14142 */
14143std::string NMD::SHLLV_S_PH(uint64 instruction)
14144{
14145 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14146 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14147 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6 14158 * [DSP] SHLLV_S.W rd, rt, rs - Shift left logical variable vector word
89a955e8
AM
14159 *
14160 * 3 2 1
14161 * 10987654321098765432109876543210
5c65eed6 14162 * 001000 x1111010101
89a955e8
AM
14163 * rt -----
14164 * rs -----
14165 * rd -----
14166 */
14167std::string NMD::SHLLV_S_W(uint64 instruction)
14168{
14169 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14170 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14171 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14191std::string NMD::SHRA_PH(uint64 instruction)
14192{
14193 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14194 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 14195 uint64 sa_value = extract_sa_15_14_13_12(instruction);
89a955e8
AM
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 */
14215std::string NMD::SHRA_QB(uint64 instruction)
14216{
14217 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14218 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 14219 uint64 sa_value = extract_sa_15_14_13(instruction);
89a955e8
AM
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 */
14239std::string NMD::SHRA_R_PH(uint64 instruction)
14240{
14241 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14242 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 14243 uint64 sa_value = extract_sa_15_14_13_12(instruction);
89a955e8
AM
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 */
14263std::string NMD::SHRA_R_QB(uint64 instruction)
14264{
14265 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14266 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 14267 uint64 sa_value = extract_sa_15_14_13(instruction);
89a955e8
AM
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 */
14287std::string NMD::SHRA_R_W(uint64 instruction)
14288{
14289 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14290 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 14291 uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14311std::string NMD::SHRAV_PH(uint64 instruction)
14312{
14313 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14314 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14315 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14335std::string NMD::SHRAV_QB(uint64 instruction)
14336{
14337 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14338 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14339 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14359std::string NMD::SHRAV_R_PH(uint64 instruction)
14360{
14361 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14362 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14363 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14383std::string NMD::SHRAV_R_QB(uint64 instruction)
14384{
14385 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14386 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14387 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14407std::string NMD::SHRAV_R_W(uint64 instruction)
14408{
14409 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14410 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14411 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6 14422 * [DSP] SHRL.PH rt, rs, sa - Shift right logical two halfwords
89a955e8
AM
14423 *
14424 * 3 2 1
14425 * 10987654321098765432109876543210
5c65eed6 14426 * 001000 001111111111
89a955e8
AM
14427 * rt -----
14428 * rs -----
5c65eed6 14429 * sa ----
89a955e8
AM
14430 */
14431std::string NMD::SHRL_PH(uint64 instruction)
14432{
14433 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14434 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 14435 uint64 sa_value = extract_sa_15_14_13_12(instruction);
89a955e8
AM
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/*
5c65eed6 14446 * [DSP] SHRL.QB rt, rs, sa - Shift right logical vector quad bytes
89a955e8
AM
14447 *
14448 * 3 2 1
14449 * 10987654321098765432109876543210
5c65eed6 14450 * 001000 1100001111111
89a955e8
AM
14451 * rt -----
14452 * rs -----
5c65eed6 14453 * sa ---
89a955e8
AM
14454 */
14455std::string NMD::SHRL_QB(uint64 instruction)
14456{
14457 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14458 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 14459 uint64 sa_value = extract_sa_15_14_13(instruction);
89a955e8
AM
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/*
5c65eed6
AM
14470 * [DSP] SHLLV.PH rd, rt, rs - Shift right logical variable vector pair of
14471 * halfwords
89a955e8
AM
14472 *
14473 * 3 2 1
14474 * 10987654321098765432109876543210
5c65eed6 14475 * 001000 x1100010101
89a955e8
AM
14476 * rt -----
14477 * rs -----
14478 * rd -----
14479 */
14480std::string NMD::SHRLV_PH(uint64 instruction)
14481{
14482 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14483 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14484 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6 14495 * [DSP] SHLLV.QB rd, rt, rs - Shift right logical variable vector quad bytes
89a955e8
AM
14496 *
14497 * 3 2 1
14498 * 10987654321098765432109876543210
5c65eed6 14499 * 001000 x1101010101
89a955e8
AM
14500 * rt -----
14501 * rs -----
14502 * rd -----
14503 */
14504std::string NMD::SHRLV_QB(uint64 instruction)
14505{
14506 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14507 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14508 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14528std::string NMD::SHX(uint64 instruction)
14529{
14530 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14531 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14532 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14552std::string NMD::SHXS(uint64 instruction)
14553{
14554 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14555 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14556 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14576std::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 */
14596std::string NMD::SLL_16_(uint64 instruction)
14597{
89a955e8
AM
14598 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14599 uint64 rs3_value = extract_rs3_6_5_4(instruction);
75199b40 14600 uint64 shift3_value = extract_shift3_2_1_0(instruction);
89a955e8 14601
988d6c89
AM
14602 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
14603 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
14620std::string NMD::SLL_32_(uint64 instruction)
14621{
14622 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14623 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14624 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
89a955e8
AM
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 */
14644std::string NMD::SLLV(uint64 instruction)
14645{
14646 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14647 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14648 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14668std::string NMD::SLT(uint64 instruction)
14669{
14670 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14671 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14672 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14692std::string NMD::SLTI(uint64 instruction)
14693{
14694 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14695 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14696 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
14716std::string NMD::SLTIU(uint64 instruction)
14717{
14718 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14719 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14720 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
14740std::string NMD::SLTU(uint64 instruction)
14741{
14742 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14743 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14744 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14764std::string NMD::SOV(uint64 instruction)
14765{
14766 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14767 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14768 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14788std::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 */
14808std::string NMD::SQRT_D(uint64 instruction)
14809{
17ce2f00 14810 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 14811 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
14830std::string NMD::SQRT_S(uint64 instruction)
14831{
17ce2f00 14832 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 14833 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
14852std::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 */
14876std::string NMD::SRAV(uint64 instruction)
14877{
14878 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14879 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14880 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14900std::string NMD::SRL_16_(uint64 instruction)
14901{
89a955e8
AM
14902 uint64 rt3_value = extract_rt3_9_8_7(instruction);
14903 uint64 rs3_value = extract_rs3_6_5_4(instruction);
75199b40 14904 uint64 shift3_value = extract_shift3_2_1_0(instruction);
89a955e8 14905
988d6c89
AM
14906 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
14907 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
14924std::string NMD::SRL_32_(uint64 instruction)
14925{
14926 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14927 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14928 uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
89a955e8
AM
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 */
14948std::string NMD::SRLV(uint64 instruction)
14949{
14950 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14951 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14952 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14972std::string NMD::SUB(uint64 instruction)
14973{
14974 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 14975 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 14976 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
14996std::string NMD::SUB_D(uint64 instruction)
14997{
17ce2f00 14998 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 14999 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 15000 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
15020std::string NMD::SUB_S(uint64 instruction)
15021{
17ce2f00 15022 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 15023 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
d0c60abd 15024 uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
15044std::string NMD::SUBQ_PH(uint64 instruction)
15045{
15046 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15047 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15048 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
15059 * [DSP] SUBQ.S.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15060 * right to halve results
89a955e8
AM
15061 *
15062 * 3 2 1
15063 * 10987654321098765432109876543210
15064 * 001000 01001001101
15065 * rt -----
15066 * rs -----
15067 * rd -----
15068 */
15069std::string NMD::SUBQ_S_PH(uint64 instruction)
15070{
15071 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15072 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15073 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
15084 * [DSP] SUBQ.S.W rd, rt, rs - Subtract fractional halfword vectors and shift
15085 * right to halve results
89a955e8
AM
15086 *
15087 * 3 2 1
15088 * 10987654321098765432109876543210
15089 * 001000 01001001101
15090 * rt -----
15091 * rs -----
15092 * rd -----
15093 */
15094std::string NMD::SUBQ_S_W(uint64 instruction)
15095{
15096 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15097 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15098 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
15109 * [DSP] SUBQH.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15110 * right to halve results
89a955e8
AM
15111 *
15112 * 3 2 1
15113 * 10987654321098765432109876543210
15114 * 001000 01001001101
15115 * rt -----
15116 * rs -----
15117 * rd -----
15118 */
15119std::string NMD::SUBQH_PH(uint64 instruction)
15120{
15121 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15122 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15123 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
15134 * [DSP] SUBQH_R.PH rd, rt, rs - Subtract fractional halfword vectors and shift
15135 * right to halve results
89a955e8
AM
15136 *
15137 * 3 2 1
15138 * 10987654321098765432109876543210
15139 * 001000 01001001101
15140 * rt -----
15141 * rs -----
15142 * rd -----
15143 */
15144std::string NMD::SUBQH_R_PH(uint64 instruction)
15145{
15146 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15147 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15148 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
15159 * [DSP] SUBQH_R.W rd, rt, rs - Subtract fractional halfword vectors and shift
15160 * right to halve results with rounding
89a955e8
AM
15161 *
15162 * 3 2 1
15163 * 10987654321098765432109876543210
15164 * 001000 11001001101
15165 * rt -----
15166 * rs -----
15167 * rd -----
15168 */
15169std::string NMD::SUBQH_R_W(uint64 instruction)
15170{
15171 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15172 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15173 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
5c65eed6
AM
15184 * [DSP] SUBQH.W rd, rs, rt - Subtract fractional words and shift right to
15185 * halve results
89a955e8
AM
15186 *
15187 * 3 2 1
15188 * 10987654321098765432109876543210
15189 * 001000 01010001101
15190 * rt -----
15191 * rs -----
15192 * rd -----
15193 */
15194std::string NMD::SUBQH_W(uint64 instruction)
15195{
15196 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15197 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15198 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
15218std::string NMD::SUBU_16_(uint64 instruction)
15219{
89a955e8
AM
15220 uint64 rt3_value = extract_rt3_9_8_7(instruction);
15221 uint64 rs3_value = extract_rs3_6_5_4(instruction);
86b5f803 15222 uint64 rd3_value = extract_rd3_3_2_1(instruction);
89a955e8 15223
988d6c89
AM
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));
89a955e8
AM
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 */
15242std::string NMD::SUBU_32_(uint64 instruction)
15243{
15244 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15245 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15246 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241 15257 * [DSP] SUBU.PH rd, rs, rt - Subtract unsigned unsigned halfwords
89a955e8
AM
15258 *
15259 * 3 2 1
15260 * 10987654321098765432109876543210
15261 * 001000 01100001101
15262 * rt -----
15263 * rs -----
15264 * rd -----
15265 */
15266std::string NMD::SUBU_PH(uint64 instruction)
15267{
15268 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15269 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15270 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241 15281 * [DSP] SUBU.QB rd, rs, rt - Subtract unsigned quad byte vectors
89a955e8
AM
15282 *
15283 * 3 2 1
15284 * 10987654321098765432109876543210
15285 * 001000 01011001101
15286 * rt -----
15287 * rs -----
15288 * rd -----
15289 */
15290std::string NMD::SUBU_QB(uint64 instruction)
15291{
15292 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15293 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15294 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241 15305 * [DSP] SUBU_S.PH rd, rs, rt - Subtract unsigned unsigned halfwords with
5c65eed6 15306 * 8-bit saturation
89a955e8
AM
15307 *
15308 * 3 2 1
15309 * 10987654321098765432109876543210
15310 * 001000 11100001101
15311 * rt -----
15312 * rs -----
15313 * rd -----
15314 */
15315std::string NMD::SUBU_S_PH(uint64 instruction)
15316{
15317 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15318 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15319 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241 15330 * [DSP] SUBU_S.QB rd, rs, rt - Subtract unsigned quad byte vectors with
5c65eed6 15331 * 8-bit saturation
89a955e8
AM
15332 *
15333 * 3 2 1
15334 * 10987654321098765432109876543210
15335 * 001000 11011001101
15336 * rt -----
15337 * rs -----
15338 * rd -----
15339 */
15340std::string NMD::SUBU_S_QB(uint64 instruction)
15341{
15342 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15343 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15344 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241 15355 * [DSP] SUBUH.QB rd, rs, rt - Subtract unsigned bytes and right shift
5c65eed6 15356 * to halve results
89a955e8
AM
15357 *
15358 * 3 2 1
15359 * 10987654321098765432109876543210
15360 * 001000 01101001101
15361 * rt -----
15362 * rs -----
15363 * rd -----
15364 */
15365std::string NMD::SUBUH_QB(uint64 instruction)
15366{
15367 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15368 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15369 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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/*
fc95c241 15380 * [DSP] SUBUH_R.QB rd, rs, rt - Subtract unsigned bytes and right shift
5c65eed6 15381 * to halve results with rounding
89a955e8
AM
15382 *
15383 * 3 2 1
15384 * 10987654321098765432109876543210
15385 * 001000 11101001101
15386 * rt -----
15387 * rs -----
15388 * rd -----
15389 */
15390std::string NMD::SUBUH_R_QB(uint64 instruction)
15391{
15392 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15393 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15394 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
15414std::string NMD::SW_16_(uint64 instruction)
15415{
15416 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
89a955e8 15417 uint64 rs3_value = extract_rs3_6_5_4(instruction);
75199b40 15418 uint64 u_value = extract_u_3_2_1_0__s2(instruction);
89a955e8 15419
8191856b 15420 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
89a955e8 15421 std::string u = IMMEDIATE(copy(u_value));
988d6c89 15422 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
89a955e8
AM
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 */
15438std::string NMD::SW_4X4_(uint64 instruction)
15439{
89a955e8 15440 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
75199b40 15441 uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
11b9732a 15442 uint64 u_value = extract_u_3_8__s2(instruction);
89a955e8 15443
9980a225 15444 std::string rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value));
89a955e8 15445 std::string u = IMMEDIATE(copy(u_value));
131e9b92 15446 std::string rs4 = GPR(decode_gpr_gpr4(rs4_value));
89a955e8
AM
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 */
15462std::string NMD::SW_GP16_(uint64 instruction)
15463{
11b9732a 15464 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
75199b40 15465 uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
89a955e8 15466
8191856b 15467 std::string rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value));
89a955e8
AM
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 */
15484std::string NMD::SW_GP_(uint64 instruction)
15485{
15486 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11b9732a 15487 uint64 u_value = extract_u_20_to_2__s2(instruction);
89a955e8
AM
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 */
15506std::string NMD::SW_S9_(uint64 instruction)
15507{
15508 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
d3605cc0 15509 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
15530std::string NMD::SW_SP_(uint64 instruction)
15531{
15532 uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
11b9732a 15533 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
89a955e8
AM
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 */
15552std::string NMD::SW_U12_(uint64 instruction)
15553{
15554 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15555 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15556 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
15576std::string NMD::SWC1_GP_(uint64 instruction)
15577{
17ce2f00 15578 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11b9732a 15579 uint64 u_value = extract_u_17_to_2__s2(instruction);
89a955e8
AM
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 */
15598std::string NMD::SWC1_S9_(uint64 instruction)
15599{
17ce2f00 15600 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
89a955e8 15601 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 15602 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
15622std::string NMD::SWC1_U12_(uint64 instruction)
15623{
17ce2f00 15624 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
89a955e8 15625 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 15626 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
15646std::string NMD::SWC1X(uint64 instruction)
15647{
15648 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15649 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 15650 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
89a955e8
AM
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 */
15670std::string NMD::SWC1XS(uint64 instruction)
15671{
15672 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15673 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 15674 uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
89a955e8
AM
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 */
15694std::string NMD::SWC2(uint64 instruction)
15695{
15696 uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
89a955e8 15697 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 15698 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
15718std::string NMD::SWE(uint64 instruction)
15719{
15720 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15721 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 15722 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
15742std::string NMD::SWM(uint64 instruction)
15743{
15744 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15745 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40
AM
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);
89a955e8
AM
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 */
15768std::string NMD::SWPC_48_(uint64 instruction)
15769{
15770 uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
d3605cc0 15771 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
89a955e8
AM
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 */
15790std::string NMD::SWX(uint64 instruction)
15791{
15792 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15793 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15794 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
15814std::string NMD::SWXS(uint64 instruction)
15815{
15816 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 15817 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 15818 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
15838std::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 */
15858std::string NMD::SYNCI(uint64 instruction)
15859{
89a955e8 15860 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 15861 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
15880std::string NMD::SYNCIE(uint64 instruction)
15881{
89a955e8 15882 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 15883 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
15902std::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 */
15920std::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 */
15940std::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 */
15962std::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 */
15980std::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 */
15998std::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 */
16016std::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 */
16034std::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 */
16052std::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 */
16070std::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 */
16088std::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 */
16106std::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 */
16124std::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 */
16142std::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 */
16160std::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 */
16178std::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 */
16200std::string NMD::TRUNC_L_D(uint64 instruction)
16201{
17ce2f00 16202 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 16203 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
16222std::string NMD::TRUNC_L_S(uint64 instruction)
16223{
17ce2f00 16224 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 16225 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
16244std::string NMD::TRUNC_W_D(uint64 instruction)
16245{
17ce2f00 16246 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 16247 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
16266std::string NMD::TRUNC_W_S(uint64 instruction)
16267{
17ce2f00 16268 uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
52a96d22 16269 uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
89a955e8
AM
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 */
16288std::string NMD::UALDM(uint64 instruction)
16289{
16290 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 16291 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40
AM
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);
89a955e8
AM
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 */
16314std::string NMD::UALH(uint64 instruction)
16315{
16316 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 16317 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 16318 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
16338std::string NMD::UALWM(uint64 instruction)
16339{
16340 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 16341 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40
AM
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);
89a955e8
AM
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 */
16364std::string NMD::UASDM(uint64 instruction)
16365{
16366 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 16367 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40
AM
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);
89a955e8
AM
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 */
16390std::string NMD::UASH(uint64 instruction)
16391{
16392 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 16393 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40 16394 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
16414std::string NMD::UASWM(uint64 instruction)
16415{
16416 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 16417 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
75199b40
AM
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);
89a955e8
AM
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 */
16440std::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 */
16458std::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/*
fc95c241
AM
16469 * [DSP] WRDSP rt, mask - Write selected fields from a GPR to the DSPControl
16470 * register
89a955e8
AM
16471 *
16472 * 3 2 1
16473 * 10987654321098765432109876543210
16474 * 001000 01011001111111
16475 * rt -----
16476 * mask -------
16477 */
16478std::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 */
16500std::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 */
16522std::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
988d6c89
AM
16527 std::string rs3 = GPR(decode_gpr_gpr3(rs3_value));
16528 std::string rt3 = GPR(decode_gpr_gpr3(rt3_value));
89a955e8
AM
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 */
16544std::string NMD::XOR_32_(uint64 instruction)
16545{
16546 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 16547 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 16548 uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
89a955e8
AM
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 */
16568std::string NMD::XORI(uint64 instruction)
16569{
16570 uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
89a955e8 16571 uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
86b5f803 16572 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
89a955e8
AM
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 */
16591std::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
ca2b40b7
AM
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
89a955e8
AM
16706NMD::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
16716NMD::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
16732NMD::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
16742NMD::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
16752NMD::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
16762NMD::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
16772NMD::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
16782NMD::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
16792NMD::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
16820NMD::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
16830NMD::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
16840NMD::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
17228NMD::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
17238NMD::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
17248NMD::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
17258NMD::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
17268NMD::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
17278NMD::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
17288NMD::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
17298NMD::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
17308NMD::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
17318NMD::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
17328NMD::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
17338NMD::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
17348NMD::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
17358NMD::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
17368NMD::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
17378NMD::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
17388NMD::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
17398NMD::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
17414NMD::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
17424NMD::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
17812NMD::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
17864NMD::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
17916NMD::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
17926NMD::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
17942NMD::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
17958NMD::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
17974NMD::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
17984NMD::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
17994NMD::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
18004NMD::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
18014NMD::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
18030NMD::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
18058NMD::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
18086NMD::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
18114NMD::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
18142NMD::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
18170NMD::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
18186NMD::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
18574NMD::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
18674NMD::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
18774NMD::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
18784NMD::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
18884NMD::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
18900NMD::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
18910NMD::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
18938NMD::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
18966NMD::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
18994NMD::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
19022NMD::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
19032NMD::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
19048NMD::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
19148NMD::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
19164NMD::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
19192NMD::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
19202NMD::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
19221NMD::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
19273NMD::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
19289NMD::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
19305NMD::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
19321NMD::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
19373NMD::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
19383NMD::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
19393NMD::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
19403NMD::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
19413NMD::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
19423NMD::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
19433NMD::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
19443NMD::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
19453NMD::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
19463NMD::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
19473NMD::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
19483NMD::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
19493NMD::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
19503NMD::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
19513NMD::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
19523NMD::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
19719NMD::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
19729NMD::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
19739NMD::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
19749NMD::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
19759NMD::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
19769NMD::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
19779NMD::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
19789NMD::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
19799NMD::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
19809NMD::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
19819NMD::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
19829NMD::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
19839NMD::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
19849NMD::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
19859NMD::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
19869NMD::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
19879NMD::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
19889NMD::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
20085NMD::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
20101NMD::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
20117NMD::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
20133NMD::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
20149NMD::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
20165NMD::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
20265NMD::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
20281NMD::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
20309NMD::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
20409NMD::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
20509NMD::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
20537NMD::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
20565NMD::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
20761NMD::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
21149NMD::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
21177NMD::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
21205NMD::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
21233NMD::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
21243NMD::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
21253NMD::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
21263NMD::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
21279NMD::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
21295NMD::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
21323NMD::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
21375NMD::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
21385NMD::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
21437NMD::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
21447NMD::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
21463NMD::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
21479NMD::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
21507NMD::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
21535NMD::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
21587NMD::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
21597NMD::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
21613NMD::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
21629NMD::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
21681NMD::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
21691NMD::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
21701NMD::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
21711NMD::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
21721NMD::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
21749NMD::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
21759NMD::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
21769NMD::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
21821NMD::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
21921NMD::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
21937NMD::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
21953NMD::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
21981NMD::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
22081NMD::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
22091NMD::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
22107NMD::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
22117NMD::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
22127NMD::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
22143NMD::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
22153NMD::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
22163NMD::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
22173NMD::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
22183NMD::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
22193NMD::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
22203NMD::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
22213NMD::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
22223NMD::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
22233NMD::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
22243NMD::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
22259NMD::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
22275NMD::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
22291NMD::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
22391NMD::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};