1 /* 2 * Source file for nanoMIPS disassembler component of QEMU 3 * 4 * Copyright (C) 2018 Wave Computing, Inc. 5 * Copyright (C) 2018 Matthew Fortune <matthew.fortune@mips.com> 6 * Copyright (C) 2018 Aleksandar Markovic <amarkovic@wavecomp.com> 7 * 8 * This program is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation, either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program. If not, see <https://www.gnu.org/licenses/>. 20 * 21 */ 22 23 /* 24 * Documentation used while implementing this component: 25 * 26 * [1] "MIPS® Architecture Base: nanoMIPS32(tm) Instruction Set Technical 27 * Reference Manual", Revision 01.01, April 27, 2018 28 */ 29 30 #include "qemu/osdep.h" 31 #include "disas/dis-asm.h" 32 33 #include <string.h> 34 #include <stdio.h> 35 #include <stdarg.h> 36 37 typedef int64_t int64; 38 typedef uint64_t uint64; 39 typedef uint32_t uint32; 40 typedef uint16_t uint16; 41 typedef uint64_t img_address; 42 43 typedef enum { 44 instruction, 45 call_instruction, 46 branch_instruction, 47 return_instruction, 48 reserved_block, 49 pool, 50 } TABLE_ENTRY_TYPE; 51 52 typedef enum { 53 MIPS64_ = 0x00000001, 54 XNP_ = 0x00000002, 55 XMMS_ = 0x00000004, 56 EVA_ = 0x00000008, 57 DSP_ = 0x00000010, 58 MT_ = 0x00000020, 59 EJTAG_ = 0x00000040, 60 TLBINV_ = 0x00000080, 61 CP0_ = 0x00000100, 62 CP1_ = 0x00000200, 63 CP2_ = 0x00000400, 64 UDI_ = 0x00000800, 65 MCU_ = 0x00001000, 66 VZ_ = 0x00002000, 67 TLB_ = 0x00004000, 68 MVH_ = 0x00008000, 69 ALL_ATTRIBUTES = 0xffffffffull, 70 } TABLE_ATTRIBUTE_TYPE; 71 72 typedef struct Dis_info { 73 img_address m_pc; 74 fprintf_function fprintf_func; 75 FILE *stream; 76 sigjmp_buf buf; 77 } Dis_info; 78 79 typedef bool (*conditional_function)(uint64 instruction); 80 typedef char * (*disassembly_function)(uint64 instruction, 81 Dis_info *info); 82 83 typedef struct Pool { 84 TABLE_ENTRY_TYPE type; 85 const struct Pool *next_table; 86 int next_table_size; 87 int instructions_size; 88 uint64 mask; 89 uint64 value; 90 disassembly_function disassembly; 91 conditional_function condition; 92 uint64 attributes; 93 } Pool; 94 95 #define IMGASSERTONCE(test) 96 97 98 static char *img_format(const char *format, ...) 99 { 100 char *buffer; 101 va_list args; 102 va_start(args, format); 103 buffer = g_strdup_vprintf(format, args); 104 va_end(args); 105 return buffer; 106 } 107 108 109 static char *to_string(img_address a) 110 { 111 return g_strdup_printf("0x%" PRIx64, a); 112 } 113 114 115 static uint64 extract_bits(uint64 data, uint32 bit_offset, uint32 bit_size) 116 { 117 return (data << (64 - (bit_size + bit_offset))) >> (64 - bit_size); 118 } 119 120 121 static int64 sign_extend(int64 data, int msb) 122 { 123 uint64 shift = 63 - msb; 124 return (data << shift) >> shift; 125 } 126 127 128 static uint64 renumber_registers(uint64 index, uint64 *register_list, 129 size_t register_list_size, Dis_info *info) 130 { 131 if (index < register_list_size) { 132 return register_list[index]; 133 } 134 135 info->fprintf_func(info->stream, "Invalid register mapping index %" PRIu64 136 ", size of list = %zu", index, register_list_size); 137 siglongjmp(info->buf, 1); 138 } 139 140 141 /* 142 * decode_gpr_gpr4() - decoder for 'gpr4' gpr encoding type 143 * 144 * Map a 4-bit code to the 5-bit register space according to this pattern: 145 * 146 * 1 0 147 * 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 148 * | | | | | | | | | | | | | | | | 149 * | | | | | | | | | | | | | | | | 150 * | | | | | | | | | | | └---------------┐ 151 * | | | | | | | | | | └---------------┐ | 152 * | | | | | | | | | └---------------┐ | | 153 * | | | | | | | | └---------------┐ | | | 154 * | | | | | | | | | | | | | | | | 155 * | | | | | | | | | | | | | | | | 156 * 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 157 * 3 2 1 0 158 * 159 * Used in handling following instructions: 160 * 161 * - ADDU[4X4] 162 * - LW[4X4] 163 * - MOVEP[REV] 164 * - MUL[4X4] 165 * - SW[4X4] 166 */ 167 static uint64 decode_gpr_gpr4(uint64 d, Dis_info *info) 168 { 169 static uint64 register_list[] = { 8, 9, 10, 11, 4, 5, 6, 7, 170 16, 17, 18, 19, 20, 21, 22, 23 }; 171 return renumber_registers(d, register_list, 172 sizeof(register_list) / sizeof(register_list[0]), info); 173 } 174 175 176 /* 177 * decode_gpr_gpr4_zero() - decoder for 'gpr4.zero' gpr encoding type 178 * 179 * Map a 4-bit code to the 5-bit register space according to this pattern: 180 * 181 * 1 0 182 * 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 183 * | | | | | | | | | | | | | | | | 184 * | | | | | | | | | | | | └---------------------┐ 185 * | | | | | | | | | | | └---------------┐ | 186 * | | | | | | | | | | └---------------┐ | | 187 * | | | | | | | | | └---------------┐ | | | 188 * | | | | | | | | └---------------┐ | | | | 189 * | | | | | | | | | | | | | | | | 190 * | | | | | | | | | | | | | | | | 191 * 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 192 * 3 2 1 0 193 * 194 * This pattern is the same one used for 'gpr4' gpr encoding type, except for 195 * the input value 3, that is mapped to the output value 0 instead of 11. 196 * 197 * Used in handling following instructions: 198 * 199 * - MOVE.BALC 200 * - MOVEP 201 * - SW[4X4] 202 */ 203 static uint64 decode_gpr_gpr4_zero(uint64 d, Dis_info *info) 204 { 205 static uint64 register_list[] = { 8, 9, 10, 0, 4, 5, 6, 7, 206 16, 17, 18, 19, 20, 21, 22, 23 }; 207 return renumber_registers(d, register_list, 208 sizeof(register_list) / sizeof(register_list[0]), info); 209 } 210 211 212 /* 213 * decode_gpr_gpr3() - decoder for 'gpr3' gpr encoding type 214 * 215 * Map a 3-bit code to the 5-bit register space according to this pattern: 216 * 217 * 7 6 5 4 3 2 1 0 218 * | | | | | | | | 219 * | | | | | | | | 220 * | | | └-----------------------┐ 221 * | | └-----------------------┐ | 222 * | └-----------------------┐ | | 223 * └-----------------------┐ | | | 224 * | | | | | | | | 225 * ┌-------┘ | | | | | | | 226 * | ┌-------┘ | | | | | | 227 * | | ┌-------┘ | | | | | 228 * | | | ┌-------┘ | | | | 229 * | | | | | | | | 230 * 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 231 * 3 2 1 0 232 * 233 * Used in handling following instructions: 234 * 235 * - ADDIU[R1.SP] 236 * - ADDIU[R2] 237 * - ADDU[16] 238 * - AND[16] 239 * - ANDI[16] 240 * - BEQC[16] 241 * - BEQZC[16] 242 * - BNEC[16] 243 * - BNEZC[16] 244 * - LB[16] 245 * - LBU[16] 246 * - LH[16] 247 * - LHU[16] 248 * - LI[16] 249 * - LW[16] 250 * - LW[GP16] 251 * - LWXS[16] 252 * - NOT[16] 253 * - OR[16] 254 * - SB[16] 255 * - SH[16] 256 * - SLL[16] 257 * - SRL[16] 258 * - SUBU[16] 259 * - SW[16] 260 * - XOR[16] 261 */ 262 static uint64 decode_gpr_gpr3(uint64 d, Dis_info *info) 263 { 264 static uint64 register_list[] = { 16, 17, 18, 19, 4, 5, 6, 7 }; 265 return renumber_registers(d, register_list, 266 sizeof(register_list) / sizeof(register_list[0]), info); 267 } 268 269 270 /* 271 * decode_gpr_gpr3_src_store() - decoder for 'gpr3.src.store' gpr encoding 272 * type 273 * 274 * Map a 3-bit code to the 5-bit register space according to this pattern: 275 * 276 * 7 6 5 4 3 2 1 0 277 * | | | | | | | | 278 * | | | | | | | └-----------------------┐ 279 * | | | └-----------------------┐ | 280 * | | └-----------------------┐ | | 281 * | └-----------------------┐ | | | 282 * └-----------------------┐ | | | | 283 * | | | | | | | | 284 * ┌-------┘ | | | | | | | 285 * | ┌-------┘ | | | | | | 286 * | | ┌-------┘ | | | | | 287 * | | | | | | | | 288 * | | | | | | | | 289 * 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 290 * 3 2 1 0 291 * 292 * This pattern is the same one used for 'gpr3' gpr encoding type, except for 293 * the input value 0, that is mapped to the output value 0 instead of 16. 294 * 295 * Used in handling following instructions: 296 * 297 * - SB[16] 298 * - SH[16] 299 * - SW[16] 300 * - SW[GP16] 301 */ 302 static uint64 decode_gpr_gpr3_src_store(uint64 d, Dis_info *info) 303 { 304 static uint64 register_list[] = { 0, 17, 18, 19, 4, 5, 6, 7 }; 305 return renumber_registers(d, register_list, 306 sizeof(register_list) / sizeof(register_list[0]), info); 307 } 308 309 310 /* 311 * decode_gpr_gpr2_reg1() - decoder for 'gpr2.reg1' gpr encoding type 312 * 313 * Map a 2-bit code to the 5-bit register space according to this pattern: 314 * 315 * 3 2 1 0 316 * | | | | 317 * | | | | 318 * | | | └-------------------┐ 319 * | | └-------------------┐ | 320 * | └-------------------┐ | | 321 * └-------------------┐ | | | 322 * | | | | 323 * | | | | 324 * 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 325 * 3 2 1 0 326 * 327 * Used in handling following instructions: 328 * 329 * - MOVEP 330 * - MOVEP[REV] 331 */ 332 static uint64 decode_gpr_gpr2_reg1(uint64 d, Dis_info *info) 333 { 334 static uint64 register_list[] = { 4, 5, 6, 7 }; 335 return renumber_registers(d, register_list, 336 sizeof(register_list) / sizeof(register_list[0]), info); 337 } 338 339 340 /* 341 * decode_gpr_gpr2_reg2() - decoder for 'gpr2.reg2' gpr encoding type 342 * 343 * Map a 2-bit code to the 5-bit register space according to this pattern: 344 * 345 * 3 2 1 0 346 * | | | | 347 * | | | | 348 * | | | └-----------------┐ 349 * | | └-----------------┐ | 350 * | └-----------------┐ | | 351 * └-----------------┐ | | | 352 * | | | | 353 * | | | | 354 * 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 355 * 3 2 1 0 356 * 357 * Used in handling following instructions: 358 * 359 * - MOVEP 360 * - MOVEP[REV] 361 */ 362 static uint64 decode_gpr_gpr2_reg2(uint64 d, Dis_info *info) 363 { 364 static uint64 register_list[] = { 5, 6, 7, 8 }; 365 return renumber_registers(d, register_list, 366 sizeof(register_list) / sizeof(register_list[0]), info); 367 } 368 369 370 /* 371 * decode_gpr_gpr1() - decoder for 'gpr1' gpr encoding type 372 * 373 * Map a 1-bit code to the 5-bit register space according to this pattern: 374 * 375 * 1 0 376 * | | 377 * | | 378 * | └---------------------┐ 379 * └---------------------┐ | 380 * | | 381 * | | 382 * | | 383 * | | 384 * 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 385 * 3 2 1 0 386 * 387 * Used in handling following instruction: 388 * 389 * - MOVE.BALC 390 */ 391 static uint64 decode_gpr_gpr1(uint64 d, Dis_info *info) 392 { 393 static uint64 register_list[] = { 4, 5 }; 394 return renumber_registers(d, register_list, 395 sizeof(register_list) / sizeof(register_list[0]), info); 396 } 397 398 399 static int64 neg_copy(uint64 d) 400 { 401 return 0ll - d; 402 } 403 404 405 static uint64 encode_count3_from_count(uint64 d) 406 { 407 IMGASSERTONCE(d < 8); 408 return d == 0ull ? 8ull : d; 409 } 410 411 412 static uint64 encode_shift3_from_shift(uint64 d) 413 { 414 IMGASSERTONCE(d < 8); 415 return d == 0ull ? 8ull : d; 416 } 417 418 419 /* special value for load literal */ 420 static int64 encode_eu_from_s_li16(uint64 d) 421 { 422 IMGASSERTONCE(d < 128); 423 return d == 127 ? -1 : (int64)d; 424 } 425 426 427 static uint64 encode_msbd_from_size(uint64 d) 428 { 429 IMGASSERTONCE(d < 32); 430 return d + 1; 431 } 432 433 434 static uint64 encode_eu_from_u_andi16(uint64 d) 435 { 436 IMGASSERTONCE(d < 16); 437 if (d == 12) { 438 return 0x00ffull; 439 } 440 if (d == 13) { 441 return 0xffffull; 442 } 443 return d; 444 } 445 446 447 /* save16 / restore16 ???? */ 448 static uint64 encode_rt1_from_rt(uint64 d) 449 { 450 return d ? 31 : 30; 451 } 452 453 454 static const char *GPR(uint64 reg, Dis_info *info) 455 { 456 static const char *gpr_reg[32] = { 457 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3", 458 "a4", "a5", "a6", "a7", "r12", "r13", "r14", "r15", 459 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", 460 "r24", "r25", "k0", "k1", "gp", "sp", "fp", "ra" 461 }; 462 463 if (reg < 32) { 464 return gpr_reg[reg]; 465 } 466 467 info->fprintf_func(info->stream, "Invalid GPR register index %" PRIu64, 468 reg); 469 siglongjmp(info->buf, 1); 470 } 471 472 473 static char *save_restore_list(uint64 rt, uint64 count, uint64 gp, 474 Dis_info *info) 475 { 476 char *reg_list[34]; 477 reg_list[0] = (char *)""; 478 479 assert(count <= 32); 480 for (uint64 counter = 0; counter != count; counter++) { 481 bool use_gp = gp && (counter == count - 1); 482 uint64 this_rt = use_gp ? 28 : ((rt & 0x10) | (rt + counter)) & 0x1f; 483 /* glib usage below requires casting away const */ 484 reg_list[counter + 1] = (char *)GPR(this_rt, info); 485 } 486 reg_list[count + 1] = NULL; 487 488 return g_strjoinv(",", reg_list); 489 } 490 491 492 static const char *FPR(uint64 reg, Dis_info *info) 493 { 494 static const char *fpr_reg[32] = { 495 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", 496 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", 497 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", 498 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31" 499 }; 500 501 if (reg < 32) { 502 return fpr_reg[reg]; 503 } 504 505 info->fprintf_func(info->stream, "Invalid FPR register index %" PRIu64, 506 reg); 507 siglongjmp(info->buf, 1); 508 } 509 510 511 static const char *AC(uint64 reg, Dis_info *info) 512 { 513 static const char *ac_reg[4] = { 514 "ac0", "ac1", "ac2", "ac3" 515 }; 516 517 if (reg < 4) { 518 return ac_reg[reg]; 519 } 520 521 info->fprintf_func(info->stream, "Invalid AC register index %" PRIu64, 522 reg); 523 siglongjmp(info->buf, 1); 524 } 525 526 527 static char *ADDRESS(uint64 value, int instruction_size, Dis_info *info) 528 { 529 /* token for string replace */ 530 img_address address = info->m_pc + value + instruction_size; 531 /* symbol replacement */ 532 return to_string(address); 533 } 534 535 536 static uint64 extract_op_code_value(const uint16 *data, int size) 537 { 538 switch (size) { 539 case 16: 540 return data[0]; 541 case 32: 542 return ((uint64)data[0] << 16) | data[1]; 543 case 48: 544 return ((uint64)data[0] << 32) | ((uint64)data[1] << 16) | data[2]; 545 default: 546 return data[0]; 547 } 548 } 549 550 551 /* 552 * Recurse through tables until the instruction is found then return 553 * the string and size 554 * 555 * inputs: 556 * pointer to a word stream, 557 * disassember table and size 558 * returns: 559 * instruction size - negative is error 560 * disassembly string - on error will constain error string 561 */ 562 static int Disassemble(const uint16 *data, char **dis, 563 TABLE_ENTRY_TYPE *type, const Pool *table, 564 int table_size, Dis_info *info) 565 { 566 for (int i = 0; i < table_size; i++) { 567 uint64 op_code = extract_op_code_value(data, 568 table[i].instructions_size); 569 if ((op_code & table[i].mask) == table[i].value) { 570 /* possible match */ 571 conditional_function cond = table[i].condition; 572 if ((cond == NULL) || cond(op_code)) { 573 if (table[i].type == pool) { 574 return Disassemble(data, dis, type, 575 table[i].next_table, 576 table[i].next_table_size, 577 info); 578 } else if ((table[i].type == instruction) || 579 (table[i].type == call_instruction) || 580 (table[i].type == branch_instruction) || 581 (table[i].type == return_instruction)) { 582 disassembly_function dis_fn = table[i].disassembly; 583 if (dis_fn == 0) { 584 *dis = g_strdup( 585 "disassembler failure - bad table entry"); 586 return -6; 587 } 588 *type = table[i].type; 589 *dis = dis_fn(op_code, info); 590 return table[i].instructions_size; 591 } else { 592 *dis = g_strdup("reserved instruction"); 593 return -2; 594 } 595 } 596 } 597 } 598 *dis = g_strdup("failed to disassemble"); 599 return -1; /* failed to disassemble */ 600 } 601 602 603 static uint64 extract_code_18_to_0(uint64 instruction) 604 { 605 uint64 value = 0; 606 value |= extract_bits(instruction, 0, 19); 607 return value; 608 } 609 610 611 static uint64 extract_shift3_2_1_0(uint64 instruction) 612 { 613 uint64 value = 0; 614 value |= extract_bits(instruction, 0, 3); 615 return value; 616 } 617 618 619 static uint64 extract_u_11_10_9_8_7_6_5_4_3__s3(uint64 instruction) 620 { 621 uint64 value = 0; 622 value |= extract_bits(instruction, 3, 9) << 3; 623 return value; 624 } 625 626 627 static uint64 extract_count_3_2_1_0(uint64 instruction) 628 { 629 uint64 value = 0; 630 value |= extract_bits(instruction, 0, 4); 631 return value; 632 } 633 634 635 static uint64 extract_rtz3_9_8_7(uint64 instruction) 636 { 637 uint64 value = 0; 638 value |= extract_bits(instruction, 7, 3); 639 return value; 640 } 641 642 643 static uint64 extract_u_17_to_1__s1(uint64 instruction) 644 { 645 uint64 value = 0; 646 value |= extract_bits(instruction, 1, 17) << 1; 647 return value; 648 } 649 650 651 static int64 extract_s__se9_20_19_18_17_16_15_14_13_12_11(uint64 instruction) 652 { 653 int64 value = 0; 654 value |= extract_bits(instruction, 11, 10); 655 value = sign_extend(value, 9); 656 return value; 657 } 658 659 660 static int64 extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(uint64 instruction) 661 { 662 int64 value = 0; 663 value |= extract_bits(instruction, 0, 1) << 11; 664 value |= extract_bits(instruction, 1, 10) << 1; 665 value = sign_extend(value, 11); 666 return value; 667 } 668 669 670 static uint64 extract_u_10(uint64 instruction) 671 { 672 uint64 value = 0; 673 value |= extract_bits(instruction, 10, 1); 674 return value; 675 } 676 677 678 static uint64 extract_rtz4_27_26_25_23_22_21(uint64 instruction) 679 { 680 uint64 value = 0; 681 value |= extract_bits(instruction, 21, 3); 682 value |= extract_bits(instruction, 25, 1) << 3; 683 return value; 684 } 685 686 687 static uint64 extract_sa_15_14_13_12_11(uint64 instruction) 688 { 689 uint64 value = 0; 690 value |= extract_bits(instruction, 11, 5); 691 return value; 692 } 693 694 695 static uint64 extract_shift_4_3_2_1_0(uint64 instruction) 696 { 697 uint64 value = 0; 698 value |= extract_bits(instruction, 0, 5); 699 return value; 700 } 701 702 703 static uint64 extract_shiftx_10_9_8_7__s1(uint64 instruction) 704 { 705 uint64 value = 0; 706 value |= extract_bits(instruction, 7, 4) << 1; 707 return value; 708 } 709 710 711 static uint64 extract_hint_25_24_23_22_21(uint64 instruction) 712 { 713 uint64 value = 0; 714 value |= extract_bits(instruction, 21, 5); 715 return value; 716 } 717 718 719 static uint64 extract_count3_14_13_12(uint64 instruction) 720 { 721 uint64 value = 0; 722 value |= extract_bits(instruction, 12, 3); 723 return value; 724 } 725 726 727 static int64 extract_s__se31_0_11_to_2_20_to_12_s12(uint64 instruction) 728 { 729 int64 value = 0; 730 value |= extract_bits(instruction, 0, 1) << 31; 731 value |= extract_bits(instruction, 2, 10) << 21; 732 value |= extract_bits(instruction, 12, 9) << 12; 733 value = sign_extend(value, 31); 734 return value; 735 } 736 737 738 static int64 extract_s__se7_0_6_5_4_3_2_1_s1(uint64 instruction) 739 { 740 int64 value = 0; 741 value |= extract_bits(instruction, 0, 1) << 7; 742 value |= extract_bits(instruction, 1, 6) << 1; 743 value = sign_extend(value, 7); 744 return value; 745 } 746 747 748 static uint64 extract_u2_10_9(uint64 instruction) 749 { 750 uint64 value = 0; 751 value |= extract_bits(instruction, 9, 2); 752 return value; 753 } 754 755 756 static uint64 extract_code_25_24_23_22_21_20_19_18_17_16(uint64 instruction) 757 { 758 uint64 value = 0; 759 value |= extract_bits(instruction, 16, 10); 760 return value; 761 } 762 763 764 static uint64 extract_rs_20_19_18_17_16(uint64 instruction) 765 { 766 uint64 value = 0; 767 value |= extract_bits(instruction, 16, 5); 768 return value; 769 } 770 771 772 static uint64 extract_u_2_1__s1(uint64 instruction) 773 { 774 uint64 value = 0; 775 value |= extract_bits(instruction, 1, 2) << 1; 776 return value; 777 } 778 779 780 static uint64 extract_stripe_6(uint64 instruction) 781 { 782 uint64 value = 0; 783 value |= extract_bits(instruction, 6, 1); 784 return value; 785 } 786 787 788 static uint64 extract_ac_15_14(uint64 instruction) 789 { 790 uint64 value = 0; 791 value |= extract_bits(instruction, 14, 2); 792 return value; 793 } 794 795 796 static uint64 extract_shift_20_19_18_17_16(uint64 instruction) 797 { 798 uint64 value = 0; 799 value |= extract_bits(instruction, 16, 5); 800 return value; 801 } 802 803 804 static uint64 extract_rdl_25_24(uint64 instruction) 805 { 806 uint64 value = 0; 807 value |= extract_bits(instruction, 24, 1); 808 return value; 809 } 810 811 812 static int64 extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(uint64 instruction) 813 { 814 int64 value = 0; 815 value |= extract_bits(instruction, 0, 1) << 10; 816 value |= extract_bits(instruction, 1, 9) << 1; 817 value = sign_extend(value, 10); 818 return value; 819 } 820 821 822 static uint64 extract_eu_6_5_4_3_2_1_0(uint64 instruction) 823 { 824 uint64 value = 0; 825 value |= extract_bits(instruction, 0, 7); 826 return value; 827 } 828 829 830 static uint64 extract_shift_5_4_3_2_1_0(uint64 instruction) 831 { 832 uint64 value = 0; 833 value |= extract_bits(instruction, 0, 6); 834 return value; 835 } 836 837 838 static uint64 extract_count_19_18_17_16(uint64 instruction) 839 { 840 uint64 value = 0; 841 value |= extract_bits(instruction, 16, 4); 842 return value; 843 } 844 845 846 static uint64 extract_code_2_1_0(uint64 instruction) 847 { 848 uint64 value = 0; 849 value |= extract_bits(instruction, 0, 3); 850 return value; 851 } 852 853 854 static uint64 extract_u_11_10_9_8_7_6_5_4_3_2_1_0(uint64 instruction) 855 { 856 uint64 value = 0; 857 value |= extract_bits(instruction, 0, 12); 858 return value; 859 } 860 861 862 static uint64 extract_rs_4_3_2_1_0(uint64 instruction) 863 { 864 uint64 value = 0; 865 value |= extract_bits(instruction, 0, 5); 866 return value; 867 } 868 869 870 static uint64 extract_u_20_to_3__s3(uint64 instruction) 871 { 872 uint64 value = 0; 873 value |= extract_bits(instruction, 3, 18) << 3; 874 return value; 875 } 876 877 878 static uint64 extract_u_3_2_1_0__s2(uint64 instruction) 879 { 880 uint64 value = 0; 881 value |= extract_bits(instruction, 0, 4) << 2; 882 return value; 883 } 884 885 886 static uint64 extract_cofun_25_24_23(uint64 instruction) 887 { 888 uint64 value = 0; 889 value |= extract_bits(instruction, 3, 23); 890 return value; 891 } 892 893 894 static uint64 extract_u_2_1_0__s2(uint64 instruction) 895 { 896 uint64 value = 0; 897 value |= extract_bits(instruction, 0, 3) << 2; 898 return value; 899 } 900 901 902 static uint64 extract_rd3_3_2_1(uint64 instruction) 903 { 904 uint64 value = 0; 905 value |= extract_bits(instruction, 1, 3); 906 return value; 907 } 908 909 910 static uint64 extract_sa_15_14_13_12(uint64 instruction) 911 { 912 uint64 value = 0; 913 value |= extract_bits(instruction, 12, 4); 914 return value; 915 } 916 917 918 static uint64 extract_rt_25_24_23_22_21(uint64 instruction) 919 { 920 uint64 value = 0; 921 value |= extract_bits(instruction, 21, 5); 922 return value; 923 } 924 925 926 static uint64 extract_ru_7_6_5_4_3(uint64 instruction) 927 { 928 uint64 value = 0; 929 value |= extract_bits(instruction, 3, 5); 930 return value; 931 } 932 933 934 static uint64 extract_u_17_to_0(uint64 instruction) 935 { 936 uint64 value = 0; 937 value |= extract_bits(instruction, 0, 18); 938 return value; 939 } 940 941 942 static uint64 extract_rsz4_4_2_1_0(uint64 instruction) 943 { 944 uint64 value = 0; 945 value |= extract_bits(instruction, 0, 3); 946 value |= extract_bits(instruction, 4, 1) << 3; 947 return value; 948 } 949 950 951 static int64 extract_s__se21_0_20_to_1_s1(uint64 instruction) 952 { 953 int64 value = 0; 954 value |= extract_bits(instruction, 0, 1) << 21; 955 value |= extract_bits(instruction, 1, 20) << 1; 956 value = sign_extend(value, 21); 957 return value; 958 } 959 960 961 static uint64 extract_op_25_to_3(uint64 instruction) 962 { 963 uint64 value = 0; 964 value |= extract_bits(instruction, 3, 23); 965 return value; 966 } 967 968 969 static uint64 extract_rs4_4_2_1_0(uint64 instruction) 970 { 971 uint64 value = 0; 972 value |= extract_bits(instruction, 0, 3); 973 value |= extract_bits(instruction, 4, 1) << 3; 974 return value; 975 } 976 977 978 static uint64 extract_bit_23_22_21(uint64 instruction) 979 { 980 uint64 value = 0; 981 value |= extract_bits(instruction, 21, 3); 982 return value; 983 } 984 985 986 static uint64 extract_rt_41_40_39_38_37(uint64 instruction) 987 { 988 uint64 value = 0; 989 value |= extract_bits(instruction, 37, 5); 990 return value; 991 } 992 993 994 static int64 extract_shift__se5_21_20_19_18_17_16(uint64 instruction) 995 { 996 int64 value = 0; 997 value |= extract_bits(instruction, 16, 6); 998 value = sign_extend(value, 5); 999 return value; 1000 } 1001 1002 1003 static uint64 extract_rd2_3_8(uint64 instruction) 1004 { 1005 uint64 value = 0; 1006 value |= extract_bits(instruction, 3, 1) << 1; 1007 value |= extract_bits(instruction, 8, 1); 1008 return value; 1009 } 1010 1011 1012 static uint64 extract_code_17_to_0(uint64 instruction) 1013 { 1014 uint64 value = 0; 1015 value |= extract_bits(instruction, 0, 18); 1016 return value; 1017 } 1018 1019 1020 static uint64 extract_size_20_19_18_17_16(uint64 instruction) 1021 { 1022 uint64 value = 0; 1023 value |= extract_bits(instruction, 16, 5); 1024 return value; 1025 } 1026 1027 1028 static int64 extract_s__se8_15_7_6_5_4_3_2_s2(uint64 instruction) 1029 { 1030 int64 value = 0; 1031 value |= extract_bits(instruction, 2, 6) << 2; 1032 value |= extract_bits(instruction, 15, 1) << 8; 1033 value = sign_extend(value, 8); 1034 return value; 1035 } 1036 1037 1038 static uint64 extract_u_15_to_0(uint64 instruction) 1039 { 1040 uint64 value = 0; 1041 value |= extract_bits(instruction, 0, 16); 1042 return value; 1043 } 1044 1045 1046 static uint64 extract_fs_20_19_18_17_16(uint64 instruction) 1047 { 1048 uint64 value = 0; 1049 value |= extract_bits(instruction, 16, 5); 1050 return value; 1051 } 1052 1053 1054 static int64 extract_s__se8_15_7_6_5_4_3_2_1_0(uint64 instruction) 1055 { 1056 int64 value = 0; 1057 value |= extract_bits(instruction, 0, 8); 1058 value |= extract_bits(instruction, 15, 1) << 8; 1059 value = sign_extend(value, 8); 1060 return value; 1061 } 1062 1063 1064 static uint64 extract_stype_20_19_18_17_16(uint64 instruction) 1065 { 1066 uint64 value = 0; 1067 value |= extract_bits(instruction, 16, 5); 1068 return value; 1069 } 1070 1071 1072 static uint64 extract_rtl_11(uint64 instruction) 1073 { 1074 uint64 value = 0; 1075 value |= extract_bits(instruction, 9, 1); 1076 return value; 1077 } 1078 1079 1080 static uint64 extract_hs_20_19_18_17_16(uint64 instruction) 1081 { 1082 uint64 value = 0; 1083 value |= extract_bits(instruction, 16, 5); 1084 return value; 1085 } 1086 1087 1088 static uint64 extract_sel_13_12_11(uint64 instruction) 1089 { 1090 uint64 value = 0; 1091 value |= extract_bits(instruction, 11, 3); 1092 return value; 1093 } 1094 1095 1096 static uint64 extract_lsb_4_3_2_1_0(uint64 instruction) 1097 { 1098 uint64 value = 0; 1099 value |= extract_bits(instruction, 0, 5); 1100 return value; 1101 } 1102 1103 1104 static uint64 extract_gp_2(uint64 instruction) 1105 { 1106 uint64 value = 0; 1107 value |= extract_bits(instruction, 2, 1); 1108 return value; 1109 } 1110 1111 1112 static uint64 extract_rt3_9_8_7(uint64 instruction) 1113 { 1114 uint64 value = 0; 1115 value |= extract_bits(instruction, 7, 3); 1116 return value; 1117 } 1118 1119 1120 static uint64 extract_ft_25_24_23_22_21(uint64 instruction) 1121 { 1122 uint64 value = 0; 1123 value |= extract_bits(instruction, 21, 5); 1124 return value; 1125 } 1126 1127 1128 static uint64 extract_u_17_16_15_14_13_12_11(uint64 instruction) 1129 { 1130 uint64 value = 0; 1131 value |= extract_bits(instruction, 11, 7); 1132 return value; 1133 } 1134 1135 1136 static uint64 extract_cs_20_19_18_17_16(uint64 instruction) 1137 { 1138 uint64 value = 0; 1139 value |= extract_bits(instruction, 16, 5); 1140 return value; 1141 } 1142 1143 1144 static uint64 extract_rt4_9_7_6_5(uint64 instruction) 1145 { 1146 uint64 value = 0; 1147 value |= extract_bits(instruction, 5, 3); 1148 value |= extract_bits(instruction, 9, 1) << 3; 1149 return value; 1150 } 1151 1152 1153 static uint64 extract_msbt_10_9_8_7_6(uint64 instruction) 1154 { 1155 uint64 value = 0; 1156 value |= extract_bits(instruction, 6, 5); 1157 return value; 1158 } 1159 1160 1161 static uint64 extract_u_5_4_3_2_1_0__s2(uint64 instruction) 1162 { 1163 uint64 value = 0; 1164 value |= extract_bits(instruction, 0, 6) << 2; 1165 return value; 1166 } 1167 1168 1169 static uint64 extract_sa_15_14_13(uint64 instruction) 1170 { 1171 uint64 value = 0; 1172 value |= extract_bits(instruction, 13, 3); 1173 return value; 1174 } 1175 1176 1177 static int64 extract_s__se14_0_13_to_1_s1(uint64 instruction) 1178 { 1179 int64 value = 0; 1180 value |= extract_bits(instruction, 0, 1) << 14; 1181 value |= extract_bits(instruction, 1, 13) << 1; 1182 value = sign_extend(value, 14); 1183 return value; 1184 } 1185 1186 1187 static uint64 extract_rs3_6_5_4(uint64 instruction) 1188 { 1189 uint64 value = 0; 1190 value |= extract_bits(instruction, 4, 3); 1191 return value; 1192 } 1193 1194 1195 static uint64 extract_u_31_to_0__s32(uint64 instruction) 1196 { 1197 uint64 value = 0; 1198 value |= extract_bits(instruction, 0, 32) << 32; 1199 return value; 1200 } 1201 1202 1203 static uint64 extract_shift_10_9_8_7_6(uint64 instruction) 1204 { 1205 uint64 value = 0; 1206 value |= extract_bits(instruction, 6, 5); 1207 return value; 1208 } 1209 1210 1211 static uint64 extract_cs_25_24_23_22_21(uint64 instruction) 1212 { 1213 uint64 value = 0; 1214 value |= extract_bits(instruction, 21, 5); 1215 return value; 1216 } 1217 1218 1219 static uint64 extract_shiftx_11_10_9_8_7_6(uint64 instruction) 1220 { 1221 uint64 value = 0; 1222 value |= extract_bits(instruction, 6, 6); 1223 return value; 1224 } 1225 1226 1227 static uint64 extract_rt_9_8_7_6_5(uint64 instruction) 1228 { 1229 uint64 value = 0; 1230 value |= extract_bits(instruction, 5, 5); 1231 return value; 1232 } 1233 1234 1235 static uint64 extract_op_25_24_23_22_21(uint64 instruction) 1236 { 1237 uint64 value = 0; 1238 value |= extract_bits(instruction, 21, 5); 1239 return value; 1240 } 1241 1242 1243 static uint64 extract_u_6_5_4_3_2_1_0__s2(uint64 instruction) 1244 { 1245 uint64 value = 0; 1246 value |= extract_bits(instruction, 0, 7) << 2; 1247 return value; 1248 } 1249 1250 1251 static uint64 extract_bit_16_15_14_13_12_11(uint64 instruction) 1252 { 1253 uint64 value = 0; 1254 value |= extract_bits(instruction, 11, 6); 1255 return value; 1256 } 1257 1258 1259 static uint64 extract_mask_20_19_18_17_16_15_14(uint64 instruction) 1260 { 1261 uint64 value = 0; 1262 value |= extract_bits(instruction, 14, 7); 1263 return value; 1264 } 1265 1266 1267 static uint64 extract_eu_3_2_1_0(uint64 instruction) 1268 { 1269 uint64 value = 0; 1270 value |= extract_bits(instruction, 0, 4); 1271 return value; 1272 } 1273 1274 1275 static uint64 extract_u_7_6_5_4__s4(uint64 instruction) 1276 { 1277 uint64 value = 0; 1278 value |= extract_bits(instruction, 4, 4) << 4; 1279 return value; 1280 } 1281 1282 1283 static int64 extract_s__se8_15_7_6_5_4_3_s3(uint64 instruction) 1284 { 1285 int64 value = 0; 1286 value |= extract_bits(instruction, 3, 5) << 3; 1287 value |= extract_bits(instruction, 15, 1) << 8; 1288 value = sign_extend(value, 8); 1289 return value; 1290 } 1291 1292 1293 static uint64 extract_ft_15_14_13_12_11(uint64 instruction) 1294 { 1295 uint64 value = 0; 1296 value |= extract_bits(instruction, 11, 5); 1297 return value; 1298 } 1299 1300 1301 static int64 extract_s__se31_15_to_0_31_to_16(uint64 instruction) 1302 { 1303 int64 value = 0; 1304 value |= extract_bits(instruction, 0, 16) << 16; 1305 value |= extract_bits(instruction, 16, 16); 1306 value = sign_extend(value, 31); 1307 return value; 1308 } 1309 1310 1311 static uint64 extract_u_20_19_18_17_16_15_14_13(uint64 instruction) 1312 { 1313 uint64 value = 0; 1314 value |= extract_bits(instruction, 13, 8); 1315 return value; 1316 } 1317 1318 1319 static uint64 extract_u_17_to_2__s2(uint64 instruction) 1320 { 1321 uint64 value = 0; 1322 value |= extract_bits(instruction, 2, 16) << 2; 1323 return value; 1324 } 1325 1326 1327 static uint64 extract_rd_15_14_13_12_11(uint64 instruction) 1328 { 1329 uint64 value = 0; 1330 value |= extract_bits(instruction, 11, 5); 1331 return value; 1332 } 1333 1334 1335 static uint64 extract_c0s_20_19_18_17_16(uint64 instruction) 1336 { 1337 uint64 value = 0; 1338 value |= extract_bits(instruction, 16, 5); 1339 return value; 1340 } 1341 1342 1343 static uint64 extract_code_1_0(uint64 instruction) 1344 { 1345 uint64 value = 0; 1346 value |= extract_bits(instruction, 0, 2); 1347 return value; 1348 } 1349 1350 1351 static int64 extract_s__se25_0_24_to_1_s1(uint64 instruction) 1352 { 1353 int64 value = 0; 1354 value |= extract_bits(instruction, 0, 1) << 25; 1355 value |= extract_bits(instruction, 1, 24) << 1; 1356 value = sign_extend(value, 25); 1357 return value; 1358 } 1359 1360 1361 static uint64 extract_u_1_0(uint64 instruction) 1362 { 1363 uint64 value = 0; 1364 value |= extract_bits(instruction, 0, 2); 1365 return value; 1366 } 1367 1368 1369 static uint64 extract_u_3_8__s2(uint64 instruction) 1370 { 1371 uint64 value = 0; 1372 value |= extract_bits(instruction, 3, 1) << 3; 1373 value |= extract_bits(instruction, 8, 1) << 2; 1374 return value; 1375 } 1376 1377 1378 static uint64 extract_fd_15_14_13_12_11(uint64 instruction) 1379 { 1380 uint64 value = 0; 1381 value |= extract_bits(instruction, 11, 5); 1382 return value; 1383 } 1384 1385 1386 static uint64 extract_u_4_3_2_1_0__s2(uint64 instruction) 1387 { 1388 uint64 value = 0; 1389 value |= extract_bits(instruction, 0, 5) << 2; 1390 return value; 1391 } 1392 1393 1394 static uint64 extract_rtz4_9_7_6_5(uint64 instruction) 1395 { 1396 uint64 value = 0; 1397 value |= extract_bits(instruction, 5, 3); 1398 value |= extract_bits(instruction, 9, 1) << 3; 1399 return value; 1400 } 1401 1402 1403 static uint64 extract_sel_15_14_13_12_11(uint64 instruction) 1404 { 1405 uint64 value = 0; 1406 value |= extract_bits(instruction, 11, 5); 1407 return value; 1408 } 1409 1410 1411 static uint64 extract_ct_25_24_23_22_21(uint64 instruction) 1412 { 1413 uint64 value = 0; 1414 value |= extract_bits(instruction, 21, 5); 1415 return value; 1416 } 1417 1418 1419 static uint64 extract_u_20_to_2__s2(uint64 instruction) 1420 { 1421 uint64 value = 0; 1422 value |= extract_bits(instruction, 2, 19) << 2; 1423 return value; 1424 } 1425 1426 1427 static int64 extract_s__se3_4_2_1_0(uint64 instruction) 1428 { 1429 int64 value = 0; 1430 value |= extract_bits(instruction, 0, 3); 1431 value |= extract_bits(instruction, 4, 1) << 3; 1432 value = sign_extend(value, 3); 1433 return value; 1434 } 1435 1436 1437 static uint64 extract_u_3_2_1_0__s1(uint64 instruction) 1438 { 1439 uint64 value = 0; 1440 value |= extract_bits(instruction, 0, 4) << 1; 1441 return value; 1442 } 1443 1444 1445 1446 static bool ADDIU_32__cond(uint64 instruction) 1447 { 1448 uint64 rt = extract_rt_25_24_23_22_21(instruction); 1449 return rt != 0; 1450 } 1451 1452 1453 static bool ADDIU_RS5__cond(uint64 instruction) 1454 { 1455 uint64 rt = extract_rt_9_8_7_6_5(instruction); 1456 return rt != 0; 1457 } 1458 1459 1460 static bool BALRSC_cond(uint64 instruction) 1461 { 1462 uint64 rt = extract_rt_25_24_23_22_21(instruction); 1463 return rt != 0; 1464 } 1465 1466 1467 static bool BEQC_16__cond(uint64 instruction) 1468 { 1469 uint64 rs3 = extract_rs3_6_5_4(instruction); 1470 uint64 rt3 = extract_rt3_9_8_7(instruction); 1471 uint64 u = extract_u_3_2_1_0__s1(instruction); 1472 return rs3 < rt3 && u != 0; 1473 } 1474 1475 1476 static bool BNEC_16__cond(uint64 instruction) 1477 { 1478 uint64 rs3 = extract_rs3_6_5_4(instruction); 1479 uint64 rt3 = extract_rt3_9_8_7(instruction); 1480 uint64 u = extract_u_3_2_1_0__s1(instruction); 1481 return rs3 >= rt3 && u != 0; 1482 } 1483 1484 1485 static bool MOVE_cond(uint64 instruction) 1486 { 1487 uint64 rt = extract_rt_9_8_7_6_5(instruction); 1488 return rt != 0; 1489 } 1490 1491 1492 static bool P16_BR1_cond(uint64 instruction) 1493 { 1494 uint64 u = extract_u_3_2_1_0__s1(instruction); 1495 return u != 0; 1496 } 1497 1498 1499 static bool PREF_S9__cond(uint64 instruction) 1500 { 1501 uint64 hint = extract_hint_25_24_23_22_21(instruction); 1502 return hint != 31; 1503 } 1504 1505 1506 static bool PREFE_cond(uint64 instruction) 1507 { 1508 uint64 hint = extract_hint_25_24_23_22_21(instruction); 1509 return hint != 31; 1510 } 1511 1512 1513 static bool SLTU_cond(uint64 instruction) 1514 { 1515 uint64 rd = extract_rd_15_14_13_12_11(instruction); 1516 return rd != 0; 1517 } 1518 1519 1520 1521 /* 1522 * ABS.D fd, fs - Floating Point Absolute Value 1523 * 1524 * 3 2 1 1525 * 10987654321098765432109876543210 1526 * 010001 00000 000101 1527 * fmt ----- 1528 * fs ----- 1529 * fd ----- 1530 */ 1531 static char *ABS_D(uint64 instruction, Dis_info *info) 1532 { 1533 uint64 fd_value = extract_ft_25_24_23_22_21(instruction); 1534 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 1535 1536 const char *fs = FPR(fs_value, info); 1537 const char *fd = FPR(fd_value, info); 1538 1539 return img_format("ABS.D %s, %s", fd, fs); 1540 } 1541 1542 1543 /* 1544 * ABS.S fd, fs - Floating Point Absolute Value 1545 * 1546 * 3 2 1 1547 * 10987654321098765432109876543210 1548 * 010001 00000 000101 1549 * fmt ----- 1550 * fd ----- 1551 * fs ----- 1552 */ 1553 static char *ABS_S(uint64 instruction, Dis_info *info) 1554 { 1555 uint64 fd_value = extract_ft_25_24_23_22_21(instruction); 1556 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 1557 1558 const char *fs = FPR(fs_value, info); 1559 const char *fd = FPR(fd_value, info); 1560 1561 return img_format("ABS.S %s, %s", fd, fs); 1562 } 1563 1564 1565 /* 1566 * [DSP] ABSQ_S.PH rt, rs - Find absolute value of two fractional halfwords 1567 * with 16-bit saturation 1568 * 1569 * 3 2 1 1570 * 10987654321098765432109876543210 1571 * 001000 0001000100111111 1572 * rt ----- 1573 * rs ----- 1574 */ 1575 static char *ABSQ_S_PH(uint64 instruction, Dis_info *info) 1576 { 1577 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 1578 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 1579 1580 const char *rt = GPR(rt_value, info); 1581 const char *rs = GPR(rs_value, info); 1582 1583 return img_format("ABSQ_S.PH %s, %s", rt, rs); 1584 } 1585 1586 1587 /* 1588 * [DSP] ABSQ_S.QB rt, rs - Find absolute value of four fractional byte values 1589 * with 8-bit saturation 1590 * 1591 * 3 2 1 1592 * 10987654321098765432109876543210 1593 * 001000 0000000100111111 1594 * rt ----- 1595 * rs ----- 1596 */ 1597 static char *ABSQ_S_QB(uint64 instruction, Dis_info *info) 1598 { 1599 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 1600 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 1601 1602 const char *rt = GPR(rt_value, info); 1603 const char *rs = GPR(rs_value, info); 1604 1605 return img_format("ABSQ_S.QB %s, %s", rt, rs); 1606 } 1607 1608 1609 /* 1610 * [DSP] ABSQ_S.W rt, rs - Find absolute value of fractional word with 32-bit 1611 * saturation 1612 * 1613 * 3 2 1 1614 * 10987654321098765432109876543210 1615 * 001000 0010000100111111 1616 * rt ----- 1617 * rs ----- 1618 */ 1619 static char *ABSQ_S_W(uint64 instruction, Dis_info *info) 1620 { 1621 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 1622 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 1623 1624 const char *rt = GPR(rt_value, info); 1625 const char *rs = GPR(rs_value, info); 1626 1627 return img_format("ABSQ_S.W %s, %s", rt, rs); 1628 } 1629 1630 1631 /* 1632 * 1633 * 1634 * 3 2 1 1635 * 10987654321098765432109876543210 1636 * 001000 0010000100111111 1637 * rt ----- 1638 * rs ----- 1639 */ 1640 static char *ACLR(uint64 instruction, Dis_info *info) 1641 { 1642 uint64 bit_value = extract_bit_23_22_21(instruction); 1643 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 1644 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 1645 1646 const char *rs = GPR(rs_value, info); 1647 1648 return img_format("ACLR 0x%" PRIx64 ", %" PRId64 "(%s)", 1649 bit_value, s_value, rs); 1650 } 1651 1652 1653 /* 1654 * 1655 * 1656 * 3 2 1 1657 * 10987654321098765432109876543210 1658 * 001000 0010000100111111 1659 * rt ----- 1660 * rs ----- 1661 */ 1662 static char *ADD(uint64 instruction, Dis_info *info) 1663 { 1664 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 1665 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 1666 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 1667 1668 const char *rd = GPR(rd_value, info); 1669 const char *rs = GPR(rs_value, info); 1670 const char *rt = GPR(rt_value, info); 1671 1672 return img_format("ADD %s, %s, %s", rd, rs, rt); 1673 } 1674 1675 1676 /* 1677 * ADD.D fd, fs, ft - Floating Point Add 1678 * 1679 * 3 2 1 1680 * 10987654321098765432109876543210 1681 * 010001 000101 1682 * fmt ----- 1683 * ft ----- 1684 * fs ----- 1685 * fd ----- 1686 */ 1687 static char *ADD_D(uint64 instruction, Dis_info *info) 1688 { 1689 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 1690 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 1691 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 1692 1693 const char *ft = FPR(ft_value, info); 1694 const char *fs = FPR(fs_value, info); 1695 const char *fd = FPR(fd_value, info); 1696 1697 return img_format("ADD.D %s, %s, %s", fd, fs, ft); 1698 } 1699 1700 1701 /* 1702 * ADD.S fd, fs, ft - Floating Point Add 1703 * 1704 * 3 2 1 1705 * 10987654321098765432109876543210 1706 * 010001 000101 1707 * fmt ----- 1708 * ft ----- 1709 * fs ----- 1710 * fd ----- 1711 */ 1712 static char *ADD_S(uint64 instruction, Dis_info *info) 1713 { 1714 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 1715 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 1716 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 1717 1718 const char *ft = FPR(ft_value, info); 1719 const char *fs = FPR(fs_value, info); 1720 const char *fd = FPR(fd_value, info); 1721 1722 return img_format("ADD.S %s, %s, %s", fd, fs, ft); 1723 } 1724 1725 1726 /* 1727 * 1728 * 1729 * 3 2 1 1730 * 10987654321098765432109876543210 1731 * 001000 0010000100111111 1732 * rt ----- 1733 * rs ----- 1734 */ 1735 static char *ADDIU_32_(uint64 instruction, Dis_info *info) 1736 { 1737 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 1738 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 1739 uint64 u_value = extract_u_15_to_0(instruction); 1740 1741 const char *rt = GPR(rt_value, info); 1742 const char *rs = GPR(rs_value, info); 1743 1744 return img_format("ADDIU %s, %s, 0x%" PRIx64, rt, rs, u_value); 1745 } 1746 1747 1748 /* 1749 * 1750 * 1751 * 3 2 1 1752 * 10987654321098765432109876543210 1753 * 001000 0010000100111111 1754 * rt ----- 1755 * rs ----- 1756 */ 1757 static char *ADDIU_48_(uint64 instruction, Dis_info *info) 1758 { 1759 uint64 rt_value = extract_rt_41_40_39_38_37(instruction); 1760 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction); 1761 1762 const char *rt = GPR(rt_value, info); 1763 1764 return img_format("ADDIU %s, %" PRId64, rt, s_value); 1765 } 1766 1767 1768 /* 1769 * 1770 * 1771 * 3 2 1 1772 * 10987654321098765432109876543210 1773 * 001000 0010000100111111 1774 * rt ----- 1775 * rs ----- 1776 */ 1777 static char *ADDIU_GP48_(uint64 instruction, Dis_info *info) 1778 { 1779 uint64 rt_value = extract_rt_41_40_39_38_37(instruction); 1780 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction); 1781 1782 const char *rt = GPR(rt_value, info); 1783 1784 return img_format("ADDIU %s, $%d, %" PRId64, rt, 28, s_value); 1785 } 1786 1787 1788 /* 1789 * 1790 * 1791 * 3 2 1 1792 * 10987654321098765432109876543210 1793 * 001000 0010000100111111 1794 * rt ----- 1795 * rs ----- 1796 */ 1797 static char *ADDIU_GP_B_(uint64 instruction, Dis_info *info) 1798 { 1799 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 1800 uint64 u_value = extract_u_17_to_0(instruction); 1801 1802 const char *rt = GPR(rt_value, info); 1803 1804 return img_format("ADDIU %s, $%d, 0x%" PRIx64, rt, 28, u_value); 1805 } 1806 1807 1808 /* 1809 * 1810 * 1811 * 3 2 1 1812 * 10987654321098765432109876543210 1813 * 001000 0010000100111111 1814 * rt ----- 1815 * rs ----- 1816 */ 1817 static char *ADDIU_GP_W_(uint64 instruction, Dis_info *info) 1818 { 1819 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 1820 uint64 u_value = extract_u_20_to_2__s2(instruction); 1821 1822 const char *rt = GPR(rt_value, info); 1823 1824 return img_format("ADDIU %s, $%d, 0x%" PRIx64, rt, 28, u_value); 1825 } 1826 1827 1828 /* 1829 * 1830 * 1831 * 3 2 1 1832 * 10987654321098765432109876543210 1833 * 001000 0010000100111111 1834 * rt ----- 1835 * rs ----- 1836 */ 1837 static char *ADDIU_NEG_(uint64 instruction, Dis_info *info) 1838 { 1839 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 1840 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 1841 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 1842 1843 const char *rt = GPR(rt_value, info); 1844 const char *rs = GPR(rs_value, info); 1845 int64 u = neg_copy(u_value); 1846 1847 return img_format("ADDIU %s, %s, %" PRId64, rt, rs, u); 1848 } 1849 1850 1851 /* 1852 * 1853 * 1854 * 3 2 1 1855 * 10987654321098765432109876543210 1856 * 001000 0010000100111111 1857 * rt ----- 1858 * rs ----- 1859 */ 1860 static char *ADDIU_R1_SP_(uint64 instruction, Dis_info *info) 1861 { 1862 uint64 u_value = extract_u_5_4_3_2_1_0__s2(instruction); 1863 uint64 rt3_value = extract_rt3_9_8_7(instruction); 1864 1865 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 1866 1867 return img_format("ADDIU %s, $%d, 0x%" PRIx64, rt3, 29, u_value); 1868 } 1869 1870 1871 /* 1872 * 1873 * 1874 * 3 2 1 1875 * 10987654321098765432109876543210 1876 * 001000 0010000100111111 1877 * rt ----- 1878 * rs ----- 1879 */ 1880 static char *ADDIU_R2_(uint64 instruction, Dis_info *info) 1881 { 1882 uint64 rt3_value = extract_rt3_9_8_7(instruction); 1883 uint64 rs3_value = extract_rs3_6_5_4(instruction); 1884 uint64 u_value = extract_u_2_1_0__s2(instruction); 1885 1886 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 1887 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 1888 1889 return img_format("ADDIU %s, %s, 0x%" PRIx64, rt3, rs3, u_value); 1890 } 1891 1892 1893 /* 1894 * ADDIU[RS5] rt, s5 - Add Signed Word and Set Carry Bit 1895 * 1896 * 5432109876543210 1897 * 100100 1 1898 * rt ----- 1899 * s - --- 1900 */ 1901 static char *ADDIU_RS5_(uint64 instruction, Dis_info *info) 1902 { 1903 uint64 rt_value = extract_rt_9_8_7_6_5(instruction); 1904 int64 s_value = extract_s__se3_4_2_1_0(instruction); 1905 1906 const char *rt = GPR(rt_value, info); 1907 1908 return img_format("ADDIU %s, %" PRId64, rt, s_value); 1909 } 1910 1911 1912 /* 1913 * 1914 * 1915 * 3 2 1 1916 * 10987654321098765432109876543210 1917 * 001000 x1110000101 1918 * rt ----- 1919 * rs ----- 1920 * rd ----- 1921 */ 1922 static char *ADDIUPC_32_(uint64 instruction, Dis_info *info) 1923 { 1924 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 1925 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction); 1926 1927 const char *rt = GPR(rt_value, info); 1928 g_autofree char *s = ADDRESS(s_value, 4, info); 1929 1930 return img_format("ADDIUPC %s, %s", rt, s); 1931 } 1932 1933 1934 /* 1935 * 1936 * 1937 * 3 2 1 1938 * 10987654321098765432109876543210 1939 * 001000 x1110000101 1940 * rt ----- 1941 * rs ----- 1942 * rd ----- 1943 */ 1944 static char *ADDIUPC_48_(uint64 instruction, Dis_info *info) 1945 { 1946 uint64 rt_value = extract_rt_41_40_39_38_37(instruction); 1947 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction); 1948 1949 const char *rt = GPR(rt_value, info); 1950 g_autofree char *s = ADDRESS(s_value, 6, info); 1951 1952 return img_format("ADDIUPC %s, %s", rt, s); 1953 } 1954 1955 1956 /* 1957 * [DSP] ADDQ.PH rd, rt, rs - Add fractional halfword vectors 1958 * 1959 * 3 2 1 1960 * 10987654321098765432109876543210 1961 * 001000 00000001101 1962 * rt ----- 1963 * rs ----- 1964 * rd ----- 1965 */ 1966 static char *ADDQ_PH(uint64 instruction, Dis_info *info) 1967 { 1968 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 1969 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 1970 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 1971 1972 const char *rd = GPR(rd_value, info); 1973 const char *rs = GPR(rs_value, info); 1974 const char *rt = GPR(rt_value, info); 1975 1976 return img_format("ADDQ.PH %s, %s, %s", rd, rs, rt); 1977 } 1978 1979 1980 /* 1981 * [DSP] ADDQ_S.PH rd, rt, rs - Add fractional halfword vectors with 16-bit 1982 * saturation 1983 * 1984 * 3 2 1 1985 * 10987654321098765432109876543210 1986 * 001000 10000001101 1987 * rt ----- 1988 * rs ----- 1989 * rd ----- 1990 */ 1991 static char *ADDQ_S_PH(uint64 instruction, Dis_info *info) 1992 { 1993 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 1994 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 1995 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 1996 1997 const char *rd = GPR(rd_value, info); 1998 const char *rs = GPR(rs_value, info); 1999 const char *rt = GPR(rt_value, info); 2000 2001 return img_format("ADDQ_S.PH %s, %s, %s", rd, rs, rt); 2002 } 2003 2004 2005 /* 2006 * [DSP] ADDQ_S.W rd, rt, rs - Add fractional words with 32-bit saturation 2007 * 2008 * 3 2 1 2009 * 10987654321098765432109876543210 2010 * 001000 x1100000101 2011 * rt ----- 2012 * rs ----- 2013 * rd ----- 2014 */ 2015 static char *ADDQ_S_W(uint64 instruction, Dis_info *info) 2016 { 2017 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2018 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2019 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2020 2021 const char *rd = GPR(rd_value, info); 2022 const char *rs = GPR(rs_value, info); 2023 const char *rt = GPR(rt_value, info); 2024 2025 return img_format("ADDQ_S.W %s, %s, %s", rd, rs, rt); 2026 } 2027 2028 2029 /* 2030 * [DSP] ADDQH.PH rd, rt, rs - Add fractional halfword vectors and shift 2031 * right to halve results 2032 * 2033 * 3 2 1 2034 * 10987654321098765432109876543210 2035 * 001000 00001001101 2036 * rt ----- 2037 * rs ----- 2038 * rd ----- 2039 */ 2040 static char *ADDQH_PH(uint64 instruction, Dis_info *info) 2041 { 2042 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2043 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2044 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2045 2046 const char *rd = GPR(rd_value, info); 2047 const char *rs = GPR(rs_value, info); 2048 const char *rt = GPR(rt_value, info); 2049 2050 return img_format("ADDQH.PH %s, %s, %s", rd, rs, rt); 2051 } 2052 2053 2054 /* 2055 * [DSP] ADDQH_R.PH rd, rt, rs - Add fractional halfword vectors and shift 2056 * right to halve results with rounding 2057 * 2058 * 3 2 1 2059 * 10987654321098765432109876543210 2060 * 001000 10001001101 2061 * rt ----- 2062 * rs ----- 2063 * rd ----- 2064 */ 2065 static char *ADDQH_R_PH(uint64 instruction, Dis_info *info) 2066 { 2067 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2068 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2069 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2070 2071 const char *rd = GPR(rd_value, info); 2072 const char *rs = GPR(rs_value, info); 2073 const char *rt = GPR(rt_value, info); 2074 2075 return img_format("ADDQH_R.PH %s, %s, %s", rd, rs, rt); 2076 } 2077 2078 2079 /* 2080 * [DSP] ADDQH_R.W rd, rt, rs - Add fractional words and shift right to halve 2081 * results with rounding 2082 * 2083 * 3 2 1 2084 * 10987654321098765432109876543210 2085 * 001000 00010001101 2086 * rt ----- 2087 * rs ----- 2088 * rd ----- 2089 */ 2090 static char *ADDQH_R_W(uint64 instruction, Dis_info *info) 2091 { 2092 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2093 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2094 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2095 2096 const char *rd = GPR(rd_value, info); 2097 const char *rs = GPR(rs_value, info); 2098 const char *rt = GPR(rt_value, info); 2099 2100 return img_format("ADDQH_R.W %s, %s, %s", rd, rs, rt); 2101 } 2102 2103 2104 /* 2105 * [DSP] ADDQH.W rd, rt, rs - Add fractional words and shift right to halve 2106 * results 2107 * 2108 * 3 2 1 2109 * 10987654321098765432109876543210 2110 * 001000 10010001101 2111 * rt ----- 2112 * rs ----- 2113 * rd ----- 2114 */ 2115 static char *ADDQH_W(uint64 instruction, Dis_info *info) 2116 { 2117 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2118 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2119 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2120 2121 const char *rd = GPR(rd_value, info); 2122 const char *rs = GPR(rs_value, info); 2123 const char *rt = GPR(rt_value, info); 2124 2125 return img_format("ADDQH.W %s, %s, %s", rd, rs, rt); 2126 } 2127 2128 2129 /* 2130 * [DSP] ADDSC rd, rt, rs - Add two signed words and set carry bit 2131 * 2132 * 3 2 1 2133 * 10987654321098765432109876543210 2134 * 001000 x1110000101 2135 * rt ----- 2136 * rs ----- 2137 * rd ----- 2138 */ 2139 static char *ADDSC(uint64 instruction, Dis_info *info) 2140 { 2141 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2142 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2143 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2144 2145 const char *rd = GPR(rd_value, info); 2146 const char *rs = GPR(rs_value, info); 2147 const char *rt = GPR(rt_value, info); 2148 2149 return img_format("ADDSC %s, %s, %s", rd, rs, rt); 2150 } 2151 2152 2153 /* 2154 * ADDU[16] rd3, rs3, rt3 - 2155 * 2156 * 5432109876543210 2157 * 101100 0 2158 * rt3 --- 2159 * rs3 --- 2160 * rd3 --- 2161 */ 2162 static char *ADDU_16_(uint64 instruction, Dis_info *info) 2163 { 2164 uint64 rt3_value = extract_rt3_9_8_7(instruction); 2165 uint64 rs3_value = extract_rs3_6_5_4(instruction); 2166 uint64 rd3_value = extract_rd3_3_2_1(instruction); 2167 2168 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 2169 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 2170 const char *rd3 = GPR(decode_gpr_gpr3(rd3_value, info), info); 2171 2172 return img_format("ADDU %s, %s, %s", rd3, rs3, rt3); 2173 } 2174 2175 2176 /* 2177 * 2178 * 2179 * 3 2 1 2180 * 10987654321098765432109876543210 2181 * 001000 x1110000101 2182 * rt ----- 2183 * rs ----- 2184 * rd ----- 2185 */ 2186 static char *ADDU_32_(uint64 instruction, Dis_info *info) 2187 { 2188 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2189 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2190 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2191 2192 const char *rd = GPR(rd_value, info); 2193 const char *rs = GPR(rs_value, info); 2194 const char *rt = GPR(rt_value, info); 2195 2196 return img_format("ADDU %s, %s, %s", rd, rs, rt); 2197 } 2198 2199 2200 /* 2201 * 2202 * 2203 * 3 2 1 2204 * 10987654321098765432109876543210 2205 * 001000 x1110000101 2206 * rt ----- 2207 * rs ----- 2208 * rd ----- 2209 */ 2210 static char *ADDU_4X4_(uint64 instruction, Dis_info *info) 2211 { 2212 uint64 rt4_value = extract_rt4_9_7_6_5(instruction); 2213 uint64 rs4_value = extract_rs4_4_2_1_0(instruction); 2214 2215 const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info); 2216 const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info); 2217 2218 return img_format("ADDU %s, %s", rs4, rt4); 2219 } 2220 2221 2222 /* 2223 * [DSP] ADDU.PH rd, rt, rs - Add two pairs of unsigned halfwords 2224 * 2225 * 3 2 1 2226 * 10987654321098765432109876543210 2227 * 001000 00100001101 2228 * rt ----- 2229 * rs ----- 2230 * rd ----- 2231 */ 2232 static char *ADDU_PH(uint64 instruction, Dis_info *info) 2233 { 2234 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2235 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2236 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2237 2238 const char *rd = GPR(rd_value, info); 2239 const char *rs = GPR(rs_value, info); 2240 const char *rt = GPR(rt_value, info); 2241 2242 return img_format("ADDU.PH %s, %s, %s", rd, rs, rt); 2243 } 2244 2245 2246 /* 2247 * ADDU.QB rd, rt, rs - Unsigned Add Quad Byte Vectors 2248 * 2249 * 3 2 1 2250 * 10987654321098765432109876543210 2251 * 001000 00011001101 2252 * rt ----- 2253 * rs ----- 2254 * rd ----- 2255 */ 2256 static char *ADDU_QB(uint64 instruction, Dis_info *info) 2257 { 2258 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2259 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2260 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2261 2262 const char *rd = GPR(rd_value, info); 2263 const char *rs = GPR(rs_value, info); 2264 const char *rt = GPR(rt_value, info); 2265 2266 return img_format("ADDU.QB %s, %s, %s", rd, rs, rt); 2267 } 2268 2269 2270 /* 2271 * [DSP] ADDU_S.PH rd, rt, rs - Add two pairs of unsigned halfwords with 16-bit 2272 * saturation 2273 * 2274 * 3 2 1 2275 * 10987654321098765432109876543210 2276 * 001000 10100001101 2277 * rt ----- 2278 * rs ----- 2279 * rd ----- 2280 */ 2281 static char *ADDU_S_PH(uint64 instruction, Dis_info *info) 2282 { 2283 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2284 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2285 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2286 2287 const char *rd = GPR(rd_value, info); 2288 const char *rs = GPR(rs_value, info); 2289 const char *rt = GPR(rt_value, info); 2290 2291 return img_format("ADDU_S.PH %s, %s, %s", rd, rs, rt); 2292 } 2293 2294 2295 /* 2296 * ADDU_S.QB rd, rt, rs - Unsigned Add Quad Byte Vectors 2297 * 2298 * 3 2 1 2299 * 10987654321098765432109876543210 2300 * 001000 10011001101 2301 * rt ----- 2302 * rs ----- 2303 * rd ----- 2304 */ 2305 static char *ADDU_S_QB(uint64 instruction, Dis_info *info) 2306 { 2307 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2308 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2309 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2310 2311 const char *rd = GPR(rd_value, info); 2312 const char *rs = GPR(rs_value, info); 2313 const char *rt = GPR(rt_value, info); 2314 2315 return img_format("ADDU_S.QB %s, %s, %s", rd, rs, rt); 2316 } 2317 2318 2319 /* 2320 * ADDUH.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift 2321 * to Halve Results 2322 * 2323 * 3 2 1 2324 * 10987654321098765432109876543210 2325 * 001000 00101001101 2326 * rt ----- 2327 * rs ----- 2328 * rd ----- 2329 */ 2330 static char *ADDUH_QB(uint64 instruction, Dis_info *info) 2331 { 2332 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2333 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2334 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2335 2336 const char *rd = GPR(rd_value, info); 2337 const char *rs = GPR(rs_value, info); 2338 const char *rt = GPR(rt_value, info); 2339 2340 return img_format("ADDUH.QB %s, %s, %s", rd, rs, rt); 2341 } 2342 2343 2344 /* 2345 * ADDUH_R.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift 2346 * to Halve Results 2347 * 2348 * 3 2 1 2349 * 10987654321098765432109876543210 2350 * 001000 10101001101 2351 * rt ----- 2352 * rs ----- 2353 * rd ----- 2354 */ 2355 static char *ADDUH_R_QB(uint64 instruction, Dis_info *info) 2356 { 2357 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2358 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2359 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2360 2361 const char *rd = GPR(rd_value, info); 2362 const char *rs = GPR(rs_value, info); 2363 const char *rt = GPR(rt_value, info); 2364 2365 return img_format("ADDUH_R.QB %s, %s, %s", rd, rs, rt); 2366 } 2367 2368 /* 2369 * ADDWC rd, rt, rs - Add Word with Carry Bit 2370 * 2371 * 3 2 1 2372 * 10987654321098765432109876543210 2373 * 001000 x1111000101 2374 * rt ----- 2375 * rs ----- 2376 * rd ----- 2377 */ 2378 static char *ADDWC(uint64 instruction, Dis_info *info) 2379 { 2380 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2381 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2382 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2383 2384 const char *rd = GPR(rd_value, info); 2385 const char *rs = GPR(rs_value, info); 2386 const char *rt = GPR(rt_value, info); 2387 2388 return img_format("ADDWC %s, %s, %s", rd, rs, rt); 2389 } 2390 2391 2392 /* 2393 * 2394 * 2395 * 3 2 1 2396 * 10987654321098765432109876543210 2397 * 001000 x1110000101 2398 * rt ----- 2399 * rs ----- 2400 * rd ----- 2401 */ 2402 static char *ALUIPC(uint64 instruction, Dis_info *info) 2403 { 2404 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2405 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction); 2406 2407 const char *rt = GPR(rt_value, info); 2408 g_autofree char *s = ADDRESS(s_value, 4, info); 2409 2410 return img_format("ALUIPC %s, %%pcrel_hi(%s)", rt, s); 2411 } 2412 2413 2414 /* 2415 * AND[16] rt3, rs3 - 2416 * 2417 * 5432109876543210 2418 * 101100 2419 * rt3 --- 2420 * rs3 --- 2421 * eu ---- 2422 */ 2423 static char *AND_16_(uint64 instruction, Dis_info *info) 2424 { 2425 uint64 rt3_value = extract_rt3_9_8_7(instruction); 2426 uint64 rs3_value = extract_rs3_6_5_4(instruction); 2427 2428 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 2429 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 2430 2431 return img_format("AND %s, %s", rs3, rt3); 2432 } 2433 2434 2435 /* 2436 * 2437 * 2438 * 3 2 1 2439 * 10987654321098765432109876543210 2440 * 001000 x1110000101 2441 * rt ----- 2442 * rs ----- 2443 * rd ----- 2444 */ 2445 static char *AND_32_(uint64 instruction, Dis_info *info) 2446 { 2447 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2448 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2449 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 2450 2451 const char *rd = GPR(rd_value, info); 2452 const char *rs = GPR(rs_value, info); 2453 const char *rt = GPR(rt_value, info); 2454 2455 return img_format("AND %s, %s, %s", rd, rs, rt); 2456 } 2457 2458 2459 /* 2460 * ANDI rt, rs, u - 2461 * 2462 * 5432109876543210 2463 * 101100 2464 * rt3 --- 2465 * rs3 --- 2466 * eu ---- 2467 */ 2468 static char *ANDI_16_(uint64 instruction, Dis_info *info) 2469 { 2470 uint64 rt3_value = extract_rt3_9_8_7(instruction); 2471 uint64 rs3_value = extract_rs3_6_5_4(instruction); 2472 uint64 eu_value = extract_eu_3_2_1_0(instruction); 2473 2474 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 2475 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 2476 uint64 eu = encode_eu_from_u_andi16(eu_value); 2477 2478 return img_format("ANDI %s, %s, 0x%" PRIx64, rt3, rs3, eu); 2479 } 2480 2481 2482 /* 2483 * 2484 * 2485 * 3 2 1 2486 * 10987654321098765432109876543210 2487 * 001000 x1110000101 2488 * rt ----- 2489 * rs ----- 2490 * rd ----- 2491 */ 2492 static char *ANDI_32_(uint64 instruction, Dis_info *info) 2493 { 2494 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2495 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2496 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 2497 2498 const char *rt = GPR(rt_value, info); 2499 const char *rs = GPR(rs_value, info); 2500 2501 return img_format("ANDI %s, %s, 0x%" PRIx64, rt, rs, u_value); 2502 } 2503 2504 2505 /* 2506 * 2507 * 2508 * 3 2 1 2509 * 10987654321098765432109876543210 2510 * 001000 x1110000101 2511 * rt ----- 2512 * rs ----- 2513 * rd ----- 2514 */ 2515 static char *APPEND(uint64 instruction, Dis_info *info) 2516 { 2517 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2518 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2519 uint64 sa_value = extract_sa_15_14_13_12_11(instruction); 2520 2521 const char *rt = GPR(rt_value, info); 2522 const char *rs = GPR(rs_value, info); 2523 2524 return img_format("APPEND %s, %s, 0x%" PRIx64, rt, rs, sa_value); 2525 } 2526 2527 2528 /* 2529 * 2530 * 2531 * 3 2 1 2532 * 10987654321098765432109876543210 2533 * 001000 x1110000101 2534 * rt ----- 2535 * rs ----- 2536 * rd ----- 2537 */ 2538 static char *ASET(uint64 instruction, Dis_info *info) 2539 { 2540 uint64 bit_value = extract_bit_23_22_21(instruction); 2541 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2542 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 2543 2544 const char *rs = GPR(rs_value, info); 2545 2546 return img_format("ASET 0x%" PRIx64 ", %" PRId64 "(%s)", 2547 bit_value, s_value, rs); 2548 } 2549 2550 2551 /* 2552 * 2553 * 2554 * 3 2 1 2555 * 10987654321098765432109876543210 2556 * 001000 x1110000101 2557 * rt ----- 2558 * rs ----- 2559 * rd ----- 2560 */ 2561 static char *BALC_16_(uint64 instruction, Dis_info *info) 2562 { 2563 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction); 2564 2565 g_autofree char *s = ADDRESS(s_value, 2, info); 2566 2567 return img_format("BALC %s", s); 2568 } 2569 2570 2571 /* 2572 * 2573 * 2574 * 3 2 1 2575 * 10987654321098765432109876543210 2576 * 001000 x1110000101 2577 * rt ----- 2578 * rs ----- 2579 * rd ----- 2580 */ 2581 static char *BALC_32_(uint64 instruction, Dis_info *info) 2582 { 2583 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction); 2584 2585 g_autofree char *s = ADDRESS(s_value, 4, info); 2586 2587 return img_format("BALC %s", s); 2588 } 2589 2590 2591 /* 2592 * 2593 * 2594 * 3 2 1 2595 * 10987654321098765432109876543210 2596 * 001000 x1110000101 2597 * rt ----- 2598 * rs ----- 2599 * rd ----- 2600 */ 2601 static char *BALRSC(uint64 instruction, Dis_info *info) 2602 { 2603 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2604 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2605 2606 const char *rt = GPR(rt_value, info); 2607 const char *rs = GPR(rs_value, info); 2608 2609 return img_format("BALRSC %s, %s", rt, rs); 2610 } 2611 2612 2613 /* 2614 * 2615 * 2616 * 3 2 1 2617 * 10987654321098765432109876543210 2618 * 001000 x1110000101 2619 * rt ----- 2620 * rs ----- 2621 * rd ----- 2622 */ 2623 static char *BBEQZC(uint64 instruction, Dis_info *info) 2624 { 2625 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2626 uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction); 2627 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction); 2628 2629 const char *rt = GPR(rt_value, info); 2630 g_autofree char *s = ADDRESS(s_value, 4, info); 2631 2632 return img_format("BBEQZC %s, 0x%" PRIx64 ", %s", rt, bit_value, s); 2633 } 2634 2635 2636 /* 2637 * 2638 * 2639 * 3 2 1 2640 * 10987654321098765432109876543210 2641 * 001000 x1110000101 2642 * rt ----- 2643 * rs ----- 2644 * rd ----- 2645 */ 2646 static char *BBNEZC(uint64 instruction, Dis_info *info) 2647 { 2648 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2649 uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction); 2650 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction); 2651 2652 const char *rt = GPR(rt_value, info); 2653 g_autofree char *s = ADDRESS(s_value, 4, info); 2654 2655 return img_format("BBNEZC %s, 0x%" PRIx64 ", %s", rt, bit_value, s); 2656 } 2657 2658 2659 /* 2660 * 2661 * 2662 * 3 2 1 2663 * 10987654321098765432109876543210 2664 * 001000 x1110000101 2665 * rt ----- 2666 * rs ----- 2667 * rd ----- 2668 */ 2669 static char *BC_16_(uint64 instruction, Dis_info *info) 2670 { 2671 int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction); 2672 2673 g_autofree char *s = ADDRESS(s_value, 2, info); 2674 2675 return img_format("BC %s", s); 2676 } 2677 2678 2679 /* 2680 * 2681 * 2682 * 3 2 1 2683 * 10987654321098765432109876543210 2684 * 001000 x1110000101 2685 * rt ----- 2686 * rs ----- 2687 * rd ----- 2688 */ 2689 static char *BC_32_(uint64 instruction, Dis_info *info) 2690 { 2691 int64 s_value = extract_s__se25_0_24_to_1_s1(instruction); 2692 2693 g_autofree char *s = ADDRESS(s_value, 4, info); 2694 2695 return img_format("BC %s", s); 2696 } 2697 2698 2699 /* 2700 * 2701 * 2702 * 3 2 1 2703 * 10987654321098765432109876543210 2704 * 001000 x1110000101 2705 * rt ----- 2706 * rs ----- 2707 * rd ----- 2708 */ 2709 static char *BC1EQZC(uint64 instruction, Dis_info *info) 2710 { 2711 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 2712 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction); 2713 2714 const char *ft = FPR(ft_value, info); 2715 g_autofree char *s = ADDRESS(s_value, 4, info); 2716 2717 return img_format("BC1EQZC %s, %s", ft, s); 2718 } 2719 2720 2721 /* 2722 * 2723 * 2724 * 3 2 1 2725 * 10987654321098765432109876543210 2726 * 001000 x1110000101 2727 * rt ----- 2728 * rs ----- 2729 * rd ----- 2730 */ 2731 static char *BC1NEZC(uint64 instruction, Dis_info *info) 2732 { 2733 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 2734 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction); 2735 2736 const char *ft = FPR(ft_value, info); 2737 g_autofree char *s = ADDRESS(s_value, 4, info); 2738 2739 return img_format("BC1NEZC %s, %s", ft, s); 2740 } 2741 2742 2743 /* 2744 * 2745 * 2746 * 3 2 1 2747 * 10987654321098765432109876543210 2748 * 001000 x1110000101 2749 * rt ----- 2750 * rs ----- 2751 * rd ----- 2752 */ 2753 static char *BC2EQZC(uint64 instruction, Dis_info *info) 2754 { 2755 uint64 ct_value = extract_ct_25_24_23_22_21(instruction); 2756 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction); 2757 2758 g_autofree char *s = ADDRESS(s_value, 4, info); 2759 2760 return img_format("BC2EQZC CP%" PRIu64 ", %s", ct_value, s); 2761 } 2762 2763 2764 /* 2765 * 2766 * 2767 * 3 2 1 2768 * 10987654321098765432109876543210 2769 * 001000 x1110000101 2770 * rt ----- 2771 * rs ----- 2772 * rd ----- 2773 */ 2774 static char *BC2NEZC(uint64 instruction, Dis_info *info) 2775 { 2776 uint64 ct_value = extract_ct_25_24_23_22_21(instruction); 2777 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction); 2778 2779 g_autofree char *s = ADDRESS(s_value, 4, info); 2780 2781 return img_format("BC2NEZC CP%" PRIu64 ", %s", ct_value, s); 2782 } 2783 2784 2785 /* 2786 * 2787 * 2788 * 3 2 1 2789 * 10987654321098765432109876543210 2790 * 001000 x1110000101 2791 * rt ----- 2792 * rs ----- 2793 * rd ----- 2794 */ 2795 static char *BEQC_16_(uint64 instruction, Dis_info *info) 2796 { 2797 uint64 rt3_value = extract_rt3_9_8_7(instruction); 2798 uint64 rs3_value = extract_rs3_6_5_4(instruction); 2799 uint64 u_value = extract_u_3_2_1_0__s1(instruction); 2800 2801 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 2802 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 2803 g_autofree char *u = ADDRESS(u_value, 2, info); 2804 2805 return img_format("BEQC %s, %s, %s", rs3, rt3, u); 2806 } 2807 2808 2809 /* 2810 * 2811 * 2812 * 3 2 1 2813 * 10987654321098765432109876543210 2814 * 001000 x1110000101 2815 * rt ----- 2816 * rs ----- 2817 * rd ----- 2818 */ 2819 static char *BEQC_32_(uint64 instruction, Dis_info *info) 2820 { 2821 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2822 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2823 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction); 2824 2825 const char *rs = GPR(rs_value, info); 2826 const char *rt = GPR(rt_value, info); 2827 g_autofree char *s = ADDRESS(s_value, 4, info); 2828 2829 return img_format("BEQC %s, %s, %s", rs, rt, s); 2830 } 2831 2832 2833 /* 2834 * 2835 * 2836 * 3 2 1 2837 * 10987654321098765432109876543210 2838 * 001000 x1110000101 2839 * rt ----- 2840 * rs ----- 2841 * rd ----- 2842 */ 2843 static char *BEQIC(uint64 instruction, Dis_info *info) 2844 { 2845 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2846 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction); 2847 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction); 2848 2849 const char *rt = GPR(rt_value, info); 2850 g_autofree char *s = ADDRESS(s_value, 4, info); 2851 2852 return img_format("BEQIC %s, 0x%" PRIx64 ", %s", rt, u_value, s); 2853 } 2854 2855 2856 /* 2857 * 2858 * 2859 * 3 2 1 2860 * 10987654321098765432109876543210 2861 * 001000 x1110000101 2862 * rt ----- 2863 * rs ----- 2864 * rd ----- 2865 */ 2866 static char *BEQZC_16_(uint64 instruction, Dis_info *info) 2867 { 2868 uint64 rt3_value = extract_rt3_9_8_7(instruction); 2869 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction); 2870 2871 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 2872 g_autofree char *s = ADDRESS(s_value, 2, info); 2873 2874 return img_format("BEQZC %s, %s", rt3, s); 2875 } 2876 2877 2878 /* 2879 * 2880 * 2881 * 3 2 1 2882 * 10987654321098765432109876543210 2883 * 001000 x1110000101 2884 * rt ----- 2885 * rs ----- 2886 * rd ----- 2887 */ 2888 static char *BGEC(uint64 instruction, Dis_info *info) 2889 { 2890 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2891 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2892 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction); 2893 2894 const char *rs = GPR(rs_value, info); 2895 const char *rt = GPR(rt_value, info); 2896 g_autofree char *s = ADDRESS(s_value, 4, info); 2897 2898 return img_format("BGEC %s, %s, %s", rs, rt, s); 2899 } 2900 2901 2902 /* 2903 * 2904 * 2905 * 3 2 1 2906 * 10987654321098765432109876543210 2907 * 001000 x1110000101 2908 * rt ----- 2909 * rs ----- 2910 * rd ----- 2911 */ 2912 static char *BGEIC(uint64 instruction, Dis_info *info) 2913 { 2914 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2915 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction); 2916 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction); 2917 2918 const char *rt = GPR(rt_value, info); 2919 g_autofree char *s = ADDRESS(s_value, 4, info); 2920 2921 return img_format("BGEIC %s, 0x%" PRIx64 ", %s", rt, u_value, s); 2922 } 2923 2924 2925 /* 2926 * 2927 * 2928 * 3 2 1 2929 * 10987654321098765432109876543210 2930 * 001000 x1110000101 2931 * rt ----- 2932 * rs ----- 2933 * rd ----- 2934 */ 2935 static char *BGEIUC(uint64 instruction, Dis_info *info) 2936 { 2937 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2938 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction); 2939 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction); 2940 2941 const char *rt = GPR(rt_value, info); 2942 g_autofree char *s = ADDRESS(s_value, 4, info); 2943 2944 return img_format("BGEIUC %s, 0x%" PRIx64 ", %s", rt, u_value, s); 2945 } 2946 2947 2948 /* 2949 * 2950 * 2951 * 3 2 1 2952 * 10987654321098765432109876543210 2953 * 001000 x1110000101 2954 * rt ----- 2955 * rs ----- 2956 * rd ----- 2957 */ 2958 static char *BGEUC(uint64 instruction, Dis_info *info) 2959 { 2960 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2961 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2962 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction); 2963 2964 const char *rs = GPR(rs_value, info); 2965 const char *rt = GPR(rt_value, info); 2966 g_autofree char *s = ADDRESS(s_value, 4, info); 2967 2968 return img_format("BGEUC %s, %s, %s", rs, rt, s); 2969 } 2970 2971 2972 /* 2973 * 2974 * 2975 * 3 2 1 2976 * 10987654321098765432109876543210 2977 * 001000 x1110000101 2978 * rt ----- 2979 * rs ----- 2980 * rd ----- 2981 */ 2982 static char *BLTC(uint64 instruction, Dis_info *info) 2983 { 2984 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 2985 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 2986 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction); 2987 2988 const char *rs = GPR(rs_value, info); 2989 const char *rt = GPR(rt_value, info); 2990 g_autofree char *s = ADDRESS(s_value, 4, info); 2991 2992 return img_format("BLTC %s, %s, %s", rs, rt, s); 2993 } 2994 2995 2996 /* 2997 * 2998 * 2999 * 3 2 1 3000 * 10987654321098765432109876543210 3001 * 001000 x1110000101 3002 * rt ----- 3003 * rs ----- 3004 * rd ----- 3005 */ 3006 static char *BLTIC(uint64 instruction, Dis_info *info) 3007 { 3008 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 3009 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction); 3010 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction); 3011 3012 const char *rt = GPR(rt_value, info); 3013 g_autofree char *s = ADDRESS(s_value, 4, info); 3014 3015 return img_format("BLTIC %s, 0x%" PRIx64 ", %s", rt, u_value, s); 3016 } 3017 3018 3019 /* 3020 * 3021 * 3022 * 3 2 1 3023 * 10987654321098765432109876543210 3024 * 001000 x1110000101 3025 * rt ----- 3026 * rs ----- 3027 * rd ----- 3028 */ 3029 static char *BLTIUC(uint64 instruction, Dis_info *info) 3030 { 3031 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 3032 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction); 3033 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction); 3034 3035 const char *rt = GPR(rt_value, info); 3036 g_autofree char *s = ADDRESS(s_value, 4, info); 3037 3038 return img_format("BLTIUC %s, 0x%" PRIx64 ", %s", rt, u_value, s); 3039 } 3040 3041 3042 /* 3043 * 3044 * 3045 * 3 2 1 3046 * 10987654321098765432109876543210 3047 * 001000 x1110000101 3048 * rt ----- 3049 * rs ----- 3050 * rd ----- 3051 */ 3052 static char *BLTUC(uint64 instruction, Dis_info *info) 3053 { 3054 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 3055 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 3056 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction); 3057 3058 const char *rs = GPR(rs_value, info); 3059 const char *rt = GPR(rt_value, info); 3060 g_autofree char *s = ADDRESS(s_value, 4, info); 3061 3062 return img_format("BLTUC %s, %s, %s", rs, rt, s); 3063 } 3064 3065 3066 /* 3067 * 3068 * 3069 * 3 2 1 3070 * 10987654321098765432109876543210 3071 * 001000 x1110000101 3072 * rt ----- 3073 * rs ----- 3074 * rd ----- 3075 */ 3076 static char *BNEC_16_(uint64 instruction, Dis_info *info) 3077 { 3078 uint64 rt3_value = extract_rt3_9_8_7(instruction); 3079 uint64 rs3_value = extract_rs3_6_5_4(instruction); 3080 uint64 u_value = extract_u_3_2_1_0__s1(instruction); 3081 3082 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 3083 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 3084 g_autofree char *u = ADDRESS(u_value, 2, info); 3085 3086 return img_format("BNEC %s, %s, %s", rs3, rt3, u); 3087 } 3088 3089 3090 /* 3091 * 3092 * 3093 * 3 2 1 3094 * 10987654321098765432109876543210 3095 * 001000 x1110000101 3096 * rt ----- 3097 * rs ----- 3098 * rd ----- 3099 */ 3100 static char *BNEC_32_(uint64 instruction, Dis_info *info) 3101 { 3102 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 3103 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 3104 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction); 3105 3106 const char *rs = GPR(rs_value, info); 3107 const char *rt = GPR(rt_value, info); 3108 g_autofree char *s = ADDRESS(s_value, 4, info); 3109 3110 return img_format("BNEC %s, %s, %s", rs, rt, s); 3111 } 3112 3113 3114 /* 3115 * 3116 * 3117 * 3 2 1 3118 * 10987654321098765432109876543210 3119 * 001000 x1110000101 3120 * rt ----- 3121 * rs ----- 3122 * rd ----- 3123 */ 3124 static char *BNEIC(uint64 instruction, Dis_info *info) 3125 { 3126 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 3127 uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction); 3128 int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction); 3129 3130 const char *rt = GPR(rt_value, info); 3131 g_autofree char *s = ADDRESS(s_value, 4, info); 3132 3133 return img_format("BNEIC %s, 0x%" PRIx64 ", %s", rt, u_value, s); 3134 } 3135 3136 3137 /* 3138 * 3139 * 3140 * 3 2 1 3141 * 10987654321098765432109876543210 3142 * 001000 x1110000101 3143 * rt ----- 3144 * rs ----- 3145 * rd ----- 3146 */ 3147 static char *BNEZC_16_(uint64 instruction, Dis_info *info) 3148 { 3149 uint64 rt3_value = extract_rt3_9_8_7(instruction); 3150 int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction); 3151 3152 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 3153 g_autofree char *s = ADDRESS(s_value, 2, info); 3154 3155 return img_format("BNEZC %s, %s", rt3, s); 3156 } 3157 3158 3159 /* 3160 * [DSP] BPOSGE32C offset - Branch on greater than or equal to value 32 in 3161 * DSPControl Pos field 3162 * 3163 * 3 2 1 3164 * 10987654321098765432109876543210 3165 * 100010xxxxx0010001 3166 * s[13:1] ------------- 3167 * s[14] - 3168 */ 3169 static char *BPOSGE32C(uint64 instruction, Dis_info *info) 3170 { 3171 int64 s_value = extract_s__se14_0_13_to_1_s1(instruction); 3172 3173 g_autofree char *s = ADDRESS(s_value, 4, info); 3174 3175 return img_format("BPOSGE32C %s", s); 3176 } 3177 3178 3179 /* 3180 * 3181 * 3182 * 3 2 1 3183 * 10987654321098765432109876543210 3184 * 001000 x1110000101 3185 * rt ----- 3186 * rs ----- 3187 * rd ----- 3188 */ 3189 static char *BREAK_16_(uint64 instruction, Dis_info *info) 3190 { 3191 uint64 code_value = extract_code_2_1_0(instruction); 3192 3193 3194 return img_format("BREAK 0x%" PRIx64, code_value); 3195 } 3196 3197 3198 /* 3199 * BREAK code - Break. Cause a Breakpoint exception 3200 * 3201 * 3 2 1 3202 * 10987654321098765432109876543210 3203 * 001000 x1110000101 3204 * rt ----- 3205 * rs ----- 3206 * rd ----- 3207 */ 3208 static char *BREAK_32_(uint64 instruction, Dis_info *info) 3209 { 3210 uint64 code_value = extract_code_18_to_0(instruction); 3211 3212 3213 return img_format("BREAK 0x%" PRIx64, code_value); 3214 } 3215 3216 3217 /* 3218 * 3219 * 3220 * 3 2 1 3221 * 10987654321098765432109876543210 3222 * 001000 x1110000101 3223 * rt ----- 3224 * rs ----- 3225 * rd ----- 3226 */ 3227 static char *BRSC(uint64 instruction, Dis_info *info) 3228 { 3229 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 3230 3231 const char *rs = GPR(rs_value, info); 3232 3233 return img_format("BRSC %s", rs); 3234 } 3235 3236 3237 /* 3238 * 3239 * 3240 * 3 2 1 3241 * 10987654321098765432109876543210 3242 * 001000 x1110000101 3243 * rt ----- 3244 * rs ----- 3245 * rd ----- 3246 */ 3247 static char *CACHE(uint64 instruction, Dis_info *info) 3248 { 3249 uint64 op_value = extract_op_25_24_23_22_21(instruction); 3250 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 3251 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 3252 3253 const char *rs = GPR(rs_value, info); 3254 3255 return img_format("CACHE 0x%" PRIx64 ", %s(%s)", op_value, s_value, rs); 3256 } 3257 3258 3259 /* 3260 * 3261 * 3262 * 3 2 1 3263 * 10987654321098765432109876543210 3264 * 001000 x1110000101 3265 * rt ----- 3266 * rs ----- 3267 * rd ----- 3268 */ 3269 static char *CACHEE(uint64 instruction, Dis_info *info) 3270 { 3271 uint64 op_value = extract_op_25_24_23_22_21(instruction); 3272 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 3273 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 3274 3275 const char *rs = GPR(rs_value, info); 3276 3277 return img_format("CACHEE 0x%" PRIx64 ", %s(%s)", op_value, s_value, rs); 3278 } 3279 3280 3281 /* 3282 * 3283 * 3284 * 3 2 1 3285 * 10987654321098765432109876543210 3286 * 001000 x1110000101 3287 * rt ----- 3288 * rs ----- 3289 * rd ----- 3290 */ 3291 static char *CEIL_L_D(uint64 instruction, Dis_info *info) 3292 { 3293 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3294 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3295 3296 const char *ft = FPR(ft_value, info); 3297 const char *fs = FPR(fs_value, info); 3298 3299 return img_format("CEIL.L.D %s, %s", ft, fs); 3300 } 3301 3302 3303 /* 3304 * 3305 * 3306 * 3 2 1 3307 * 10987654321098765432109876543210 3308 * 001000 x1110000101 3309 * rt ----- 3310 * rs ----- 3311 * rd ----- 3312 */ 3313 static char *CEIL_L_S(uint64 instruction, Dis_info *info) 3314 { 3315 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3316 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3317 3318 const char *ft = FPR(ft_value, info); 3319 const char *fs = FPR(fs_value, info); 3320 3321 return img_format("CEIL.L.S %s, %s", ft, fs); 3322 } 3323 3324 3325 /* 3326 * 3327 * 3328 * 3 2 1 3329 * 10987654321098765432109876543210 3330 * 001000 x1110000101 3331 * rt ----- 3332 * rs ----- 3333 * rd ----- 3334 */ 3335 static char *CEIL_W_D(uint64 instruction, Dis_info *info) 3336 { 3337 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3338 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3339 3340 const char *ft = FPR(ft_value, info); 3341 const char *fs = FPR(fs_value, info); 3342 3343 return img_format("CEIL.W.D %s, %s", ft, fs); 3344 } 3345 3346 3347 /* 3348 * 3349 * 3350 * 3 2 1 3351 * 10987654321098765432109876543210 3352 * 001000 x1110000101 3353 * rt ----- 3354 * rs ----- 3355 * rd ----- 3356 */ 3357 static char *CEIL_W_S(uint64 instruction, Dis_info *info) 3358 { 3359 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3360 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3361 3362 const char *ft = FPR(ft_value, info); 3363 const char *fs = FPR(fs_value, info); 3364 3365 return img_format("CEIL.W.S %s, %s", ft, fs); 3366 } 3367 3368 3369 /* 3370 * 3371 * 3372 * 3 2 1 3373 * 10987654321098765432109876543210 3374 * 001000 x1110000101 3375 * rt ----- 3376 * rs ----- 3377 * rd ----- 3378 */ 3379 static char *CFC1(uint64 instruction, Dis_info *info) 3380 { 3381 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 3382 uint64 cs_value = extract_cs_20_19_18_17_16(instruction); 3383 3384 const char *rt = GPR(rt_value, info); 3385 3386 return img_format("CFC1 %s, CP%" PRIu64, rt, cs_value); 3387 } 3388 3389 3390 /* 3391 * 3392 * 3393 * 3 2 1 3394 * 10987654321098765432109876543210 3395 * 001000 x1110000101 3396 * rt ----- 3397 * rs ----- 3398 * rd ----- 3399 */ 3400 static char *CFC2(uint64 instruction, Dis_info *info) 3401 { 3402 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 3403 uint64 cs_value = extract_cs_20_19_18_17_16(instruction); 3404 3405 const char *rt = GPR(rt_value, info); 3406 3407 return img_format("CFC2 %s, CP%" PRIu64, rt, cs_value); 3408 } 3409 3410 3411 /* 3412 * 3413 * 3414 * 3 2 1 3415 * 10987654321098765432109876543210 3416 * 001000 x1110000101 3417 * rt ----- 3418 * rs ----- 3419 * rd ----- 3420 */ 3421 static char *CLASS_D(uint64 instruction, Dis_info *info) 3422 { 3423 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3424 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3425 3426 const char *ft = FPR(ft_value, info); 3427 const char *fs = FPR(fs_value, info); 3428 3429 return img_format("CLASS.D %s, %s", ft, fs); 3430 } 3431 3432 3433 /* 3434 * 3435 * 3436 * 3 2 1 3437 * 10987654321098765432109876543210 3438 * 001000 x1110000101 3439 * rt ----- 3440 * rs ----- 3441 * rd ----- 3442 */ 3443 static char *CLASS_S(uint64 instruction, Dis_info *info) 3444 { 3445 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3446 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3447 3448 const char *ft = FPR(ft_value, info); 3449 const char *fs = FPR(fs_value, info); 3450 3451 return img_format("CLASS.S %s, %s", ft, fs); 3452 } 3453 3454 3455 /* 3456 * 3457 * 3458 * 3 2 1 3459 * 10987654321098765432109876543210 3460 * 001000 x1110000101 3461 * rt ----- 3462 * rs ----- 3463 * rd ----- 3464 */ 3465 static char *CLO(uint64 instruction, Dis_info *info) 3466 { 3467 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 3468 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 3469 3470 const char *rt = GPR(rt_value, info); 3471 const char *rs = GPR(rs_value, info); 3472 3473 return img_format("CLO %s, %s", rt, rs); 3474 } 3475 3476 3477 /* 3478 * 3479 * 3480 * 3 2 1 3481 * 10987654321098765432109876543210 3482 * 001000 x1110000101 3483 * rt ----- 3484 * rs ----- 3485 * rd ----- 3486 */ 3487 static char *CLZ(uint64 instruction, Dis_info *info) 3488 { 3489 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 3490 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 3491 3492 const char *rt = GPR(rt_value, info); 3493 const char *rs = GPR(rs_value, info); 3494 3495 return img_format("CLZ %s, %s", rt, rs); 3496 } 3497 3498 3499 /* 3500 * 3501 * 3502 * 3 2 1 3503 * 10987654321098765432109876543210 3504 * 001000 x1110000101 3505 * rt ----- 3506 * rs ----- 3507 * rd ----- 3508 */ 3509 static char *CMP_AF_D(uint64 instruction, Dis_info *info) 3510 { 3511 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3512 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3513 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3514 3515 const char *fd = FPR(fd_value, info); 3516 const char *fs = FPR(fs_value, info); 3517 const char *ft = FPR(ft_value, info); 3518 3519 return img_format("CMP.AF.D %s, %s, %s", fd, fs, ft); 3520 } 3521 3522 3523 /* 3524 * 3525 * 3526 * 3 2 1 3527 * 10987654321098765432109876543210 3528 * 001000 x1110000101 3529 * rt ----- 3530 * rs ----- 3531 * rd ----- 3532 */ 3533 static char *CMP_AF_S(uint64 instruction, Dis_info *info) 3534 { 3535 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3536 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3537 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3538 3539 const char *fd = FPR(fd_value, info); 3540 const char *fs = FPR(fs_value, info); 3541 const char *ft = FPR(ft_value, info); 3542 3543 return img_format("CMP.AF.S %s, %s, %s", fd, fs, ft); 3544 } 3545 3546 3547 /* 3548 * 3549 * 3550 * 3 2 1 3551 * 10987654321098765432109876543210 3552 * 001000 x1110000101 3553 * rt ----- 3554 * rs ----- 3555 * rd ----- 3556 */ 3557 static char *CMP_EQ_D(uint64 instruction, Dis_info *info) 3558 { 3559 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3560 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3561 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3562 3563 const char *fd = FPR(fd_value, info); 3564 const char *fs = FPR(fs_value, info); 3565 const char *ft = FPR(ft_value, info); 3566 3567 return img_format("CMP.EQ.D %s, %s, %s", fd, fs, ft); 3568 } 3569 3570 3571 /* 3572 * [DSP] CMP.EQ.PH rs, rt - Compare vectors of signed integer halfword values 3573 * 3574 * 3 2 1 3575 * 10987654321098765432109876543210 3576 * 001000 xxxxxx0000000101 3577 * rt ----- 3578 * rs ----- 3579 */ 3580 static char *CMP_EQ_PH(uint64 instruction, Dis_info *info) 3581 { 3582 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 3583 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 3584 3585 const char *rs = GPR(rs_value, info); 3586 const char *rt = GPR(rt_value, info); 3587 3588 return img_format("CMP.EQ.PH %s, %s", rs, rt); 3589 } 3590 3591 3592 /* 3593 * 3594 * 3595 * 3 2 1 3596 * 10987654321098765432109876543210 3597 * 001000 x1110000101 3598 * rt ----- 3599 * rs ----- 3600 * rd ----- 3601 */ 3602 static char *CMP_EQ_S(uint64 instruction, Dis_info *info) 3603 { 3604 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3605 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3606 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3607 3608 const char *fd = FPR(fd_value, info); 3609 const char *fs = FPR(fs_value, info); 3610 const char *ft = FPR(ft_value, info); 3611 3612 return img_format("CMP.EQ.S %s, %s, %s", fd, fs, ft); 3613 } 3614 3615 3616 /* 3617 * 3618 * 3619 * 3 2 1 3620 * 10987654321098765432109876543210 3621 * 001000 x1110000101 3622 * rt ----- 3623 * rs ----- 3624 * rd ----- 3625 */ 3626 static char *CMP_LE_D(uint64 instruction, Dis_info *info) 3627 { 3628 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3629 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3630 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3631 3632 const char *fd = FPR(fd_value, info); 3633 const char *fs = FPR(fs_value, info); 3634 const char *ft = FPR(ft_value, info); 3635 3636 return img_format("CMP.LE.D %s, %s, %s", fd, fs, ft); 3637 } 3638 3639 3640 /* 3641 * [DSP] CMP.LE.PH rs, rt - Compare vectors of signed integer halfword values 3642 * 3643 * 3 2 1 3644 * 10987654321098765432109876543210 3645 * 001000 xxxxxx0010000101 3646 * rt ----- 3647 * rs ----- 3648 */ 3649 static char *CMP_LE_PH(uint64 instruction, Dis_info *info) 3650 { 3651 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 3652 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 3653 3654 const char *rs = GPR(rs_value, info); 3655 const char *rt = GPR(rt_value, info); 3656 3657 return img_format("CMP.LE.PH %s, %s", rs, rt); 3658 } 3659 3660 3661 /* 3662 * 3663 * 3664 * 3 2 1 3665 * 10987654321098765432109876543210 3666 * 001000 x1110000101 3667 * rt ----- 3668 * rs ----- 3669 * rd ----- 3670 */ 3671 static char *CMP_LE_S(uint64 instruction, Dis_info *info) 3672 { 3673 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3674 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3675 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3676 3677 const char *fd = FPR(fd_value, info); 3678 const char *fs = FPR(fs_value, info); 3679 const char *ft = FPR(ft_value, info); 3680 3681 return img_format("CMP.LE.S %s, %s, %s", fd, fs, ft); 3682 } 3683 3684 3685 /* 3686 * 3687 * 3688 * 3 2 1 3689 * 10987654321098765432109876543210 3690 * 001000 x1110000101 3691 * rt ----- 3692 * rs ----- 3693 * rd ----- 3694 */ 3695 static char *CMP_LT_D(uint64 instruction, Dis_info *info) 3696 { 3697 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3698 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3699 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3700 3701 const char *fd = FPR(fd_value, info); 3702 const char *fs = FPR(fs_value, info); 3703 const char *ft = FPR(ft_value, info); 3704 3705 return img_format("CMP.LT.D %s, %s, %s", fd, fs, ft); 3706 } 3707 3708 3709 /* 3710 * [DSP] CMP.LT.PH rs, rt - Compare vectors of signed integer halfword values 3711 * 3712 * 3 2 1 3713 * 10987654321098765432109876543210 3714 * 001000 xxxxxx0001000101 3715 * rt ----- 3716 * rs ----- 3717 */ 3718 static char *CMP_LT_PH(uint64 instruction, Dis_info *info) 3719 { 3720 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 3721 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 3722 3723 const char *rs = GPR(rs_value, info); 3724 const char *rt = GPR(rt_value, info); 3725 3726 return img_format("CMP.LT.PH %s, %s", rs, rt); 3727 } 3728 3729 3730 /* 3731 * 3732 * 3733 * 3 2 1 3734 * 10987654321098765432109876543210 3735 * 001000 x1110000101 3736 * rt ----- 3737 * rs ----- 3738 * rd ----- 3739 */ 3740 static char *CMP_LT_S(uint64 instruction, Dis_info *info) 3741 { 3742 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3743 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3744 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3745 3746 const char *fd = FPR(fd_value, info); 3747 const char *fs = FPR(fs_value, info); 3748 const char *ft = FPR(ft_value, info); 3749 3750 return img_format("CMP.LT.S %s, %s, %s", fd, fs, ft); 3751 } 3752 3753 3754 /* 3755 * 3756 * 3757 * 3 2 1 3758 * 10987654321098765432109876543210 3759 * 001000 x1110000101 3760 * rt ----- 3761 * rs ----- 3762 * rd ----- 3763 */ 3764 static char *CMP_NE_D(uint64 instruction, Dis_info *info) 3765 { 3766 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3767 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3768 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3769 3770 const char *fd = FPR(fd_value, info); 3771 const char *fs = FPR(fs_value, info); 3772 const char *ft = FPR(ft_value, info); 3773 3774 return img_format("CMP.NE.D %s, %s, %s", fd, fs, ft); 3775 } 3776 3777 3778 /* 3779 * 3780 * 3781 * 3 2 1 3782 * 10987654321098765432109876543210 3783 * 001000 x1110000101 3784 * rt ----- 3785 * rs ----- 3786 * rd ----- 3787 */ 3788 static char *CMP_NE_S(uint64 instruction, Dis_info *info) 3789 { 3790 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3791 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3792 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3793 3794 const char *fd = FPR(fd_value, info); 3795 const char *fs = FPR(fs_value, info); 3796 const char *ft = FPR(ft_value, info); 3797 3798 return img_format("CMP.NE.S %s, %s, %s", fd, fs, ft); 3799 } 3800 3801 3802 /* 3803 * 3804 * 3805 * 3 2 1 3806 * 10987654321098765432109876543210 3807 * 001000 x1110000101 3808 * rt ----- 3809 * rs ----- 3810 * rd ----- 3811 */ 3812 static char *CMP_OR_D(uint64 instruction, Dis_info *info) 3813 { 3814 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3815 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3816 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3817 3818 const char *fd = FPR(fd_value, info); 3819 const char *fs = FPR(fs_value, info); 3820 const char *ft = FPR(ft_value, info); 3821 3822 return img_format("CMP.OR.D %s, %s, %s", fd, fs, ft); 3823 } 3824 3825 3826 /* 3827 * 3828 * 3829 * 3 2 1 3830 * 10987654321098765432109876543210 3831 * 001000 x1110000101 3832 * rt ----- 3833 * rs ----- 3834 * rd ----- 3835 */ 3836 static char *CMP_OR_S(uint64 instruction, Dis_info *info) 3837 { 3838 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3839 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3840 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3841 3842 const char *fd = FPR(fd_value, info); 3843 const char *fs = FPR(fs_value, info); 3844 const char *ft = FPR(ft_value, info); 3845 3846 return img_format("CMP.OR.S %s, %s, %s", fd, fs, ft); 3847 } 3848 3849 3850 /* 3851 * 3852 * 3853 * 3 2 1 3854 * 10987654321098765432109876543210 3855 * 001000 x1110000101 3856 * rt ----- 3857 * rs ----- 3858 * rd ----- 3859 */ 3860 static char *CMP_SAF_D(uint64 instruction, Dis_info *info) 3861 { 3862 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3863 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3864 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3865 3866 const char *fd = FPR(fd_value, info); 3867 const char *fs = FPR(fs_value, info); 3868 const char *ft = FPR(ft_value, info); 3869 3870 return img_format("CMP.SAF.D %s, %s, %s", fd, fs, ft); 3871 } 3872 3873 3874 /* 3875 * 3876 * 3877 * 3 2 1 3878 * 10987654321098765432109876543210 3879 * 001000 x1110000101 3880 * rt ----- 3881 * rs ----- 3882 * rd ----- 3883 */ 3884 static char *CMP_SAF_S(uint64 instruction, Dis_info *info) 3885 { 3886 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3887 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3888 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3889 3890 const char *fd = FPR(fd_value, info); 3891 const char *fs = FPR(fs_value, info); 3892 const char *ft = FPR(ft_value, info); 3893 3894 return img_format("CMP.SAF.S %s, %s, %s", fd, fs, ft); 3895 } 3896 3897 3898 /* 3899 * 3900 * 3901 * 3 2 1 3902 * 10987654321098765432109876543210 3903 * 001000 x1110000101 3904 * rt ----- 3905 * rs ----- 3906 * rd ----- 3907 */ 3908 static char *CMP_SEQ_D(uint64 instruction, Dis_info *info) 3909 { 3910 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3911 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3912 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3913 3914 const char *fd = FPR(fd_value, info); 3915 const char *fs = FPR(fs_value, info); 3916 const char *ft = FPR(ft_value, info); 3917 3918 return img_format("CMP.SEQ.D %s, %s, %s", fd, fs, ft); 3919 } 3920 3921 3922 /* 3923 * 3924 * 3925 * 3 2 1 3926 * 10987654321098765432109876543210 3927 * 001000 x1110000101 3928 * rt ----- 3929 * rs ----- 3930 * rd ----- 3931 */ 3932 static char *CMP_SEQ_S(uint64 instruction, Dis_info *info) 3933 { 3934 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3935 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3936 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3937 3938 const char *fd = FPR(fd_value, info); 3939 const char *fs = FPR(fs_value, info); 3940 const char *ft = FPR(ft_value, info); 3941 3942 return img_format("CMP.SEQ.S %s, %s, %s", fd, fs, ft); 3943 } 3944 3945 3946 /* 3947 * 3948 * 3949 * 3 2 1 3950 * 10987654321098765432109876543210 3951 * 001000 x1110000101 3952 * rt ----- 3953 * rs ----- 3954 * rd ----- 3955 */ 3956 static char *CMP_SLE_D(uint64 instruction, Dis_info *info) 3957 { 3958 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3959 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3960 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3961 3962 const char *fd = FPR(fd_value, info); 3963 const char *fs = FPR(fs_value, info); 3964 const char *ft = FPR(ft_value, info); 3965 3966 return img_format("CMP.SLE.D %s, %s, %s", fd, fs, ft); 3967 } 3968 3969 3970 /* 3971 * 3972 * 3973 * 3 2 1 3974 * 10987654321098765432109876543210 3975 * 001000 x1110000101 3976 * rt ----- 3977 * rs ----- 3978 * rd ----- 3979 */ 3980 static char *CMP_SLE_S(uint64 instruction, Dis_info *info) 3981 { 3982 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 3983 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 3984 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 3985 3986 const char *fd = FPR(fd_value, info); 3987 const char *fs = FPR(fs_value, info); 3988 const char *ft = FPR(ft_value, info); 3989 3990 return img_format("CMP.SLE.S %s, %s, %s", fd, fs, ft); 3991 } 3992 3993 3994 /* 3995 * 3996 * 3997 * 3 2 1 3998 * 10987654321098765432109876543210 3999 * 001000 x1110000101 4000 * rt ----- 4001 * rs ----- 4002 * rd ----- 4003 */ 4004 static char *CMP_SLT_D(uint64 instruction, Dis_info *info) 4005 { 4006 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4007 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4008 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4009 4010 const char *fd = FPR(fd_value, info); 4011 const char *fs = FPR(fs_value, info); 4012 const char *ft = FPR(ft_value, info); 4013 4014 return img_format("CMP.SLT.D %s, %s, %s", fd, fs, ft); 4015 } 4016 4017 4018 /* 4019 * 4020 * 4021 * 3 2 1 4022 * 10987654321098765432109876543210 4023 * 001000 x1110000101 4024 * rt ----- 4025 * rs ----- 4026 * rd ----- 4027 */ 4028 static char *CMP_SLT_S(uint64 instruction, Dis_info *info) 4029 { 4030 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4031 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4032 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4033 4034 const char *fd = FPR(fd_value, info); 4035 const char *fs = FPR(fs_value, info); 4036 const char *ft = FPR(ft_value, info); 4037 4038 return img_format("CMP.SLT.S %s, %s, %s", fd, fs, ft); 4039 } 4040 4041 4042 /* 4043 * 4044 * 4045 * 3 2 1 4046 * 10987654321098765432109876543210 4047 * 001000 x1110000101 4048 * rt ----- 4049 * rs ----- 4050 * rd ----- 4051 */ 4052 static char *CMP_SNE_D(uint64 instruction, Dis_info *info) 4053 { 4054 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4055 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4056 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4057 4058 const char *fd = FPR(fd_value, info); 4059 const char *fs = FPR(fs_value, info); 4060 const char *ft = FPR(ft_value, info); 4061 4062 return img_format("CMP.SNE.D %s, %s, %s", fd, fs, ft); 4063 } 4064 4065 4066 /* 4067 * 4068 * 4069 * 3 2 1 4070 * 10987654321098765432109876543210 4071 * 001000 x1110000101 4072 * rt ----- 4073 * rs ----- 4074 * rd ----- 4075 */ 4076 static char *CMP_SNE_S(uint64 instruction, Dis_info *info) 4077 { 4078 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4079 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4080 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4081 4082 const char *fd = FPR(fd_value, info); 4083 const char *fs = FPR(fs_value, info); 4084 const char *ft = FPR(ft_value, info); 4085 4086 return img_format("CMP.SNE.S %s, %s, %s", fd, fs, ft); 4087 } 4088 4089 4090 /* 4091 * 4092 * 4093 * 3 2 1 4094 * 10987654321098765432109876543210 4095 * 001000 x1110000101 4096 * rt ----- 4097 * rs ----- 4098 * rd ----- 4099 */ 4100 static char *CMP_SOR_D(uint64 instruction, Dis_info *info) 4101 { 4102 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4103 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4104 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4105 4106 const char *fd = FPR(fd_value, info); 4107 const char *fs = FPR(fs_value, info); 4108 const char *ft = FPR(ft_value, info); 4109 4110 return img_format("CMP.SOR.D %s, %s, %s", fd, fs, ft); 4111 } 4112 4113 4114 /* 4115 * 4116 * 4117 * 3 2 1 4118 * 10987654321098765432109876543210 4119 * 001000 x1110000101 4120 * rt ----- 4121 * rs ----- 4122 * rd ----- 4123 */ 4124 static char *CMP_SOR_S(uint64 instruction, Dis_info *info) 4125 { 4126 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4127 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4128 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4129 4130 const char *fd = FPR(fd_value, info); 4131 const char *fs = FPR(fs_value, info); 4132 const char *ft = FPR(ft_value, info); 4133 4134 return img_format("CMP.SOR.S %s, %s, %s", fd, fs, ft); 4135 } 4136 4137 4138 /* 4139 * 4140 * 4141 * 3 2 1 4142 * 10987654321098765432109876543210 4143 * 001000 x1110000101 4144 * rt ----- 4145 * rs ----- 4146 * rd ----- 4147 */ 4148 static char *CMP_SUEQ_D(uint64 instruction, Dis_info *info) 4149 { 4150 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4151 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4152 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4153 4154 const char *fd = FPR(fd_value, info); 4155 const char *fs = FPR(fs_value, info); 4156 const char *ft = FPR(ft_value, info); 4157 4158 return img_format("CMP.SUEQ.D %s, %s, %s", fd, fs, ft); 4159 } 4160 4161 4162 /* 4163 * 4164 * 4165 * 3 2 1 4166 * 10987654321098765432109876543210 4167 * 001000 x1110000101 4168 * rt ----- 4169 * rs ----- 4170 * rd ----- 4171 */ 4172 static char *CMP_SUEQ_S(uint64 instruction, Dis_info *info) 4173 { 4174 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4175 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4176 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4177 4178 const char *fd = FPR(fd_value, info); 4179 const char *fs = FPR(fs_value, info); 4180 const char *ft = FPR(ft_value, info); 4181 4182 return img_format("CMP.SUEQ.S %s, %s, %s", fd, fs, ft); 4183 } 4184 4185 4186 /* 4187 * 4188 * 4189 * 3 2 1 4190 * 10987654321098765432109876543210 4191 * 001000 x1110000101 4192 * rt ----- 4193 * rs ----- 4194 * rd ----- 4195 */ 4196 static char *CMP_SULE_D(uint64 instruction, Dis_info *info) 4197 { 4198 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4199 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4200 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4201 4202 const char *fd = FPR(fd_value, info); 4203 const char *fs = FPR(fs_value, info); 4204 const char *ft = FPR(ft_value, info); 4205 4206 return img_format("CMP.SULE.D %s, %s, %s", fd, fs, ft); 4207 } 4208 4209 4210 /* 4211 * 4212 * 4213 * 3 2 1 4214 * 10987654321098765432109876543210 4215 * 001000 x1110000101 4216 * rt ----- 4217 * rs ----- 4218 * rd ----- 4219 */ 4220 static char *CMP_SULE_S(uint64 instruction, Dis_info *info) 4221 { 4222 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4223 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4224 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4225 4226 const char *fd = FPR(fd_value, info); 4227 const char *fs = FPR(fs_value, info); 4228 const char *ft = FPR(ft_value, info); 4229 4230 return img_format("CMP.SULE.S %s, %s, %s", fd, fs, ft); 4231 } 4232 4233 4234 /* 4235 * 4236 * 4237 * 3 2 1 4238 * 10987654321098765432109876543210 4239 * 001000 x1110000101 4240 * rt ----- 4241 * rs ----- 4242 * rd ----- 4243 */ 4244 static char *CMP_SULT_D(uint64 instruction, Dis_info *info) 4245 { 4246 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4247 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4248 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4249 4250 const char *fd = FPR(fd_value, info); 4251 const char *fs = FPR(fs_value, info); 4252 const char *ft = FPR(ft_value, info); 4253 4254 return img_format("CMP.SULT.D %s, %s, %s", fd, fs, ft); 4255 } 4256 4257 4258 /* 4259 * 4260 * 4261 * 3 2 1 4262 * 10987654321098765432109876543210 4263 * 001000 x1110000101 4264 * rt ----- 4265 * rs ----- 4266 * rd ----- 4267 */ 4268 static char *CMP_SULT_S(uint64 instruction, Dis_info *info) 4269 { 4270 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4271 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4272 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4273 4274 const char *fd = FPR(fd_value, info); 4275 const char *fs = FPR(fs_value, info); 4276 const char *ft = FPR(ft_value, info); 4277 4278 return img_format("CMP.SULT.S %s, %s, %s", fd, fs, ft); 4279 } 4280 4281 4282 /* 4283 * 4284 * 4285 * 3 2 1 4286 * 10987654321098765432109876543210 4287 * 001000 x1110000101 4288 * rt ----- 4289 * rs ----- 4290 * rd ----- 4291 */ 4292 static char *CMP_SUN_D(uint64 instruction, Dis_info *info) 4293 { 4294 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4295 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4296 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4297 4298 const char *fd = FPR(fd_value, info); 4299 const char *fs = FPR(fs_value, info); 4300 const char *ft = FPR(ft_value, info); 4301 4302 return img_format("CMP.SUN.D %s, %s, %s", fd, fs, ft); 4303 } 4304 4305 4306 /* 4307 * 4308 * 4309 * 3 2 1 4310 * 10987654321098765432109876543210 4311 * 001000 x1110000101 4312 * rt ----- 4313 * rs ----- 4314 * rd ----- 4315 */ 4316 static char *CMP_SUNE_D(uint64 instruction, Dis_info *info) 4317 { 4318 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4319 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4320 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4321 4322 const char *fd = FPR(fd_value, info); 4323 const char *fs = FPR(fs_value, info); 4324 const char *ft = FPR(ft_value, info); 4325 4326 return img_format("CMP.SUNE.D %s, %s, %s", fd, fs, ft); 4327 } 4328 4329 4330 /* 4331 * 4332 * 4333 * 3 2 1 4334 * 10987654321098765432109876543210 4335 * 001000 x1110000101 4336 * rt ----- 4337 * rs ----- 4338 * rd ----- 4339 */ 4340 static char *CMP_SUNE_S(uint64 instruction, Dis_info *info) 4341 { 4342 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4343 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4344 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4345 4346 const char *fd = FPR(fd_value, info); 4347 const char *fs = FPR(fs_value, info); 4348 const char *ft = FPR(ft_value, info); 4349 4350 return img_format("CMP.SUNE.S %s, %s, %s", fd, fs, ft); 4351 } 4352 4353 4354 /* 4355 * 4356 * 4357 * 3 2 1 4358 * 10987654321098765432109876543210 4359 * 001000 x1110000101 4360 * rt ----- 4361 * rs ----- 4362 * rd ----- 4363 */ 4364 static char *CMP_SUN_S(uint64 instruction, Dis_info *info) 4365 { 4366 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4367 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4368 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4369 4370 const char *fd = FPR(fd_value, info); 4371 const char *fs = FPR(fs_value, info); 4372 const char *ft = FPR(ft_value, info); 4373 4374 return img_format("CMP.SUN.S %s, %s, %s", fd, fs, ft); 4375 } 4376 4377 4378 /* 4379 * 4380 * 4381 * 3 2 1 4382 * 10987654321098765432109876543210 4383 * 001000 x1110000101 4384 * rt ----- 4385 * rs ----- 4386 * rd ----- 4387 */ 4388 static char *CMP_UEQ_D(uint64 instruction, Dis_info *info) 4389 { 4390 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4391 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4392 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4393 4394 const char *fd = FPR(fd_value, info); 4395 const char *fs = FPR(fs_value, info); 4396 const char *ft = FPR(ft_value, info); 4397 4398 return img_format("CMP.UEQ.D %s, %s, %s", fd, fs, ft); 4399 } 4400 4401 4402 /* 4403 * 4404 * 4405 * 3 2 1 4406 * 10987654321098765432109876543210 4407 * 001000 x1110000101 4408 * rt ----- 4409 * rs ----- 4410 * rd ----- 4411 */ 4412 static char *CMP_UEQ_S(uint64 instruction, Dis_info *info) 4413 { 4414 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4415 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4416 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4417 4418 const char *fd = FPR(fd_value, info); 4419 const char *fs = FPR(fs_value, info); 4420 const char *ft = FPR(ft_value, info); 4421 4422 return img_format("CMP.UEQ.S %s, %s, %s", fd, fs, ft); 4423 } 4424 4425 4426 /* 4427 * 4428 * 4429 * 3 2 1 4430 * 10987654321098765432109876543210 4431 * 001000 x1110000101 4432 * rt ----- 4433 * rs ----- 4434 * rd ----- 4435 */ 4436 static char *CMP_ULE_D(uint64 instruction, Dis_info *info) 4437 { 4438 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4439 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4440 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4441 4442 const char *fd = FPR(fd_value, info); 4443 const char *fs = FPR(fs_value, info); 4444 const char *ft = FPR(ft_value, info); 4445 4446 return img_format("CMP.ULE.D %s, %s, %s", fd, fs, ft); 4447 } 4448 4449 4450 /* 4451 * 4452 * 4453 * 3 2 1 4454 * 10987654321098765432109876543210 4455 * 001000 x1110000101 4456 * rt ----- 4457 * rs ----- 4458 * rd ----- 4459 */ 4460 static char *CMP_ULE_S(uint64 instruction, Dis_info *info) 4461 { 4462 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4463 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4464 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4465 4466 const char *fd = FPR(fd_value, info); 4467 const char *fs = FPR(fs_value, info); 4468 const char *ft = FPR(ft_value, info); 4469 4470 return img_format("CMP.ULE.S %s, %s, %s", fd, fs, ft); 4471 } 4472 4473 4474 /* 4475 * 4476 * 4477 * 3 2 1 4478 * 10987654321098765432109876543210 4479 * 001000 x1110000101 4480 * rt ----- 4481 * rs ----- 4482 * rd ----- 4483 */ 4484 static char *CMP_ULT_D(uint64 instruction, Dis_info *info) 4485 { 4486 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4487 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4488 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4489 4490 const char *fd = FPR(fd_value, info); 4491 const char *fs = FPR(fs_value, info); 4492 const char *ft = FPR(ft_value, info); 4493 4494 return img_format("CMP.ULT.D %s, %s, %s", fd, fs, ft); 4495 } 4496 4497 4498 /* 4499 * 4500 * 4501 * 3 2 1 4502 * 10987654321098765432109876543210 4503 * 001000 x1110000101 4504 * rt ----- 4505 * rs ----- 4506 * rd ----- 4507 */ 4508 static char *CMP_ULT_S(uint64 instruction, Dis_info *info) 4509 { 4510 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4511 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4512 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4513 4514 const char *fd = FPR(fd_value, info); 4515 const char *fs = FPR(fs_value, info); 4516 const char *ft = FPR(ft_value, info); 4517 4518 return img_format("CMP.ULT.S %s, %s, %s", fd, fs, ft); 4519 } 4520 4521 4522 /* 4523 * 4524 * 4525 * 3 2 1 4526 * 10987654321098765432109876543210 4527 * 001000 x1110000101 4528 * rt ----- 4529 * rs ----- 4530 * rd ----- 4531 */ 4532 static char *CMP_UN_D(uint64 instruction, Dis_info *info) 4533 { 4534 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4535 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4536 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4537 4538 const char *fd = FPR(fd_value, info); 4539 const char *fs = FPR(fs_value, info); 4540 const char *ft = FPR(ft_value, info); 4541 4542 return img_format("CMP.UN.D %s, %s, %s", fd, fs, ft); 4543 } 4544 4545 4546 /* 4547 * 4548 * 4549 * 3 2 1 4550 * 10987654321098765432109876543210 4551 * 001000 x1110000101 4552 * rt ----- 4553 * rs ----- 4554 * rd ----- 4555 */ 4556 static char *CMP_UNE_D(uint64 instruction, Dis_info *info) 4557 { 4558 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4559 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4560 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4561 4562 const char *fd = FPR(fd_value, info); 4563 const char *fs = FPR(fs_value, info); 4564 const char *ft = FPR(ft_value, info); 4565 4566 return img_format("CMP.UNE.D %s, %s, %s", fd, fs, ft); 4567 } 4568 4569 4570 /* 4571 * 4572 * 4573 * 3 2 1 4574 * 10987654321098765432109876543210 4575 * 001000 x1110000101 4576 * rt ----- 4577 * rs ----- 4578 * rd ----- 4579 */ 4580 static char *CMP_UNE_S(uint64 instruction, Dis_info *info) 4581 { 4582 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4583 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4584 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4585 4586 const char *fd = FPR(fd_value, info); 4587 const char *fs = FPR(fs_value, info); 4588 const char *ft = FPR(ft_value, info); 4589 4590 return img_format("CMP.UNE.S %s, %s, %s", fd, fs, ft); 4591 } 4592 4593 4594 /* 4595 * 4596 * 4597 * 3 2 1 4598 * 10987654321098765432109876543210 4599 * 001000 x1110000101 4600 * rt ----- 4601 * rs ----- 4602 * rd ----- 4603 */ 4604 static char *CMP_UN_S(uint64 instruction, Dis_info *info) 4605 { 4606 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4607 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4608 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 4609 4610 const char *fd = FPR(fd_value, info); 4611 const char *fs = FPR(fs_value, info); 4612 const char *ft = FPR(ft_value, info); 4613 4614 return img_format("CMP.UN.S %s, %s, %s", fd, fs, ft); 4615 } 4616 4617 4618 /* 4619 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of 4620 * four bytes and write result to GPR and DSPControl 4621 * 4622 * 3 2 1 4623 * 10987654321098765432109876543210 4624 * 001000 x0110000101 4625 * rt ----- 4626 * rs ----- 4627 * rd ----- 4628 */ 4629 static char *CMPGDU_EQ_QB(uint64 instruction, Dis_info *info) 4630 { 4631 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 4632 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 4633 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 4634 4635 const char *rd = GPR(rd_value, info); 4636 const char *rs = GPR(rs_value, info); 4637 const char *rt = GPR(rt_value, info); 4638 4639 return img_format("CMPGDU.EQ.QB %s, %s, %s", rd, rs, rt); 4640 } 4641 4642 4643 /* 4644 * [DSP] CMPGDU.LE.QB rd, rs, rt - Compare unsigned vector of 4645 * four bytes and write result to GPR and DSPControl 4646 * 4647 * 3 2 1 4648 * 10987654321098765432109876543210 4649 * 001000 x1000000101 4650 * rt ----- 4651 * rs ----- 4652 * rd ----- 4653 */ 4654 static char *CMPGDU_LE_QB(uint64 instruction, Dis_info *info) 4655 { 4656 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 4657 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 4658 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 4659 4660 const char *rd = GPR(rd_value, info); 4661 const char *rs = GPR(rs_value, info); 4662 const char *rt = GPR(rt_value, info); 4663 4664 return img_format("CMPGDU.LE.QB %s, %s, %s", rd, rs, rt); 4665 } 4666 4667 4668 /* 4669 * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of 4670 * four bytes and write result to GPR and DSPControl 4671 * 4672 * 3 2 1 4673 * 10987654321098765432109876543210 4674 * 001000 x0111000101 4675 * rt ----- 4676 * rs ----- 4677 * rd ----- 4678 */ 4679 static char *CMPGDU_LT_QB(uint64 instruction, Dis_info *info) 4680 { 4681 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 4682 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 4683 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 4684 4685 const char *rd = GPR(rd_value, info); 4686 const char *rs = GPR(rs_value, info); 4687 const char *rt = GPR(rt_value, info); 4688 4689 return img_format("CMPGDU.LT.QB %s, %s, %s", rd, rs, rt); 4690 } 4691 4692 4693 /* 4694 * [DSP] CMPGU.EQ.QB rd, rs, rt - Compare vectors of unsigned 4695 * byte values and write result to a GPR 4696 * 4697 * 3 2 1 4698 * 10987654321098765432109876543210 4699 * 001000 x0011000101 4700 * rt ----- 4701 * rs ----- 4702 * rd ----- 4703 */ 4704 static char *CMPGU_EQ_QB(uint64 instruction, Dis_info *info) 4705 { 4706 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 4707 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 4708 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 4709 4710 const char *rd = GPR(rd_value, info); 4711 const char *rs = GPR(rs_value, info); 4712 const char *rt = GPR(rt_value, info); 4713 4714 return img_format("CMPGU.EQ.QB %s, %s, %s", rd, rs, rt); 4715 } 4716 4717 4718 /* 4719 * [DSP] CMPGU.LE.QB rd, rs, rt - Compare vectors of unsigned 4720 * byte values and write result to a GPR 4721 * 4722 * 3 2 1 4723 * 10987654321098765432109876543210 4724 * 001000 x0101000101 4725 * rt ----- 4726 * rs ----- 4727 * rd ----- 4728 */ 4729 static char *CMPGU_LE_QB(uint64 instruction, Dis_info *info) 4730 { 4731 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 4732 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 4733 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 4734 4735 const char *rd = GPR(rd_value, info); 4736 const char *rs = GPR(rs_value, info); 4737 const char *rt = GPR(rt_value, info); 4738 4739 return img_format("CMPGU.LE.QB %s, %s, %s", rd, rs, rt); 4740 } 4741 4742 4743 /* 4744 * [DSP] CMPGU.LT.QB rd, rs, rt - Compare vectors of unsigned 4745 * byte values and write result to a GPR 4746 * 4747 * 3 2 1 4748 * 10987654321098765432109876543210 4749 * 001000 x0100000101 4750 * rt ----- 4751 * rs ----- 4752 * rd ----- 4753 */ 4754 static char *CMPGU_LT_QB(uint64 instruction, Dis_info *info) 4755 { 4756 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 4757 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 4758 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 4759 4760 const char *rd = GPR(rd_value, info); 4761 const char *rs = GPR(rs_value, info); 4762 const char *rt = GPR(rt_value, info); 4763 4764 return img_format("CMPGU.LT.QB %s, %s, %s", rd, rs, rt); 4765 } 4766 4767 4768 /* 4769 * [DSP] CMPU.EQ.QB rd, rs, rt - Compare vectors of unsigned 4770 * byte values 4771 * 4772 * 3 2 1 4773 * 10987654321098765432109876543210 4774 * 001000 xxxxxx1001000101 4775 * rt ----- 4776 * rs ----- 4777 */ 4778 static char *CMPU_EQ_QB(uint64 instruction, Dis_info *info) 4779 { 4780 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 4781 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 4782 4783 const char *rs = GPR(rs_value, info); 4784 const char *rt = GPR(rt_value, info); 4785 4786 return img_format("CMPU.EQ.QB %s, %s", rs, rt); 4787 } 4788 4789 4790 /* 4791 * [DSP] CMPU.LE.QB rd, rs, rt - Compare vectors of unsigned 4792 * byte values 4793 * 4794 * 3 2 1 4795 * 10987654321098765432109876543210 4796 * 001000 xxxxxx1011000101 4797 * rt ----- 4798 * rs ----- 4799 */ 4800 static char *CMPU_LE_QB(uint64 instruction, Dis_info *info) 4801 { 4802 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 4803 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 4804 4805 const char *rs = GPR(rs_value, info); 4806 const char *rt = GPR(rt_value, info); 4807 4808 return img_format("CMPU.LE.QB %s, %s", rs, rt); 4809 } 4810 4811 4812 /* 4813 * [DSP] CMPU.LT.QB rd, rs, rt - Compare vectors of unsigned 4814 * byte values 4815 * 4816 * 3 2 1 4817 * 10987654321098765432109876543210 4818 * 001000 xxxxxx1010000101 4819 * rt ----- 4820 * rs ----- 4821 */ 4822 static char *CMPU_LT_QB(uint64 instruction, Dis_info *info) 4823 { 4824 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 4825 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 4826 4827 const char *rs = GPR(rs_value, info); 4828 const char *rt = GPR(rt_value, info); 4829 4830 return img_format("CMPU.LT.QB %s, %s", rs, rt); 4831 } 4832 4833 4834 /* 4835 * 4836 * 4837 * 3 2 1 4838 * 10987654321098765432109876543210 4839 * 001000 x1110000101 4840 * rt ----- 4841 * rs ----- 4842 * rd ----- 4843 */ 4844 static char *COP2_1(uint64 instruction, Dis_info *info) 4845 { 4846 uint64 cofun_value = extract_cofun_25_24_23(instruction); 4847 4848 4849 return img_format("COP2_1 0x%" PRIx64, cofun_value); 4850 } 4851 4852 4853 /* 4854 * 4855 * 4856 * 3 2 1 4857 * 10987654321098765432109876543210 4858 * 001000 x1110000101 4859 * rt ----- 4860 * rs ----- 4861 * rd ----- 4862 */ 4863 static char *CTC1(uint64 instruction, Dis_info *info) 4864 { 4865 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 4866 uint64 cs_value = extract_cs_20_19_18_17_16(instruction); 4867 4868 const char *rt = GPR(rt_value, info); 4869 4870 return img_format("CTC1 %s, CP%" PRIu64, rt, cs_value); 4871 } 4872 4873 4874 /* 4875 * 4876 * 4877 * 3 2 1 4878 * 10987654321098765432109876543210 4879 * 001000 x1110000101 4880 * rt ----- 4881 * rs ----- 4882 * rd ----- 4883 */ 4884 static char *CTC2(uint64 instruction, Dis_info *info) 4885 { 4886 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 4887 uint64 cs_value = extract_cs_20_19_18_17_16(instruction); 4888 4889 const char *rt = GPR(rt_value, info); 4890 4891 return img_format("CTC2 %s, CP%" PRIu64, rt, cs_value); 4892 } 4893 4894 4895 /* 4896 * 4897 * 4898 * 3 2 1 4899 * 10987654321098765432109876543210 4900 * 001000 x1110000101 4901 * rt ----- 4902 * rs ----- 4903 * rd ----- 4904 */ 4905 static char *CVT_D_L(uint64 instruction, Dis_info *info) 4906 { 4907 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4908 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4909 4910 const char *ft = FPR(ft_value, info); 4911 const char *fs = FPR(fs_value, info); 4912 4913 return img_format("CVT.D.L %s, %s", ft, fs); 4914 } 4915 4916 4917 /* 4918 * 4919 * 4920 * 3 2 1 4921 * 10987654321098765432109876543210 4922 * 001000 x1110000101 4923 * rt ----- 4924 * rs ----- 4925 * rd ----- 4926 */ 4927 static char *CVT_D_S(uint64 instruction, Dis_info *info) 4928 { 4929 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4930 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4931 4932 const char *ft = FPR(ft_value, info); 4933 const char *fs = FPR(fs_value, info); 4934 4935 return img_format("CVT.D.S %s, %s", ft, fs); 4936 } 4937 4938 4939 /* 4940 * 4941 * 4942 * 3 2 1 4943 * 10987654321098765432109876543210 4944 * 001000 x1110000101 4945 * rt ----- 4946 * rs ----- 4947 * rd ----- 4948 */ 4949 static char *CVT_D_W(uint64 instruction, Dis_info *info) 4950 { 4951 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4952 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4953 4954 const char *ft = FPR(ft_value, info); 4955 const char *fs = FPR(fs_value, info); 4956 4957 return img_format("CVT.D.W %s, %s", ft, fs); 4958 } 4959 4960 4961 /* 4962 * 4963 * 4964 * 3 2 1 4965 * 10987654321098765432109876543210 4966 * 001000 x1110000101 4967 * rt ----- 4968 * rs ----- 4969 * rd ----- 4970 */ 4971 static char *CVT_L_D(uint64 instruction, Dis_info *info) 4972 { 4973 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4974 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4975 4976 const char *ft = FPR(ft_value, info); 4977 const char *fs = FPR(fs_value, info); 4978 4979 return img_format("CVT.L.D %s, %s", ft, fs); 4980 } 4981 4982 4983 /* 4984 * 4985 * 4986 * 3 2 1 4987 * 10987654321098765432109876543210 4988 * 001000 x1110000101 4989 * rt ----- 4990 * rs ----- 4991 * rd ----- 4992 */ 4993 static char *CVT_L_S(uint64 instruction, Dis_info *info) 4994 { 4995 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 4996 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 4997 4998 const char *ft = FPR(ft_value, info); 4999 const char *fs = FPR(fs_value, info); 5000 5001 return img_format("CVT.L.S %s, %s", ft, fs); 5002 } 5003 5004 5005 /* 5006 * 5007 * 5008 * 3 2 1 5009 * 10987654321098765432109876543210 5010 * 001000 x1110000101 5011 * rt ----- 5012 * rs ----- 5013 * rd ----- 5014 */ 5015 static char *CVT_S_D(uint64 instruction, Dis_info *info) 5016 { 5017 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 5018 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 5019 5020 const char *ft = FPR(ft_value, info); 5021 const char *fs = FPR(fs_value, info); 5022 5023 return img_format("CVT.S.D %s, %s", ft, fs); 5024 } 5025 5026 5027 /* 5028 * 5029 * 5030 * 3 2 1 5031 * 10987654321098765432109876543210 5032 * 001000 x1110000101 5033 * rt ----- 5034 * rs ----- 5035 * rd ----- 5036 */ 5037 static char *CVT_S_L(uint64 instruction, Dis_info *info) 5038 { 5039 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 5040 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 5041 5042 const char *ft = FPR(ft_value, info); 5043 const char *fs = FPR(fs_value, info); 5044 5045 return img_format("CVT.S.L %s, %s", ft, fs); 5046 } 5047 5048 5049 /* 5050 * 5051 * 5052 * 3 2 1 5053 * 10987654321098765432109876543210 5054 * 001000 x1110000101 5055 * rt ----- 5056 * rs ----- 5057 * rd ----- 5058 */ 5059 static char *CVT_S_PL(uint64 instruction, Dis_info *info) 5060 { 5061 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 5062 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 5063 5064 const char *ft = FPR(ft_value, info); 5065 const char *fs = FPR(fs_value, info); 5066 5067 return img_format("CVT.S.PL %s, %s", ft, fs); 5068 } 5069 5070 5071 /* 5072 * 5073 * 5074 * 3 2 1 5075 * 10987654321098765432109876543210 5076 * 001000 x1110000101 5077 * rt ----- 5078 * rs ----- 5079 * rd ----- 5080 */ 5081 static char *CVT_S_PU(uint64 instruction, Dis_info *info) 5082 { 5083 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 5084 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 5085 5086 const char *ft = FPR(ft_value, info); 5087 const char *fs = FPR(fs_value, info); 5088 5089 return img_format("CVT.S.PU %s, %s", ft, fs); 5090 } 5091 5092 5093 /* 5094 * 5095 * 5096 * 3 2 1 5097 * 10987654321098765432109876543210 5098 * 001000 x1110000101 5099 * rt ----- 5100 * rs ----- 5101 * rd ----- 5102 */ 5103 static char *CVT_S_W(uint64 instruction, Dis_info *info) 5104 { 5105 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 5106 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 5107 5108 const char *ft = FPR(ft_value, info); 5109 const char *fs = FPR(fs_value, info); 5110 5111 return img_format("CVT.S.W %s, %s", ft, fs); 5112 } 5113 5114 5115 /* 5116 * 5117 * 5118 * 3 2 1 5119 * 10987654321098765432109876543210 5120 * 001000 x1110000101 5121 * rt ----- 5122 * rs ----- 5123 * rd ----- 5124 */ 5125 static char *CVT_W_D(uint64 instruction, Dis_info *info) 5126 { 5127 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 5128 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 5129 5130 const char *ft = FPR(ft_value, info); 5131 const char *fs = FPR(fs_value, info); 5132 5133 return img_format("CVT.W.D %s, %s", ft, fs); 5134 } 5135 5136 5137 /* 5138 * 5139 * 5140 * 3 2 1 5141 * 10987654321098765432109876543210 5142 * 001000 x1110000101 5143 * rt ----- 5144 * rs ----- 5145 * rd ----- 5146 */ 5147 static char *CVT_W_S(uint64 instruction, Dis_info *info) 5148 { 5149 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 5150 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 5151 5152 const char *ft = FPR(ft_value, info); 5153 const char *fs = FPR(fs_value, info); 5154 5155 return img_format("CVT.W.S %s, %s", ft, fs); 5156 } 5157 5158 5159 /* 5160 * 5161 * 5162 * 3 2 1 5163 * 10987654321098765432109876543210 5164 * 001000 x1110000101 5165 * rt ----- 5166 * rs ----- 5167 * rd ----- 5168 */ 5169 static char *DADDIU_48_(uint64 instruction, Dis_info *info) 5170 { 5171 uint64 rt_value = extract_rt_41_40_39_38_37(instruction); 5172 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction); 5173 5174 const char *rt = GPR(rt_value, info); 5175 5176 return img_format("DADDIU %s, %s", rt, s_value); 5177 } 5178 5179 5180 /* 5181 * 5182 * 5183 * 3 2 1 5184 * 10987654321098765432109876543210 5185 * 001000 x1110000101 5186 * rt ----- 5187 * rs ----- 5188 * rd ----- 5189 */ 5190 static char *DADDIU_NEG_(uint64 instruction, Dis_info *info) 5191 { 5192 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5193 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5194 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 5195 5196 const char *rt = GPR(rt_value, info); 5197 const char *rs = GPR(rs_value, info); 5198 int64 u = neg_copy(u_value); 5199 5200 return img_format("DADDIU %s, %s, %" PRId64, rt, rs, u); 5201 } 5202 5203 5204 /* 5205 * 5206 * 5207 * 3 2 1 5208 * 10987654321098765432109876543210 5209 * 001000 x1110000101 5210 * rt ----- 5211 * rs ----- 5212 * rd ----- 5213 */ 5214 static char *DADDIU_U12_(uint64 instruction, Dis_info *info) 5215 { 5216 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5217 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5218 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 5219 5220 const char *rt = GPR(rt_value, info); 5221 const char *rs = GPR(rs_value, info); 5222 5223 return img_format("DADDIU %s, %s, 0x%" PRIx64, rt, rs, u_value); 5224 } 5225 5226 5227 /* 5228 * 5229 * 5230 * 3 2 1 5231 * 10987654321098765432109876543210 5232 * 001000 x1110000101 5233 * rt ----- 5234 * rs ----- 5235 * rd ----- 5236 */ 5237 static char *DADD(uint64 instruction, Dis_info *info) 5238 { 5239 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5240 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5241 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 5242 5243 const char *rd = GPR(rd_value, info); 5244 const char *rs = GPR(rs_value, info); 5245 const char *rt = GPR(rt_value, info); 5246 5247 return img_format("DADD %s, %s, %s", rd, rs, rt); 5248 } 5249 5250 5251 /* 5252 * 5253 * 5254 * 3 2 1 5255 * 10987654321098765432109876543210 5256 * 001000 x1110000101 5257 * rt ----- 5258 * rs ----- 5259 * rd ----- 5260 */ 5261 static char *DADDU(uint64 instruction, Dis_info *info) 5262 { 5263 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5264 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5265 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 5266 5267 const char *rd = GPR(rd_value, info); 5268 const char *rs = GPR(rs_value, info); 5269 const char *rt = GPR(rt_value, info); 5270 5271 return img_format("DADDU %s, %s, %s", rd, rs, rt); 5272 } 5273 5274 5275 /* 5276 * 5277 * 5278 * 3 2 1 5279 * 10987654321098765432109876543210 5280 * 001000 x1110000101 5281 * rt ----- 5282 * rs ----- 5283 * rd ----- 5284 */ 5285 static char *DCLO(uint64 instruction, Dis_info *info) 5286 { 5287 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5288 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5289 5290 const char *rt = GPR(rt_value, info); 5291 const char *rs = GPR(rs_value, info); 5292 5293 return img_format("DCLO %s, %s", rt, rs); 5294 } 5295 5296 5297 /* 5298 * 5299 * 5300 * 3 2 1 5301 * 10987654321098765432109876543210 5302 * 001000 x1110000101 5303 * rt ----- 5304 * rs ----- 5305 * rd ----- 5306 */ 5307 static char *DCLZ(uint64 instruction, Dis_info *info) 5308 { 5309 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5310 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5311 5312 const char *rt = GPR(rt_value, info); 5313 const char *rs = GPR(rs_value, info); 5314 5315 return img_format("DCLZ %s, %s", rt, rs); 5316 } 5317 5318 5319 /* 5320 * 5321 * 5322 * 3 2 1 5323 * 10987654321098765432109876543210 5324 * 001000 x1110000101 5325 * rt ----- 5326 * rs ----- 5327 * rd ----- 5328 */ 5329 static char *DDIV(uint64 instruction, Dis_info *info) 5330 { 5331 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5332 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5333 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 5334 5335 const char *rd = GPR(rd_value, info); 5336 const char *rs = GPR(rs_value, info); 5337 const char *rt = GPR(rt_value, info); 5338 5339 return img_format("DDIV %s, %s, %s", rd, rs, rt); 5340 } 5341 5342 5343 /* 5344 * 5345 * 5346 * 3 2 1 5347 * 10987654321098765432109876543210 5348 * 001000 x1110000101 5349 * rt ----- 5350 * rs ----- 5351 * rd ----- 5352 */ 5353 static char *DDIVU(uint64 instruction, Dis_info *info) 5354 { 5355 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5356 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5357 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 5358 5359 const char *rd = GPR(rd_value, info); 5360 const char *rs = GPR(rs_value, info); 5361 const char *rt = GPR(rt_value, info); 5362 5363 return img_format("DDIVU %s, %s, %s", rd, rs, rt); 5364 } 5365 5366 5367 /* 5368 * 5369 * 5370 * 3 2 1 5371 * 10987654321098765432109876543210 5372 * 001000 x1110000101 5373 * rt ----- 5374 * rs ----- 5375 * rd ----- 5376 */ 5377 static char *DERET(uint64 instruction, Dis_info *info) 5378 { 5379 (void)instruction; 5380 5381 return g_strdup("DERET "); 5382 } 5383 5384 5385 /* 5386 * 5387 * 5388 * 3 2 1 5389 * 10987654321098765432109876543210 5390 * 001000 x1110000101 5391 * rt ----- 5392 * rs ----- 5393 * rd ----- 5394 */ 5395 static char *DEXTM(uint64 instruction, Dis_info *info) 5396 { 5397 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5398 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5399 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction); 5400 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction); 5401 5402 const char *rt = GPR(rt_value, info); 5403 const char *rs = GPR(rs_value, info); 5404 uint64 msbd = encode_msbd_from_size(msbd_value); 5405 5406 return img_format("DEXTM %s, %s, 0x%" PRIx64 ", 0x%" PRIx64, 5407 rt, rs, lsb_value, msbd); 5408 } 5409 5410 5411 /* 5412 * 5413 * 5414 * 3 2 1 5415 * 10987654321098765432109876543210 5416 * 001000 x1110000101 5417 * rt ----- 5418 * rs ----- 5419 * rd ----- 5420 */ 5421 static char *DEXT(uint64 instruction, Dis_info *info) 5422 { 5423 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5424 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5425 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction); 5426 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction); 5427 5428 const char *rt = GPR(rt_value, info); 5429 const char *rs = GPR(rs_value, info); 5430 uint64 msbd = encode_msbd_from_size(msbd_value); 5431 5432 return img_format("DEXT %s, %s, 0x%" PRIx64 ", 0x%" PRIx64, 5433 rt, rs, lsb_value, msbd); 5434 } 5435 5436 5437 /* 5438 * 5439 * 5440 * 3 2 1 5441 * 10987654321098765432109876543210 5442 * 001000 x1110000101 5443 * rt ----- 5444 * rs ----- 5445 * rd ----- 5446 */ 5447 static char *DEXTU(uint64 instruction, Dis_info *info) 5448 { 5449 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5450 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5451 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction); 5452 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction); 5453 5454 const char *rt = GPR(rt_value, info); 5455 const char *rs = GPR(rs_value, info); 5456 uint64 msbd = encode_msbd_from_size(msbd_value); 5457 5458 return img_format("DEXTU %s, %s, 0x%" PRIx64 ", 0x%" PRIx64, 5459 rt, rs, lsb_value, msbd); 5460 } 5461 5462 5463 /* 5464 * 5465 * 5466 * 3 2 1 5467 * 10987654321098765432109876543210 5468 * 001000 x1110000101 5469 * rt ----- 5470 * rs ----- 5471 * rd ----- 5472 */ 5473 static char *DINSM(uint64 instruction, Dis_info *info) 5474 { 5475 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5476 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5477 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction); 5478 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction); 5479 5480 const char *rt = GPR(rt_value, info); 5481 const char *rs = GPR(rs_value, info); 5482 /* !!!!!!!!!! - no conversion function */ 5483 5484 return img_format("DINSM %s, %s, 0x%" PRIx64 ", 0x%" PRIx64, 5485 rt, rs, lsb_value, msbd_value); 5486 /* hand edited */ 5487 } 5488 5489 5490 /* 5491 * 5492 * 5493 * 3 2 1 5494 * 10987654321098765432109876543210 5495 * 001000 x1110000101 5496 * rt ----- 5497 * rs ----- 5498 * rd ----- 5499 */ 5500 static char *DINS(uint64 instruction, Dis_info *info) 5501 { 5502 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5503 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5504 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction); 5505 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction); 5506 5507 const char *rt = GPR(rt_value, info); 5508 const char *rs = GPR(rs_value, info); 5509 /* !!!!!!!!!! - no conversion function */ 5510 5511 return img_format("DINS %s, %s, 0x%" PRIx64 ", 0x%" PRIx64, 5512 rt, rs, lsb_value, msbd_value); 5513 /* hand edited */ 5514 } 5515 5516 5517 /* 5518 * 5519 * 5520 * 3 2 1 5521 * 10987654321098765432109876543210 5522 * 001000 x1110000101 5523 * rt ----- 5524 * rs ----- 5525 * rd ----- 5526 */ 5527 static char *DINSU(uint64 instruction, Dis_info *info) 5528 { 5529 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5530 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5531 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction); 5532 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction); 5533 5534 const char *rt = GPR(rt_value, info); 5535 const char *rs = GPR(rs_value, info); 5536 /* !!!!!!!!!! - no conversion function */ 5537 5538 return img_format("DINSU %s, %s, 0x%" PRIx64 ", 0x%" PRIx64, 5539 rt, rs, lsb_value, msbd_value); 5540 /* hand edited */ 5541 } 5542 5543 5544 /* 5545 * 5546 * 5547 * 3 2 1 5548 * 10987654321098765432109876543210 5549 * 001000 x1110000101 5550 * rt ----- 5551 * rs ----- 5552 * rd ----- 5553 */ 5554 static char *DI(uint64 instruction, Dis_info *info) 5555 { 5556 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5557 5558 const char *rt = GPR(rt_value, info); 5559 5560 return img_format("DI %s", rt); 5561 } 5562 5563 5564 /* 5565 * 5566 * 5567 * 3 2 1 5568 * 10987654321098765432109876543210 5569 * 001000 x1110000101 5570 * rt ----- 5571 * rs ----- 5572 * rd ----- 5573 */ 5574 static char *DIV(uint64 instruction, Dis_info *info) 5575 { 5576 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5577 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5578 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 5579 5580 const char *rd = GPR(rd_value, info); 5581 const char *rs = GPR(rs_value, info); 5582 const char *rt = GPR(rt_value, info); 5583 5584 return img_format("DIV %s, %s, %s", rd, rs, rt); 5585 } 5586 5587 5588 /* 5589 * 5590 * 5591 * 3 2 1 5592 * 10987654321098765432109876543210 5593 * 001000 x1110000101 5594 * rt ----- 5595 * rs ----- 5596 * rd ----- 5597 */ 5598 static char *DIV_D(uint64 instruction, Dis_info *info) 5599 { 5600 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 5601 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 5602 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 5603 5604 const char *fd = FPR(fd_value, info); 5605 const char *fs = FPR(fs_value, info); 5606 const char *ft = FPR(ft_value, info); 5607 5608 return img_format("DIV.D %s, %s, %s", fd, fs, ft); 5609 } 5610 5611 5612 /* 5613 * 5614 * 5615 * 3 2 1 5616 * 10987654321098765432109876543210 5617 * 001000 x1110000101 5618 * rt ----- 5619 * rs ----- 5620 * rd ----- 5621 */ 5622 static char *DIV_S(uint64 instruction, Dis_info *info) 5623 { 5624 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 5625 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 5626 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 5627 5628 const char *fd = FPR(fd_value, info); 5629 const char *fs = FPR(fs_value, info); 5630 const char *ft = FPR(ft_value, info); 5631 5632 return img_format("DIV.S %s, %s, %s", fd, fs, ft); 5633 } 5634 5635 5636 /* 5637 * 5638 * 5639 * 3 2 1 5640 * 10987654321098765432109876543210 5641 * 001000 x1110000101 5642 * rt ----- 5643 * rs ----- 5644 * rd ----- 5645 */ 5646 static char *DIVU(uint64 instruction, Dis_info *info) 5647 { 5648 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5649 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5650 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 5651 5652 const char *rd = GPR(rd_value, info); 5653 const char *rs = GPR(rs_value, info); 5654 const char *rt = GPR(rt_value, info); 5655 5656 return img_format("DIVU %s, %s, %s", rd, rs, rt); 5657 } 5658 5659 5660 /* 5661 * 5662 * 5663 * 3 2 1 5664 * 10987654321098765432109876543210 5665 * 001000 x1110000101 5666 * rt ----- 5667 * rs ----- 5668 * rd ----- 5669 */ 5670 static char *DLSA(uint64 instruction, Dis_info *info) 5671 { 5672 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5673 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5674 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 5675 uint64 u2_value = extract_u2_10_9(instruction); 5676 5677 const char *rd = GPR(rd_value, info); 5678 const char *rs = GPR(rs_value, info); 5679 const char *rt = GPR(rt_value, info); 5680 5681 return img_format("DLSA %s, %s, %s, 0x%" PRIx64, rd, rs, rt, u2_value); 5682 } 5683 5684 5685 /* 5686 * 5687 * 5688 * 3 2 1 5689 * 10987654321098765432109876543210 5690 * 001000 x1110000101 5691 * rt ----- 5692 * rs ----- 5693 * rd ----- 5694 */ 5695 static char *DLUI_48_(uint64 instruction, Dis_info *info) 5696 { 5697 uint64 rt_value = extract_rt_41_40_39_38_37(instruction); 5698 uint64 u_value = extract_u_31_to_0__s32(instruction); 5699 5700 const char *rt = GPR(rt_value, info); 5701 5702 return img_format("DLUI %s, 0x%" PRIx64, rt, u_value); 5703 } 5704 5705 5706 /* 5707 * 5708 * 5709 * 3 2 1 5710 * 10987654321098765432109876543210 5711 * 001000 x1110000101 5712 * rt ----- 5713 * rs ----- 5714 * rd ----- 5715 */ 5716 static char *DMFC0(uint64 instruction, Dis_info *info) 5717 { 5718 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5719 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 5720 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 5721 5722 const char *rt = GPR(rt_value, info); 5723 5724 return img_format("DMFC0 %s, CP%" PRIu64 ", 0x%" PRIx64, 5725 rt, c0s_value, sel_value); 5726 } 5727 5728 5729 /* 5730 * 5731 * 5732 * 3 2 1 5733 * 10987654321098765432109876543210 5734 * 001000 x1110000101 5735 * rt ----- 5736 * rs ----- 5737 * rd ----- 5738 */ 5739 static char *DMFC1(uint64 instruction, Dis_info *info) 5740 { 5741 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5742 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 5743 5744 const char *rt = GPR(rt_value, info); 5745 const char *fs = FPR(fs_value, info); 5746 5747 return img_format("DMFC1 %s, %s", rt, fs); 5748 } 5749 5750 5751 /* 5752 * 5753 * 5754 * 3 2 1 5755 * 10987654321098765432109876543210 5756 * 001000 x1110000101 5757 * rt ----- 5758 * rs ----- 5759 * rd ----- 5760 */ 5761 static char *DMFC2(uint64 instruction, Dis_info *info) 5762 { 5763 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5764 uint64 cs_value = extract_cs_20_19_18_17_16(instruction); 5765 5766 const char *rt = GPR(rt_value, info); 5767 5768 return img_format("DMFC2 %s, CP%" PRIu64, rt, cs_value); 5769 } 5770 5771 5772 /* 5773 * 5774 * 5775 * 3 2 1 5776 * 10987654321098765432109876543210 5777 * 001000 x1110000101 5778 * rt ----- 5779 * rs ----- 5780 * rd ----- 5781 */ 5782 static char *DMFGC0(uint64 instruction, Dis_info *info) 5783 { 5784 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5785 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 5786 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 5787 5788 const char *rt = GPR(rt_value, info); 5789 5790 return img_format("DMFGC0 %s, CP%" PRIu64 ", 0x%" PRIx64, 5791 rt, c0s_value, sel_value); 5792 } 5793 5794 5795 /* 5796 * 5797 * 5798 * 3 2 1 5799 * 10987654321098765432109876543210 5800 * 001000 x1110000101 5801 * rt ----- 5802 * rs ----- 5803 * rd ----- 5804 */ 5805 static char *DMOD(uint64 instruction, Dis_info *info) 5806 { 5807 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5808 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5809 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 5810 5811 const char *rd = GPR(rd_value, info); 5812 const char *rs = GPR(rs_value, info); 5813 const char *rt = GPR(rt_value, info); 5814 5815 return img_format("DMOD %s, %s, %s", rd, rs, rt); 5816 } 5817 5818 5819 /* 5820 * 5821 * 5822 * 3 2 1 5823 * 10987654321098765432109876543210 5824 * 001000 x1110000101 5825 * rt ----- 5826 * rs ----- 5827 * rd ----- 5828 */ 5829 static char *DMODU(uint64 instruction, Dis_info *info) 5830 { 5831 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5832 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5833 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 5834 5835 const char *rd = GPR(rd_value, info); 5836 const char *rs = GPR(rs_value, info); 5837 const char *rt = GPR(rt_value, info); 5838 5839 return img_format("DMODU %s, %s, %s", rd, rs, rt); 5840 } 5841 5842 5843 /* 5844 * 5845 * 5846 * 3 2 1 5847 * 10987654321098765432109876543210 5848 * 001000 x1110000101 5849 * rt ----- 5850 * rs ----- 5851 * rd ----- 5852 */ 5853 static char *DMTC0(uint64 instruction, Dis_info *info) 5854 { 5855 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5856 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 5857 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 5858 5859 const char *rt = GPR(rt_value, info); 5860 5861 return img_format("DMTC0 %s, CP%" PRIu64 ", 0x%" PRIx64, 5862 rt, c0s_value, sel_value); 5863 } 5864 5865 5866 /* 5867 * 5868 * 5869 * 3 2 1 5870 * 10987654321098765432109876543210 5871 * 001000 x1110000101 5872 * rt ----- 5873 * rs ----- 5874 * rd ----- 5875 */ 5876 static char *DMTC1(uint64 instruction, Dis_info *info) 5877 { 5878 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5879 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 5880 5881 const char *rt = GPR(rt_value, info); 5882 const char *fs = FPR(fs_value, info); 5883 5884 return img_format("DMTC1 %s, %s", rt, fs); 5885 } 5886 5887 5888 /* 5889 * 5890 * 5891 * 3 2 1 5892 * 10987654321098765432109876543210 5893 * 001000 x1110000101 5894 * rt ----- 5895 * rs ----- 5896 * rd ----- 5897 */ 5898 static char *DMTC2(uint64 instruction, Dis_info *info) 5899 { 5900 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5901 uint64 cs_value = extract_cs_20_19_18_17_16(instruction); 5902 5903 const char *rt = GPR(rt_value, info); 5904 5905 return img_format("DMTC2 %s, CP%" PRIu64, rt, cs_value); 5906 } 5907 5908 5909 /* 5910 * 5911 * 5912 * 3 2 1 5913 * 10987654321098765432109876543210 5914 * 001000 x1110000101 5915 * rt ----- 5916 * rs ----- 5917 * rd ----- 5918 */ 5919 static char *DMTGC0(uint64 instruction, Dis_info *info) 5920 { 5921 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5922 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 5923 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 5924 5925 const char *rt = GPR(rt_value, info); 5926 5927 return img_format("DMTGC0 %s, CP%" PRIu64 ", 0x%" PRIx64, 5928 rt, c0s_value, sel_value); 5929 } 5930 5931 5932 /* 5933 * 5934 * 5935 * 3 2 1 5936 * 10987654321098765432109876543210 5937 * 001000 x1110000101 5938 * rt ----- 5939 * rs ----- 5940 * rd ----- 5941 */ 5942 static char *DMT(uint64 instruction, Dis_info *info) 5943 { 5944 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5945 5946 const char *rt = GPR(rt_value, info); 5947 5948 return img_format("DMT %s", rt); 5949 } 5950 5951 5952 /* 5953 * 5954 * 5955 * 3 2 1 5956 * 10987654321098765432109876543210 5957 * 001000 x1110000101 5958 * rt ----- 5959 * rs ----- 5960 * rd ----- 5961 */ 5962 static char *DMUH(uint64 instruction, Dis_info *info) 5963 { 5964 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5965 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5966 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 5967 5968 const char *rd = GPR(rd_value, info); 5969 const char *rs = GPR(rs_value, info); 5970 const char *rt = GPR(rt_value, info); 5971 5972 return img_format("DMUH %s, %s, %s", rd, rs, rt); 5973 } 5974 5975 5976 /* 5977 * 5978 * 5979 * 3 2 1 5980 * 10987654321098765432109876543210 5981 * 001000 x1110000101 5982 * rt ----- 5983 * rs ----- 5984 * rd ----- 5985 */ 5986 static char *DMUHU(uint64 instruction, Dis_info *info) 5987 { 5988 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 5989 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 5990 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 5991 5992 const char *rd = GPR(rd_value, info); 5993 const char *rs = GPR(rs_value, info); 5994 const char *rt = GPR(rt_value, info); 5995 5996 return img_format("DMUHU %s, %s, %s", rd, rs, rt); 5997 } 5998 5999 6000 /* 6001 * 6002 * 6003 * 3 2 1 6004 * 10987654321098765432109876543210 6005 * 001000 x1110000101 6006 * rt ----- 6007 * rs ----- 6008 * rd ----- 6009 */ 6010 static char *DMUL(uint64 instruction, Dis_info *info) 6011 { 6012 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6013 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6014 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 6015 6016 const char *rd = GPR(rd_value, info); 6017 const char *rs = GPR(rs_value, info); 6018 const char *rt = GPR(rt_value, info); 6019 6020 return img_format("DMUL %s, %s, %s", rd, rs, rt); 6021 } 6022 6023 6024 /* 6025 * 6026 * 6027 * 3 2 1 6028 * 10987654321098765432109876543210 6029 * 001000 x1110000101 6030 * rt ----- 6031 * rs ----- 6032 * rd ----- 6033 */ 6034 static char *DMULU(uint64 instruction, Dis_info *info) 6035 { 6036 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6037 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6038 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 6039 6040 const char *rd = GPR(rd_value, info); 6041 const char *rs = GPR(rs_value, info); 6042 const char *rt = GPR(rt_value, info); 6043 6044 return img_format("DMULU %s, %s, %s", rd, rs, rt); 6045 } 6046 6047 6048 /* 6049 * [DSP] DPA.W.PH ac, rs, rt - Dot product with accumulate on 6050 * vector integer halfword elements 6051 * 6052 * 3 2 1 6053 * 10987654321098765432109876543210 6054 * 001000 00000010111111 6055 * rt ----- 6056 * rs ----- 6057 * ac -- 6058 */ 6059 static char *DPA_W_PH(uint64 instruction, Dis_info *info) 6060 { 6061 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6062 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6063 uint64 ac_value = extract_ac_15_14(instruction); 6064 6065 const char *ac = AC(ac_value, info); 6066 const char *rs = GPR(rs_value, info); 6067 const char *rt = GPR(rt_value, info); 6068 6069 return img_format("DPA.W.PH %s, %s, %s", ac, rs, rt); 6070 } 6071 6072 6073 /* 6074 * 6075 * 6076 * 3 2 1 6077 * 10987654321098765432109876543210 6078 * 001000 x1110000101 6079 * rt ----- 6080 * rs ----- 6081 * rd ----- 6082 */ 6083 static char *DPAQ_SA_L_W(uint64 instruction, Dis_info *info) 6084 { 6085 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6086 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6087 uint64 ac_value = extract_ac_15_14(instruction); 6088 6089 const char *ac = AC(ac_value, info); 6090 const char *rs = GPR(rs_value, info); 6091 const char *rt = GPR(rt_value, info); 6092 6093 return img_format("DPAQ_SA.L.W %s, %s, %s", ac, rs, rt); 6094 } 6095 6096 6097 /* 6098 * 6099 * 6100 * 3 2 1 6101 * 10987654321098765432109876543210 6102 * 001000 x1110000101 6103 * rt ----- 6104 * rs ----- 6105 * rd ----- 6106 */ 6107 static char *DPAQ_S_W_PH(uint64 instruction, Dis_info *info) 6108 { 6109 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6110 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6111 uint64 ac_value = extract_ac_15_14(instruction); 6112 6113 const char *ac = AC(ac_value, info); 6114 const char *rs = GPR(rs_value, info); 6115 const char *rt = GPR(rt_value, info); 6116 6117 return img_format("DPAQ_S.W.PH %s, %s, %s", ac, rs, rt); 6118 } 6119 6120 6121 /* 6122 * 6123 * 6124 * 3 2 1 6125 * 10987654321098765432109876543210 6126 * 001000 x1110000101 6127 * rt ----- 6128 * rs ----- 6129 * rd ----- 6130 */ 6131 static char *DPAQX_SA_W_PH(uint64 instruction, Dis_info *info) 6132 { 6133 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6134 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6135 uint64 ac_value = extract_ac_15_14(instruction); 6136 6137 const char *ac = AC(ac_value, info); 6138 const char *rs = GPR(rs_value, info); 6139 const char *rt = GPR(rt_value, info); 6140 6141 return img_format("DPAQX_SA.W.PH %s, %s, %s", ac, rs, rt); 6142 } 6143 6144 6145 /* 6146 * 6147 * 6148 * 3 2 1 6149 * 10987654321098765432109876543210 6150 * 001000 x1110000101 6151 * rt ----- 6152 * rs ----- 6153 * rd ----- 6154 */ 6155 static char *DPAQX_S_W_PH(uint64 instruction, Dis_info *info) 6156 { 6157 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6158 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6159 uint64 ac_value = extract_ac_15_14(instruction); 6160 6161 const char *ac = AC(ac_value, info); 6162 const char *rs = GPR(rs_value, info); 6163 const char *rt = GPR(rt_value, info); 6164 6165 return img_format("DPAQX_S.W.PH %s, %s, %s", ac, rs, rt); 6166 } 6167 6168 6169 /* 6170 * 6171 * 6172 * 3 2 1 6173 * 10987654321098765432109876543210 6174 * 001000 x1110000101 6175 * rt ----- 6176 * rs ----- 6177 * rd ----- 6178 */ 6179 static char *DPAU_H_QBL(uint64 instruction, Dis_info *info) 6180 { 6181 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6182 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6183 uint64 ac_value = extract_ac_15_14(instruction); 6184 6185 const char *ac = AC(ac_value, info); 6186 const char *rs = GPR(rs_value, info); 6187 const char *rt = GPR(rt_value, info); 6188 6189 return img_format("DPAU.H.QBL %s, %s, %s", ac, rs, rt); 6190 } 6191 6192 6193 /* 6194 * 6195 * 6196 * 3 2 1 6197 * 10987654321098765432109876543210 6198 * 001000 x1110000101 6199 * rt ----- 6200 * rs ----- 6201 * rd ----- 6202 */ 6203 static char *DPAU_H_QBR(uint64 instruction, Dis_info *info) 6204 { 6205 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6206 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6207 uint64 ac_value = extract_ac_15_14(instruction); 6208 6209 const char *ac = AC(ac_value, info); 6210 const char *rs = GPR(rs_value, info); 6211 const char *rt = GPR(rt_value, info); 6212 6213 return img_format("DPAU.H.QBR %s, %s, %s", ac, rs, rt); 6214 } 6215 6216 6217 /* 6218 * 6219 * 6220 * 3 2 1 6221 * 10987654321098765432109876543210 6222 * 001000 x1110000101 6223 * rt ----- 6224 * rs ----- 6225 * rd ----- 6226 */ 6227 static char *DPAX_W_PH(uint64 instruction, Dis_info *info) 6228 { 6229 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6230 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6231 uint64 ac_value = extract_ac_15_14(instruction); 6232 6233 const char *ac = AC(ac_value, info); 6234 const char *rs = GPR(rs_value, info); 6235 const char *rt = GPR(rt_value, info); 6236 6237 return img_format("DPAX.W.PH %s, %s, %s", ac, rs, rt); 6238 } 6239 6240 6241 /* 6242 * 6243 * 6244 * 3 2 1 6245 * 10987654321098765432109876543210 6246 * 001000 x1110000101 6247 * rt ----- 6248 * rs ----- 6249 * rd ----- 6250 */ 6251 static char *DPS_W_PH(uint64 instruction, Dis_info *info) 6252 { 6253 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6254 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6255 uint64 ac_value = extract_ac_15_14(instruction); 6256 6257 const char *ac = AC(ac_value, info); 6258 const char *rs = GPR(rs_value, info); 6259 const char *rt = GPR(rt_value, info); 6260 6261 return img_format("DPS.W.PH %s, %s, %s", ac, rs, rt); 6262 } 6263 6264 6265 /* 6266 * 6267 * 6268 * 3 2 1 6269 * 10987654321098765432109876543210 6270 * 001000 x1110000101 6271 * rt ----- 6272 * rs ----- 6273 * rd ----- 6274 */ 6275 static char *DPSQ_SA_L_W(uint64 instruction, Dis_info *info) 6276 { 6277 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6278 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6279 uint64 ac_value = extract_ac_15_14(instruction); 6280 6281 const char *ac = AC(ac_value, info); 6282 const char *rs = GPR(rs_value, info); 6283 const char *rt = GPR(rt_value, info); 6284 6285 return img_format("DPSQ_SA.L.W %s, %s, %s", ac, rs, rt); 6286 } 6287 6288 6289 /* 6290 * 6291 * 6292 * 3 2 1 6293 * 10987654321098765432109876543210 6294 * 001000 x1110000101 6295 * rt ----- 6296 * rs ----- 6297 * rd ----- 6298 */ 6299 static char *DPSQ_S_W_PH(uint64 instruction, Dis_info *info) 6300 { 6301 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6302 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6303 uint64 ac_value = extract_ac_15_14(instruction); 6304 6305 const char *ac = AC(ac_value, info); 6306 const char *rs = GPR(rs_value, info); 6307 const char *rt = GPR(rt_value, info); 6308 6309 return img_format("DPSQ_S.W.PH %s, %s, %s", ac, rs, rt); 6310 } 6311 6312 6313 /* 6314 * 6315 * 6316 * 3 2 1 6317 * 10987654321098765432109876543210 6318 * 001000 x1110000101 6319 * rt ----- 6320 * rs ----- 6321 * rd ----- 6322 */ 6323 static char *DPSQX_SA_W_PH(uint64 instruction, Dis_info *info) 6324 { 6325 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6326 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6327 uint64 ac_value = extract_ac_15_14(instruction); 6328 6329 const char *ac = AC(ac_value, info); 6330 const char *rs = GPR(rs_value, info); 6331 const char *rt = GPR(rt_value, info); 6332 6333 return img_format("DPSQX_SA.W.PH %s, %s, %s", ac, rs, rt); 6334 } 6335 6336 6337 /* 6338 * 6339 * 6340 * 3 2 1 6341 * 10987654321098765432109876543210 6342 * 001000 x1110000101 6343 * rt ----- 6344 * rs ----- 6345 * rd ----- 6346 */ 6347 static char *DPSQX_S_W_PH(uint64 instruction, Dis_info *info) 6348 { 6349 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6350 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6351 uint64 ac_value = extract_ac_15_14(instruction); 6352 6353 const char *ac = AC(ac_value, info); 6354 const char *rs = GPR(rs_value, info); 6355 const char *rt = GPR(rt_value, info); 6356 6357 return img_format("DPSQX_S.W.PH %s, %s, %s", ac, rs, rt); 6358 } 6359 6360 6361 /* 6362 * 6363 * 6364 * 3 2 1 6365 * 10987654321098765432109876543210 6366 * 001000 x1110000101 6367 * rt ----- 6368 * rs ----- 6369 * rd ----- 6370 */ 6371 static char *DPSU_H_QBL(uint64 instruction, Dis_info *info) 6372 { 6373 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6374 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6375 uint64 ac_value = extract_ac_15_14(instruction); 6376 6377 const char *ac = AC(ac_value, info); 6378 const char *rs = GPR(rs_value, info); 6379 const char *rt = GPR(rt_value, info); 6380 6381 return img_format("DPSU.H.QBL %s, %s, %s", ac, rs, rt); 6382 } 6383 6384 6385 /* 6386 * 6387 * 6388 * 3 2 1 6389 * 10987654321098765432109876543210 6390 * 001000 x1110000101 6391 * rt ----- 6392 * rs ----- 6393 * rd ----- 6394 */ 6395 static char *DPSU_H_QBR(uint64 instruction, Dis_info *info) 6396 { 6397 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6398 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6399 uint64 ac_value = extract_ac_15_14(instruction); 6400 6401 const char *ac = AC(ac_value, info); 6402 const char *rs = GPR(rs_value, info); 6403 const char *rt = GPR(rt_value, info); 6404 6405 return img_format("DPSU.H.QBR %s, %s, %s", ac, rs, rt); 6406 } 6407 6408 6409 /* 6410 * 6411 * 6412 * 3 2 1 6413 * 10987654321098765432109876543210 6414 * 001000 x1110000101 6415 * rt ----- 6416 * rs ----- 6417 * rd ----- 6418 */ 6419 static char *DPSX_W_PH(uint64 instruction, Dis_info *info) 6420 { 6421 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6422 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6423 uint64 ac_value = extract_ac_15_14(instruction); 6424 6425 const char *ac = AC(ac_value, info); 6426 const char *rs = GPR(rs_value, info); 6427 const char *rt = GPR(rt_value, info); 6428 6429 return img_format("DPSX.W.PH %s, %s, %s", ac, rs, rt); 6430 } 6431 6432 6433 /* 6434 * DROTR - 6435 * 6436 * 3 2 1 6437 * 10987654321098765432109876543210 6438 * 001000 x1110000101 6439 * rt ----- 6440 * rs ----- 6441 * rd ----- 6442 */ 6443 static char *DROTR(uint64 instruction, Dis_info *info) 6444 { 6445 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6446 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6447 uint64 shift_value = extract_shift_4_3_2_1_0(instruction); 6448 6449 const char *rt = GPR(rt_value, info); 6450 const char *rs = GPR(rs_value, info); 6451 6452 return img_format("DROTR %s, %s, 0x%" PRIx64, rt, rs, shift_value); 6453 } 6454 6455 6456 /* 6457 * DROTR[32] - 6458 * 6459 * 3 2 1 6460 * 10987654321098765432109876543210 6461 * 10o000 1100xxx0110 6462 * rt ----- 6463 * rs ----- 6464 * shift ----- 6465 */ 6466 static char *DROTR32(uint64 instruction, Dis_info *info) 6467 { 6468 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6469 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6470 uint64 shift_value = extract_shift_4_3_2_1_0(instruction); 6471 6472 const char *rt = GPR(rt_value, info); 6473 const char *rs = GPR(rs_value, info); 6474 6475 return img_format("DROTR32 %s, %s, 0x%" PRIx64, rt, rs, shift_value); 6476 } 6477 6478 6479 /* 6480 * 6481 * 6482 * 3 2 1 6483 * 10987654321098765432109876543210 6484 * 001000 x1110000101 6485 * rt ----- 6486 * rs ----- 6487 * rd ----- 6488 */ 6489 static char *DROTRV(uint64 instruction, Dis_info *info) 6490 { 6491 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6492 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6493 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 6494 6495 const char *rd = GPR(rd_value, info); 6496 const char *rs = GPR(rs_value, info); 6497 const char *rt = GPR(rt_value, info); 6498 6499 return img_format("DROTRV %s, %s, %s", rd, rs, rt); 6500 } 6501 6502 6503 /* 6504 * 6505 * 6506 * 3 2 1 6507 * 10987654321098765432109876543210 6508 * 001000 x1110000101 6509 * rt ----- 6510 * rs ----- 6511 * rd ----- 6512 */ 6513 static char *DROTX(uint64 instruction, Dis_info *info) 6514 { 6515 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6516 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6517 uint64 shiftx_value = extract_shiftx_11_10_9_8_7_6(instruction); 6518 uint64 shift_value = extract_shift_5_4_3_2_1_0(instruction); 6519 6520 const char *rt = GPR(rt_value, info); 6521 const char *rs = GPR(rs_value, info); 6522 6523 return img_format("DROTX %s, %s, 0x%" PRIx64 ", 0x%" PRIx64, 6524 rt, rs, shift_value, shiftx_value); 6525 } 6526 6527 6528 /* 6529 * DSLL - 6530 * 6531 * 3 2 1 6532 * 10987654321098765432109876543210 6533 * 10o000 1100xxx0000 6534 * rt ----- 6535 * rs ----- 6536 * shift ----- 6537 */ 6538 static char *DSLL(uint64 instruction, Dis_info *info) 6539 { 6540 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6541 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6542 uint64 shift_value = extract_shift_4_3_2_1_0(instruction); 6543 6544 const char *rt = GPR(rt_value, info); 6545 const char *rs = GPR(rs_value, info); 6546 6547 return img_format("DSLL %s, %s, 0x%" PRIx64, rt, rs, shift_value); 6548 } 6549 6550 6551 /* 6552 * DSLL[32] - 6553 * 6554 * 3 2 1 6555 * 10987654321098765432109876543210 6556 * 10o000 1100xxx0000 6557 * rt ----- 6558 * rs ----- 6559 * shift ----- 6560 */ 6561 static char *DSLL32(uint64 instruction, Dis_info *info) 6562 { 6563 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6564 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6565 uint64 shift_value = extract_shift_4_3_2_1_0(instruction); 6566 6567 const char *rt = GPR(rt_value, info); 6568 const char *rs = GPR(rs_value, info); 6569 6570 return img_format("DSLL32 %s, %s, 0x%" PRIx64, rt, rs, shift_value); 6571 } 6572 6573 6574 /* 6575 * 6576 * 6577 * 3 2 1 6578 * 10987654321098765432109876543210 6579 * 001000 x1110000101 6580 * rt ----- 6581 * rs ----- 6582 * rd ----- 6583 */ 6584 static char *DSLLV(uint64 instruction, Dis_info *info) 6585 { 6586 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6587 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6588 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 6589 6590 const char *rd = GPR(rd_value, info); 6591 const char *rs = GPR(rs_value, info); 6592 const char *rt = GPR(rt_value, info); 6593 6594 return img_format("DSLLV %s, %s, %s", rd, rs, rt); 6595 } 6596 6597 6598 /* 6599 * DSRA - 6600 * 6601 * 3 2 1 6602 * 10987654321098765432109876543210 6603 * 10o000 1100xxx0100 6604 * rt ----- 6605 * rs ----- 6606 * shift ----- 6607 */ 6608 static char *DSRA(uint64 instruction, Dis_info *info) 6609 { 6610 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6611 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6612 uint64 shift_value = extract_shift_4_3_2_1_0(instruction); 6613 6614 const char *rt = GPR(rt_value, info); 6615 const char *rs = GPR(rs_value, info); 6616 6617 return img_format("DSRA %s, %s, 0x%" PRIx64, rt, rs, shift_value); 6618 } 6619 6620 6621 /* 6622 * DSRA[32] - 6623 * 6624 * 3 2 1 6625 * 10987654321098765432109876543210 6626 * 10o000 1100xxx0100 6627 * rt ----- 6628 * rs ----- 6629 * shift ----- 6630 */ 6631 static char *DSRA32(uint64 instruction, Dis_info *info) 6632 { 6633 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6634 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6635 uint64 shift_value = extract_shift_4_3_2_1_0(instruction); 6636 6637 const char *rt = GPR(rt_value, info); 6638 const char *rs = GPR(rs_value, info); 6639 6640 return img_format("DSRA32 %s, %s, 0x%" PRIx64, rt, rs, shift_value); 6641 } 6642 6643 6644 /* 6645 * 6646 * 6647 * 3 2 1 6648 * 10987654321098765432109876543210 6649 * 001000 x1110000101 6650 * rt ----- 6651 * rs ----- 6652 * rd ----- 6653 */ 6654 static char *DSRAV(uint64 instruction, Dis_info *info) 6655 { 6656 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6657 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6658 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 6659 6660 const char *rd = GPR(rd_value, info); 6661 const char *rs = GPR(rs_value, info); 6662 const char *rt = GPR(rt_value, info); 6663 6664 return img_format("DSRAV %s, %s, %s", rd, rs, rt); 6665 } 6666 6667 6668 /* 6669 * DSRL - 6670 * 6671 * 3 2 1 6672 * 10987654321098765432109876543210 6673 * 10o000 1100xxx0100 6674 * rt ----- 6675 * rs ----- 6676 * shift ----- 6677 */ 6678 static char *DSRL(uint64 instruction, Dis_info *info) 6679 { 6680 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6681 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6682 uint64 shift_value = extract_shift_4_3_2_1_0(instruction); 6683 6684 const char *rt = GPR(rt_value, info); 6685 const char *rs = GPR(rs_value, info); 6686 6687 return img_format("DSRL %s, %s, 0x%" PRIx64, rt, rs, shift_value); 6688 } 6689 6690 6691 /* 6692 * DSRL[32] - 6693 * 6694 * 3 2 1 6695 * 10987654321098765432109876543210 6696 * 10o000 1100xxx0010 6697 * rt ----- 6698 * rs ----- 6699 * shift ----- 6700 */ 6701 static char *DSRL32(uint64 instruction, Dis_info *info) 6702 { 6703 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6704 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6705 uint64 shift_value = extract_shift_4_3_2_1_0(instruction); 6706 6707 const char *rt = GPR(rt_value, info); 6708 const char *rs = GPR(rs_value, info); 6709 6710 return img_format("DSRL32 %s, %s, 0x%" PRIx64, rt, rs, shift_value); 6711 } 6712 6713 6714 /* 6715 * 6716 * 6717 * 3 2 1 6718 * 10987654321098765432109876543210 6719 * 001000 x1110000101 6720 * rt ----- 6721 * rs ----- 6722 * rd ----- 6723 */ 6724 static char *DSRLV(uint64 instruction, Dis_info *info) 6725 { 6726 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6727 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6728 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 6729 6730 const char *rd = GPR(rd_value, info); 6731 const char *rs = GPR(rs_value, info); 6732 const char *rt = GPR(rt_value, info); 6733 6734 return img_format("DSRLV %s, %s, %s", rd, rs, rt); 6735 } 6736 6737 6738 /* 6739 * 6740 * 6741 * 3 2 1 6742 * 10987654321098765432109876543210 6743 * 001000 x1110000101 6744 * rt ----- 6745 * rs ----- 6746 * rd ----- 6747 */ 6748 static char *DSUB(uint64 instruction, Dis_info *info) 6749 { 6750 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6751 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6752 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 6753 6754 const char *rd = GPR(rd_value, info); 6755 const char *rs = GPR(rs_value, info); 6756 const char *rt = GPR(rt_value, info); 6757 6758 return img_format("DSUB %s, %s, %s", rd, rs, rt); 6759 } 6760 6761 6762 /* 6763 * 6764 * 6765 * 3 2 1 6766 * 10987654321098765432109876543210 6767 * 001000 x1110000101 6768 * rt ----- 6769 * rs ----- 6770 * rd ----- 6771 */ 6772 static char *DSUBU(uint64 instruction, Dis_info *info) 6773 { 6774 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6775 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6776 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 6777 6778 const char *rd = GPR(rd_value, info); 6779 const char *rs = GPR(rs_value, info); 6780 const char *rt = GPR(rt_value, info); 6781 6782 return img_format("DSUBU %s, %s, %s", rd, rs, rt); 6783 } 6784 6785 6786 /* 6787 * 6788 * 6789 * 3 2 1 6790 * 10987654321098765432109876543210 6791 * 001000 x1110000101 6792 * rt ----- 6793 * rs ----- 6794 * rd ----- 6795 */ 6796 static char *DVPE(uint64 instruction, Dis_info *info) 6797 { 6798 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6799 6800 const char *rt = GPR(rt_value, info); 6801 6802 return img_format("DVPE %s", rt); 6803 } 6804 6805 6806 /* 6807 * 6808 * 6809 * 3 2 1 6810 * 10987654321098765432109876543210 6811 * 001000 x1110000101 6812 * rt ----- 6813 * rs ----- 6814 * rd ----- 6815 */ 6816 static char *DVP(uint64 instruction, Dis_info *info) 6817 { 6818 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6819 6820 const char *rt = GPR(rt_value, info); 6821 6822 return img_format("DVP %s", rt); 6823 } 6824 6825 6826 /* 6827 * 6828 * 6829 * 3 2 1 6830 * 10987654321098765432109876543210 6831 * 001000 x1110000101 6832 * rt ----- 6833 * rs ----- 6834 * rd ----- 6835 */ 6836 static char *EHB(uint64 instruction, Dis_info *info) 6837 { 6838 (void)instruction; 6839 6840 return g_strdup("EHB "); 6841 } 6842 6843 6844 /* 6845 * 6846 * 6847 * 3 2 1 6848 * 10987654321098765432109876543210 6849 * 001000 x1110000101 6850 * rt ----- 6851 * rs ----- 6852 * rd ----- 6853 */ 6854 static char *EI(uint64 instruction, Dis_info *info) 6855 { 6856 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6857 6858 const char *rt = GPR(rt_value, info); 6859 6860 return img_format("EI %s", rt); 6861 } 6862 6863 6864 /* 6865 * 6866 * 6867 * 3 2 1 6868 * 10987654321098765432109876543210 6869 * 001000 x1110000101 6870 * rt ----- 6871 * rs ----- 6872 * rd ----- 6873 */ 6874 static char *EMT(uint64 instruction, Dis_info *info) 6875 { 6876 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6877 6878 const char *rt = GPR(rt_value, info); 6879 6880 return img_format("EMT %s", rt); 6881 } 6882 6883 6884 /* 6885 * 6886 * 6887 * 3 2 1 6888 * 10987654321098765432109876543210 6889 * 001000 x1110000101 6890 * rt ----- 6891 * rs ----- 6892 * rd ----- 6893 */ 6894 static char *ERET(uint64 instruction, Dis_info *info) 6895 { 6896 (void)instruction; 6897 6898 return g_strdup("ERET "); 6899 } 6900 6901 6902 /* 6903 * 6904 * 6905 * 3 2 1 6906 * 10987654321098765432109876543210 6907 * 001000 x1110000101 6908 * rt ----- 6909 * rs ----- 6910 * rd ----- 6911 */ 6912 static char *ERETNC(uint64 instruction, Dis_info *info) 6913 { 6914 (void)instruction; 6915 6916 return g_strdup("ERETNC "); 6917 } 6918 6919 6920 /* 6921 * 6922 * 6923 * 3 2 1 6924 * 10987654321098765432109876543210 6925 * 001000 x1110000101 6926 * rt ----- 6927 * rs ----- 6928 * rd ----- 6929 */ 6930 static char *EVP(uint64 instruction, Dis_info *info) 6931 { 6932 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6933 6934 const char *rt = GPR(rt_value, info); 6935 6936 return img_format("EVP %s", rt); 6937 } 6938 6939 6940 /* 6941 * 6942 * 6943 * 3 2 1 6944 * 10987654321098765432109876543210 6945 * 001000 x1110000101 6946 * rt ----- 6947 * rs ----- 6948 * rd ----- 6949 */ 6950 static char *EVPE(uint64 instruction, Dis_info *info) 6951 { 6952 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6953 6954 const char *rt = GPR(rt_value, info); 6955 6956 return img_format("EVPE %s", rt); 6957 } 6958 6959 6960 /* 6961 * 6962 * 6963 * 3 2 1 6964 * 10987654321098765432109876543210 6965 * 001000 x1110000101 6966 * rt ----- 6967 * rs ----- 6968 * rd ----- 6969 */ 6970 static char *EXT(uint64 instruction, Dis_info *info) 6971 { 6972 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6973 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 6974 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction); 6975 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction); 6976 6977 const char *rt = GPR(rt_value, info); 6978 const char *rs = GPR(rs_value, info); 6979 uint64 msbd = encode_msbd_from_size(msbd_value); 6980 6981 return img_format("EXT %s, %s, 0x%" PRIx64 ", 0x%" PRIx64, 6982 rt, rs, lsb_value, msbd); 6983 } 6984 6985 6986 /* 6987 * 6988 * 6989 * 3 2 1 6990 * 10987654321098765432109876543210 6991 * 001000 x1110000101 6992 * rt ----- 6993 * rs ----- 6994 * rd ----- 6995 */ 6996 static char *EXTD(uint64 instruction, Dis_info *info) 6997 { 6998 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 6999 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7000 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 7001 uint64 shift_value = extract_shift_10_9_8_7_6(instruction); 7002 7003 const char *rd = GPR(rd_value, info); 7004 const char *rs = GPR(rs_value, info); 7005 const char *rt = GPR(rt_value, info); 7006 7007 return img_format("EXTD %s, %s, %s, 0x%" PRIx64, rd, rs, rt, shift_value); 7008 } 7009 7010 7011 /* 7012 * 7013 * 7014 * 3 2 1 7015 * 10987654321098765432109876543210 7016 * 001000 x1110000101 7017 * rt ----- 7018 * rs ----- 7019 * rd ----- 7020 */ 7021 static char *EXTD32(uint64 instruction, Dis_info *info) 7022 { 7023 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7024 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7025 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 7026 uint64 shift_value = extract_shift_10_9_8_7_6(instruction); 7027 7028 const char *rd = GPR(rd_value, info); 7029 const char *rs = GPR(rs_value, info); 7030 const char *rt = GPR(rt_value, info); 7031 7032 return img_format("EXTD32 %s, %s, %s, 0x%" PRIx64, rd, rs, rt, shift_value); 7033 } 7034 7035 7036 /* 7037 * 7038 * 7039 * 3 2 1 7040 * 10987654321098765432109876543210 7041 * 001000 x1110000101 7042 * rt ----- 7043 * rs ----- 7044 * rd ----- 7045 */ 7046 static char *EXTPDP(uint64 instruction, Dis_info *info) 7047 { 7048 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7049 uint64 size_value = extract_size_20_19_18_17_16(instruction); 7050 uint64 ac_value = extract_ac_15_14(instruction); 7051 7052 const char *rt = GPR(rt_value, info); 7053 const char *ac = AC(ac_value, info); 7054 7055 return img_format("EXTPDP %s, %s, 0x%" PRIx64, rt, ac, size_value); 7056 } 7057 7058 7059 /* 7060 * 7061 * 7062 * 3 2 1 7063 * 10987654321098765432109876543210 7064 * 001000 x1110000101 7065 * rt ----- 7066 * rs ----- 7067 * rd ----- 7068 */ 7069 static char *EXTPDPV(uint64 instruction, Dis_info *info) 7070 { 7071 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7072 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7073 uint64 ac_value = extract_ac_15_14(instruction); 7074 7075 const char *rt = GPR(rt_value, info); 7076 const char *ac = AC(ac_value, info); 7077 const char *rs = GPR(rs_value, info); 7078 7079 return img_format("EXTPDPV %s, %s, %s", rt, ac, rs); 7080 } 7081 7082 7083 /* 7084 * 7085 * 7086 * 3 2 1 7087 * 10987654321098765432109876543210 7088 * 001000 x1110000101 7089 * rt ----- 7090 * rs ----- 7091 * rd ----- 7092 */ 7093 static char *EXTP(uint64 instruction, Dis_info *info) 7094 { 7095 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7096 uint64 size_value = extract_size_20_19_18_17_16(instruction); 7097 uint64 ac_value = extract_ac_15_14(instruction); 7098 7099 const char *rt = GPR(rt_value, info); 7100 const char *ac = AC(ac_value, info); 7101 7102 return img_format("EXTP %s, %s, 0x%" PRIx64, rt, ac, size_value); 7103 } 7104 7105 7106 /* 7107 * 7108 * 7109 * 3 2 1 7110 * 10987654321098765432109876543210 7111 * 001000 x1110000101 7112 * rt ----- 7113 * rs ----- 7114 * rd ----- 7115 */ 7116 static char *EXTPV(uint64 instruction, Dis_info *info) 7117 { 7118 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7119 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7120 uint64 ac_value = extract_ac_15_14(instruction); 7121 7122 const char *rt = GPR(rt_value, info); 7123 const char *ac = AC(ac_value, info); 7124 const char *rs = GPR(rs_value, info); 7125 7126 return img_format("EXTPV %s, %s, %s", rt, ac, rs); 7127 } 7128 7129 7130 /* 7131 * [DSP] EXTR_RS.W rt, ac, shift - Extract word value from accumulator to GPR 7132 * with right shift 7133 * 7134 * 3 2 1 7135 * 10987654321098765432109876543210 7136 * 001000 10111001111111 7137 * rt ----- 7138 * shift ----- 7139 * ac -- 7140 */ 7141 static char *EXTR_RS_W(uint64 instruction, Dis_info *info) 7142 { 7143 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7144 uint64 shift_value = extract_shift_20_19_18_17_16(instruction); 7145 uint64 ac_value = extract_ac_15_14(instruction); 7146 7147 const char *rt = GPR(rt_value, info); 7148 const char *ac = AC(ac_value, info); 7149 7150 return img_format("EXTR_RS.W %s, %s, 0x%" PRIx64, rt, ac, shift_value); 7151 } 7152 7153 7154 /* 7155 * [DSP] EXTR_R.W rt, ac, shift - Extract word value from accumulator to GPR 7156 * with right shift 7157 * 7158 * 3 2 1 7159 * 10987654321098765432109876543210 7160 * 001000 01111001111111 7161 * rt ----- 7162 * shift ----- 7163 * ac -- 7164 */ 7165 static char *EXTR_R_W(uint64 instruction, Dis_info *info) 7166 { 7167 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7168 uint64 shift_value = extract_shift_20_19_18_17_16(instruction); 7169 uint64 ac_value = extract_ac_15_14(instruction); 7170 7171 const char *rt = GPR(rt_value, info); 7172 const char *ac = AC(ac_value, info); 7173 7174 return img_format("EXTR_R.W %s, %s, 0x%" PRIx64, rt, ac, shift_value); 7175 } 7176 7177 7178 /* 7179 * [DSP] EXTR_S.H rt, ac, shift - Extract halfword value from accumulator 7180 * to GPR with right shift and saturate 7181 * 7182 * 3 2 1 7183 * 10987654321098765432109876543210 7184 * 001000 11111001111111 7185 * rt ----- 7186 * shift ----- 7187 * ac -- 7188 */ 7189 static char *EXTR_S_H(uint64 instruction, Dis_info *info) 7190 { 7191 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7192 uint64 shift_value = extract_shift_20_19_18_17_16(instruction); 7193 uint64 ac_value = extract_ac_15_14(instruction); 7194 7195 const char *rt = GPR(rt_value, info); 7196 const char *ac = AC(ac_value, info); 7197 7198 return img_format("EXTR_S.H %s, %s, 0x%" PRIx64, rt, ac, shift_value); 7199 } 7200 7201 7202 /* 7203 * [DSP] EXTR.W rt, ac, shift - Extract word value from accumulator to GPR 7204 * with right shift 7205 * 7206 * 3 2 1 7207 * 10987654321098765432109876543210 7208 * 001000 00111001111111 7209 * rt ----- 7210 * shift ----- 7211 * ac -- 7212 */ 7213 static char *EXTR_W(uint64 instruction, Dis_info *info) 7214 { 7215 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7216 uint64 shift_value = extract_shift_20_19_18_17_16(instruction); 7217 uint64 ac_value = extract_ac_15_14(instruction); 7218 7219 const char *rt = GPR(rt_value, info); 7220 const char *ac = AC(ac_value, info); 7221 7222 return img_format("EXTR.W %s, %s, 0x%" PRIx64, rt, ac, shift_value); 7223 } 7224 7225 7226 /* 7227 * [DSP] EXTRV_RS.W rt, ac, rs - Extract word value with variable 7228 * right shift from accumulator to GPR 7229 * 7230 * 3 2 1 7231 * 10987654321098765432109876543210 7232 * 001000 10111010111111 7233 * rt ----- 7234 * rs ----- 7235 * ac -- 7236 */ 7237 static char *EXTRV_RS_W(uint64 instruction, Dis_info *info) 7238 { 7239 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7240 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7241 uint64 ac_value = extract_ac_15_14(instruction); 7242 7243 const char *rt = GPR(rt_value, info); 7244 const char *ac = AC(ac_value, info); 7245 const char *rs = GPR(rs_value, info); 7246 7247 return img_format("EXTRV_RS.W %s, %s, %s", rt, ac, rs); 7248 } 7249 7250 7251 /* 7252 * [DSP] EXTRV_R.W rt, ac, rs - Extract word value with variable 7253 * right shift from accumulator to GPR 7254 * 7255 * 3 2 1 7256 * 10987654321098765432109876543210 7257 * 001000 01111010111111 7258 * rt ----- 7259 * rs ----- 7260 * ac -- 7261 */ 7262 static char *EXTRV_R_W(uint64 instruction, Dis_info *info) 7263 { 7264 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7265 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7266 uint64 ac_value = extract_ac_15_14(instruction); 7267 7268 const char *rt = GPR(rt_value, info); 7269 const char *ac = AC(ac_value, info); 7270 const char *rs = GPR(rs_value, info); 7271 7272 return img_format("EXTRV_R.W %s, %s, %s", rt, ac, rs); 7273 } 7274 7275 7276 /* 7277 * [DSP] EXTRV_S.H rt, ac, rs - Extract halfword value variable from 7278 * accumulator to GPR with right shift and saturate 7279 * 7280 * 3 2 1 7281 * 10987654321098765432109876543210 7282 * 001000 11111010111111 7283 * rt ----- 7284 * rs ----- 7285 * ac -- 7286 */ 7287 static char *EXTRV_S_H(uint64 instruction, Dis_info *info) 7288 { 7289 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7290 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7291 uint64 ac_value = extract_ac_15_14(instruction); 7292 7293 const char *rt = GPR(rt_value, info); 7294 const char *ac = AC(ac_value, info); 7295 const char *rs = GPR(rs_value, info); 7296 7297 return img_format("EXTRV_S.H %s, %s, %s", rt, ac, rs); 7298 } 7299 7300 7301 /* 7302 * [DSP] EXTRV.W rt, ac, rs - Extract word value with variable 7303 * right shift from accumulator to GPR 7304 * 7305 * 3 2 1 7306 * 10987654321098765432109876543210 7307 * 001000 00111010111111 7308 * rt ----- 7309 * rs ----- 7310 * ac -- 7311 */ 7312 static char *EXTRV_W(uint64 instruction, Dis_info *info) 7313 { 7314 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7315 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7316 uint64 ac_value = extract_ac_15_14(instruction); 7317 7318 const char *rt = GPR(rt_value, info); 7319 const char *ac = AC(ac_value, info); 7320 const char *rs = GPR(rs_value, info); 7321 7322 return img_format("EXTRV.W %s, %s, %s", rt, ac, rs); 7323 } 7324 7325 7326 /* 7327 * EXTW - Extract Word 7328 * 7329 * 3 2 1 7330 * 10987654321098765432109876543210 7331 * 001000 011111 7332 * rt ----- 7333 * rs ----- 7334 * rd ----- 7335 * shift ----- 7336 */ 7337 static char *EXTW(uint64 instruction, Dis_info *info) 7338 { 7339 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7340 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7341 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 7342 uint64 shift_value = extract_shift_10_9_8_7_6(instruction); 7343 7344 const char *rd = GPR(rd_value, info); 7345 const char *rs = GPR(rs_value, info); 7346 const char *rt = GPR(rt_value, info); 7347 7348 return img_format("EXTW %s, %s, %s, 0x%" PRIx64, rd, rs, rt, shift_value); 7349 } 7350 7351 7352 /* 7353 * 7354 * 7355 * 3 2 1 7356 * 10987654321098765432109876543210 7357 * 001000 x1110000101 7358 * rt ----- 7359 * rs ----- 7360 * rd ----- 7361 */ 7362 static char *FLOOR_L_D(uint64 instruction, Dis_info *info) 7363 { 7364 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 7365 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 7366 7367 const char *ft = FPR(ft_value, info); 7368 const char *fs = FPR(fs_value, info); 7369 7370 return img_format("FLOOR.L.D %s, %s", ft, fs); 7371 } 7372 7373 7374 /* 7375 * 7376 * 7377 * 3 2 1 7378 * 10987654321098765432109876543210 7379 * 001000 x1110000101 7380 * rt ----- 7381 * rs ----- 7382 * rd ----- 7383 */ 7384 static char *FLOOR_L_S(uint64 instruction, Dis_info *info) 7385 { 7386 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 7387 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 7388 7389 const char *ft = FPR(ft_value, info); 7390 const char *fs = FPR(fs_value, info); 7391 7392 return img_format("FLOOR.L.S %s, %s", ft, fs); 7393 } 7394 7395 7396 /* 7397 * 7398 * 7399 * 3 2 1 7400 * 10987654321098765432109876543210 7401 * 001000 x1110000101 7402 * rt ----- 7403 * rs ----- 7404 * rd ----- 7405 */ 7406 static char *FLOOR_W_D(uint64 instruction, Dis_info *info) 7407 { 7408 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 7409 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 7410 7411 const char *ft = FPR(ft_value, info); 7412 const char *fs = FPR(fs_value, info); 7413 7414 return img_format("FLOOR.W.D %s, %s", ft, fs); 7415 } 7416 7417 7418 /* 7419 * 7420 * 7421 * 3 2 1 7422 * 10987654321098765432109876543210 7423 * 001000 x1110000101 7424 * rt ----- 7425 * rs ----- 7426 * rd ----- 7427 */ 7428 static char *FLOOR_W_S(uint64 instruction, Dis_info *info) 7429 { 7430 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 7431 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 7432 7433 const char *ft = FPR(ft_value, info); 7434 const char *fs = FPR(fs_value, info); 7435 7436 return img_format("FLOOR.W.S %s, %s", ft, fs); 7437 } 7438 7439 7440 /* 7441 * 7442 * 7443 * 3 2 1 7444 * 10987654321098765432109876543210 7445 * 001000 x1110000101 7446 * rt ----- 7447 * rs ----- 7448 * rd ----- 7449 */ 7450 static char *FORK(uint64 instruction, Dis_info *info) 7451 { 7452 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7453 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7454 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 7455 7456 const char *rd = GPR(rd_value, info); 7457 const char *rs = GPR(rs_value, info); 7458 const char *rt = GPR(rt_value, info); 7459 7460 return img_format("FORK %s, %s, %s", rd, rs, rt); 7461 } 7462 7463 7464 /* 7465 * 7466 * 7467 * 3 2 1 7468 * 10987654321098765432109876543210 7469 * 001000 x1110000101 7470 * rt ----- 7471 * rs ----- 7472 * rd ----- 7473 */ 7474 static char *HYPCALL(uint64 instruction, Dis_info *info) 7475 { 7476 uint64 code_value = extract_code_17_to_0(instruction); 7477 7478 7479 return img_format("HYPCALL 0x%" PRIx64, code_value); 7480 } 7481 7482 7483 /* 7484 * 7485 * 7486 * 3 2 1 7487 * 10987654321098765432109876543210 7488 * 001000 x1110000101 7489 * rt ----- 7490 * rs ----- 7491 * rd ----- 7492 */ 7493 static char *HYPCALL_16_(uint64 instruction, Dis_info *info) 7494 { 7495 uint64 code_value = extract_code_1_0(instruction); 7496 7497 7498 return img_format("HYPCALL 0x%" PRIx64, code_value); 7499 } 7500 7501 7502 /* 7503 * 7504 * 7505 * 3 2 1 7506 * 10987654321098765432109876543210 7507 * 001000 x1110000101 7508 * rt ----- 7509 * rs ----- 7510 * rd ----- 7511 */ 7512 static char *INS(uint64 instruction, Dis_info *info) 7513 { 7514 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7515 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7516 uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction); 7517 uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction); 7518 7519 const char *rt = GPR(rt_value, info); 7520 const char *rs = GPR(rs_value, info); 7521 /* !!!!!!!!!! - no conversion function */ 7522 7523 return img_format("INS %s, %s, 0x%" PRIx64 ", 0x%" PRIx64, 7524 rt, rs, lsb_value, msbd_value); 7525 /* hand edited */ 7526 } 7527 7528 7529 /* 7530 * [DSP] INSV rt, rs - Insert bit field variable 7531 * 7532 * 3 2 1 7533 * 10987654321098765432109876543210 7534 * 001000 0100000100111111 7535 * rt ----- 7536 * rs ----- 7537 */ 7538 static char *INSV(uint64 instruction, Dis_info *info) 7539 { 7540 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7541 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7542 7543 const char *rt = GPR(rt_value, info); 7544 const char *rs = GPR(rs_value, info); 7545 7546 return img_format("INSV %s, %s", rt, rs); 7547 } 7548 7549 7550 /* 7551 * 7552 * 7553 * 3 2 1 7554 * 10987654321098765432109876543210 7555 * 001000 x1110000101 7556 * rt ----- 7557 * rs ----- 7558 * rd ----- 7559 */ 7560 static char *IRET(uint64 instruction, Dis_info *info) 7561 { 7562 (void)instruction; 7563 7564 return g_strdup("IRET "); 7565 } 7566 7567 7568 /* 7569 * 7570 * 7571 * 3 2 1 7572 * 10987654321098765432109876543210 7573 * 001000 x1110000101 7574 * rt ----- 7575 * rs ----- 7576 * rd ----- 7577 */ 7578 static char *JALRC_16_(uint64 instruction, Dis_info *info) 7579 { 7580 uint64 rt_value = extract_rt_9_8_7_6_5(instruction); 7581 7582 const char *rt = GPR(rt_value, info); 7583 7584 return img_format("JALRC $%d, %s", 31, rt); 7585 } 7586 7587 7588 /* 7589 * 7590 * 7591 * 3 2 1 7592 * 10987654321098765432109876543210 7593 * 001000 x1110000101 7594 * rt ----- 7595 * rs ----- 7596 * rd ----- 7597 */ 7598 static char *JALRC_32_(uint64 instruction, Dis_info *info) 7599 { 7600 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7601 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7602 7603 const char *rt = GPR(rt_value, info); 7604 const char *rs = GPR(rs_value, info); 7605 7606 return img_format("JALRC %s, %s", rt, rs); 7607 } 7608 7609 7610 /* 7611 * 7612 * 7613 * 3 2 1 7614 * 10987654321098765432109876543210 7615 * 001000 x1110000101 7616 * rt ----- 7617 * rs ----- 7618 * rd ----- 7619 */ 7620 static char *JALRC_HB(uint64 instruction, Dis_info *info) 7621 { 7622 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7623 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7624 7625 const char *rt = GPR(rt_value, info); 7626 const char *rs = GPR(rs_value, info); 7627 7628 return img_format("JALRC.HB %s, %s", rt, rs); 7629 } 7630 7631 7632 /* 7633 * 7634 * 7635 * 3 2 1 7636 * 10987654321098765432109876543210 7637 * 001000 x1110000101 7638 * rt ----- 7639 * rs ----- 7640 * rd ----- 7641 */ 7642 static char *JRC(uint64 instruction, Dis_info *info) 7643 { 7644 uint64 rt_value = extract_rt_9_8_7_6_5(instruction); 7645 7646 const char *rt = GPR(rt_value, info); 7647 7648 return img_format("JRC %s", rt); 7649 } 7650 7651 7652 /* 7653 * 7654 * 7655 * 3 2 1 7656 * 10987654321098765432109876543210 7657 * 001000 x1110000101 7658 * rt ----- 7659 * rs ----- 7660 * rd ----- 7661 */ 7662 static char *LB_16_(uint64 instruction, Dis_info *info) 7663 { 7664 uint64 rt3_value = extract_rt3_9_8_7(instruction); 7665 uint64 rs3_value = extract_rs3_6_5_4(instruction); 7666 uint64 u_value = extract_u_1_0(instruction); 7667 7668 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 7669 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 7670 7671 return img_format("LB %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3); 7672 } 7673 7674 7675 /* 7676 * 7677 * 7678 * 3 2 1 7679 * 10987654321098765432109876543210 7680 * 001000 x1110000101 7681 * rt ----- 7682 * rs ----- 7683 * rd ----- 7684 */ 7685 static char *LB_GP_(uint64 instruction, Dis_info *info) 7686 { 7687 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7688 uint64 u_value = extract_u_17_to_0(instruction); 7689 7690 const char *rt = GPR(rt_value, info); 7691 7692 return img_format("LB %s, 0x%" PRIx64 "($%d)", rt, u_value, 28); 7693 } 7694 7695 7696 /* 7697 * 7698 * 7699 * 3 2 1 7700 * 10987654321098765432109876543210 7701 * 001000 x1110000101 7702 * rt ----- 7703 * rs ----- 7704 * rd ----- 7705 */ 7706 static char *LB_S9_(uint64 instruction, Dis_info *info) 7707 { 7708 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7709 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7710 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 7711 7712 const char *rt = GPR(rt_value, info); 7713 const char *rs = GPR(rs_value, info); 7714 7715 return img_format("LB %s, %" PRId64 "(%s)", rt, s_value, rs); 7716 } 7717 7718 7719 /* 7720 * 7721 * 7722 * 3 2 1 7723 * 10987654321098765432109876543210 7724 * 001000 x1110000101 7725 * rt ----- 7726 * rs ----- 7727 * rd ----- 7728 */ 7729 static char *LB_U12_(uint64 instruction, Dis_info *info) 7730 { 7731 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7732 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7733 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 7734 7735 const char *rt = GPR(rt_value, info); 7736 const char *rs = GPR(rs_value, info); 7737 7738 return img_format("LB %s, 0x%" PRIx64 "(%s)", rt, u_value, rs); 7739 } 7740 7741 7742 /* 7743 * 7744 * 7745 * 3 2 1 7746 * 10987654321098765432109876543210 7747 * 001000 x1110000101 7748 * rt ----- 7749 * rs ----- 7750 * rd ----- 7751 */ 7752 static char *LBE(uint64 instruction, Dis_info *info) 7753 { 7754 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7755 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7756 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 7757 7758 const char *rt = GPR(rt_value, info); 7759 const char *rs = GPR(rs_value, info); 7760 7761 return img_format("LBE %s, %" PRId64 "(%s)", rt, s_value, rs); 7762 } 7763 7764 7765 /* 7766 * 7767 * 7768 * 3 2 1 7769 * 10987654321098765432109876543210 7770 * 001000 x1110000101 7771 * rt ----- 7772 * rs ----- 7773 * rd ----- 7774 */ 7775 static char *LBU_16_(uint64 instruction, Dis_info *info) 7776 { 7777 uint64 rt3_value = extract_rt3_9_8_7(instruction); 7778 uint64 rs3_value = extract_rs3_6_5_4(instruction); 7779 uint64 u_value = extract_u_1_0(instruction); 7780 7781 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 7782 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 7783 7784 return img_format("LBU %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3); 7785 } 7786 7787 7788 /* 7789 * 7790 * 7791 * 3 2 1 7792 * 10987654321098765432109876543210 7793 * 001000 x1110000101 7794 * rt ----- 7795 * rs ----- 7796 * rd ----- 7797 */ 7798 static char *LBU_GP_(uint64 instruction, Dis_info *info) 7799 { 7800 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7801 uint64 u_value = extract_u_17_to_0(instruction); 7802 7803 const char *rt = GPR(rt_value, info); 7804 7805 return img_format("LBU %s, 0x%" PRIx64 "($%d)", rt, u_value, 28); 7806 } 7807 7808 7809 /* 7810 * 7811 * 7812 * 3 2 1 7813 * 10987654321098765432109876543210 7814 * 001000 x1110000101 7815 * rt ----- 7816 * rs ----- 7817 * rd ----- 7818 */ 7819 static char *LBU_S9_(uint64 instruction, Dis_info *info) 7820 { 7821 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7822 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7823 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 7824 7825 const char *rt = GPR(rt_value, info); 7826 const char *rs = GPR(rs_value, info); 7827 7828 return img_format("LBU %s, %" PRId64 "(%s)", rt, s_value, rs); 7829 } 7830 7831 7832 /* 7833 * 7834 * 7835 * 3 2 1 7836 * 10987654321098765432109876543210 7837 * 001000 x1110000101 7838 * rt ----- 7839 * rs ----- 7840 * rd ----- 7841 */ 7842 static char *LBU_U12_(uint64 instruction, Dis_info *info) 7843 { 7844 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7845 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7846 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 7847 7848 const char *rt = GPR(rt_value, info); 7849 const char *rs = GPR(rs_value, info); 7850 7851 return img_format("LBU %s, 0x%" PRIx64 "(%s)", rt, u_value, rs); 7852 } 7853 7854 7855 /* 7856 * 7857 * 7858 * 3 2 1 7859 * 10987654321098765432109876543210 7860 * 001000 x1110000101 7861 * rt ----- 7862 * rs ----- 7863 * rd ----- 7864 */ 7865 static char *LBUE(uint64 instruction, Dis_info *info) 7866 { 7867 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7868 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7869 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 7870 7871 const char *rt = GPR(rt_value, info); 7872 const char *rs = GPR(rs_value, info); 7873 7874 return img_format("LBUE %s, %" PRId64 "(%s)", rt, s_value, rs); 7875 } 7876 7877 7878 /* 7879 * 7880 * 7881 * 3 2 1 7882 * 10987654321098765432109876543210 7883 * 001000 x1110000101 7884 * rt ----- 7885 * rs ----- 7886 * rd ----- 7887 */ 7888 static char *LBUX(uint64 instruction, Dis_info *info) 7889 { 7890 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7891 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7892 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 7893 7894 const char *rd = GPR(rd_value, info); 7895 const char *rs = GPR(rs_value, info); 7896 const char *rt = GPR(rt_value, info); 7897 7898 return img_format("LBUX %s, %s(%s)", rd, rs, rt); 7899 } 7900 7901 7902 /* 7903 * 7904 * 7905 * 3 2 1 7906 * 10987654321098765432109876543210 7907 * 001000 x1110000101 7908 * rt ----- 7909 * rs ----- 7910 * rd ----- 7911 */ 7912 static char *LBX(uint64 instruction, Dis_info *info) 7913 { 7914 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7915 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7916 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 7917 7918 const char *rd = GPR(rd_value, info); 7919 const char *rs = GPR(rs_value, info); 7920 const char *rt = GPR(rt_value, info); 7921 7922 return img_format("LBX %s, %s(%s)", rd, rs, rt); 7923 } 7924 7925 7926 /* 7927 * 7928 * 7929 * 3 2 1 7930 * 10987654321098765432109876543210 7931 * 001000 x1110000101 7932 * rt ----- 7933 * rs ----- 7934 * rd ----- 7935 */ 7936 static char *LD_GP_(uint64 instruction, Dis_info *info) 7937 { 7938 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7939 uint64 u_value = extract_u_20_to_3__s3(instruction); 7940 7941 const char *rt = GPR(rt_value, info); 7942 7943 return img_format("LD %s, 0x%" PRIx64 "($%d)", rt, u_value, 28); 7944 } 7945 7946 7947 /* 7948 * 7949 * 7950 * 3 2 1 7951 * 10987654321098765432109876543210 7952 * 001000 x1110000101 7953 * rt ----- 7954 * rs ----- 7955 * rd ----- 7956 */ 7957 static char *LD_S9_(uint64 instruction, Dis_info *info) 7958 { 7959 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7960 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7961 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 7962 7963 const char *rt = GPR(rt_value, info); 7964 const char *rs = GPR(rs_value, info); 7965 7966 return img_format("LD %s, %" PRId64 "(%s)", rt, s_value, rs); 7967 } 7968 7969 7970 /* 7971 * 7972 * 7973 * 3 2 1 7974 * 10987654321098765432109876543210 7975 * 001000 x1110000101 7976 * rt ----- 7977 * rs ----- 7978 * rd ----- 7979 */ 7980 static char *LD_U12_(uint64 instruction, Dis_info *info) 7981 { 7982 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 7983 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 7984 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 7985 7986 const char *rt = GPR(rt_value, info); 7987 const char *rs = GPR(rs_value, info); 7988 7989 return img_format("LD %s, 0x%" PRIx64 "(%s)", rt, u_value, rs); 7990 } 7991 7992 7993 /* 7994 * 7995 * 7996 * 3 2 1 7997 * 10987654321098765432109876543210 7998 * 001000 x1110000101 7999 * rt ----- 8000 * rs ----- 8001 * rd ----- 8002 */ 8003 static char *LDC1_GP_(uint64 instruction, Dis_info *info) 8004 { 8005 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 8006 uint64 u_value = extract_u_17_to_2__s2(instruction); 8007 8008 const char *ft = FPR(ft_value, info); 8009 8010 return img_format("LDC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28); 8011 } 8012 8013 8014 /* 8015 * 8016 * 8017 * 3 2 1 8018 * 10987654321098765432109876543210 8019 * 001000 x1110000101 8020 * rt ----- 8021 * rs ----- 8022 * rd ----- 8023 */ 8024 static char *LDC1_S9_(uint64 instruction, Dis_info *info) 8025 { 8026 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 8027 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8028 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 8029 8030 const char *ft = FPR(ft_value, info); 8031 const char *rs = GPR(rs_value, info); 8032 8033 return img_format("LDC1 %s, %" PRId64 "(%s)", ft, s_value, rs); 8034 } 8035 8036 8037 /* 8038 * 8039 * 8040 * 3 2 1 8041 * 10987654321098765432109876543210 8042 * 001000 x1110000101 8043 * rt ----- 8044 * rs ----- 8045 * rd ----- 8046 */ 8047 static char *LDC1_U12_(uint64 instruction, Dis_info *info) 8048 { 8049 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 8050 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8051 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 8052 8053 const char *ft = FPR(ft_value, info); 8054 const char *rs = GPR(rs_value, info); 8055 8056 return img_format("LDC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs); 8057 } 8058 8059 8060 /* 8061 * 8062 * 8063 * 3 2 1 8064 * 10987654321098765432109876543210 8065 * 001000 x1110000101 8066 * rt ----- 8067 * rs ----- 8068 * rd ----- 8069 */ 8070 static char *LDC1XS(uint64 instruction, Dis_info *info) 8071 { 8072 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8073 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8074 uint64 ft_value = extract_ft_15_14_13_12_11(instruction); 8075 8076 const char *ft = FPR(ft_value, info); 8077 const char *rs = GPR(rs_value, info); 8078 const char *rt = GPR(rt_value, info); 8079 8080 return img_format("LDC1XS %s, %s(%s)", ft, rs, rt); 8081 } 8082 8083 8084 /* 8085 * 8086 * 8087 * 3 2 1 8088 * 10987654321098765432109876543210 8089 * 001000 x1110000101 8090 * rt ----- 8091 * rs ----- 8092 * rd ----- 8093 */ 8094 static char *LDC1X(uint64 instruction, Dis_info *info) 8095 { 8096 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8097 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8098 uint64 ft_value = extract_ft_15_14_13_12_11(instruction); 8099 8100 const char *ft = FPR(ft_value, info); 8101 const char *rs = GPR(rs_value, info); 8102 const char *rt = GPR(rt_value, info); 8103 8104 return img_format("LDC1X %s, %s(%s)", ft, rs, rt); 8105 } 8106 8107 8108 /* 8109 * 8110 * 8111 * 3 2 1 8112 * 10987654321098765432109876543210 8113 * 001000 x1110000101 8114 * rt ----- 8115 * rs ----- 8116 * rd ----- 8117 */ 8118 static char *LDC2(uint64 instruction, Dis_info *info) 8119 { 8120 uint64 ct_value = extract_ct_25_24_23_22_21(instruction); 8121 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8122 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 8123 8124 const char *rs = GPR(rs_value, info); 8125 8126 return img_format("LDC2 CP%" PRIu64 ", %" PRId64 "(%s)", 8127 ct_value, s_value, rs); 8128 } 8129 8130 8131 /* 8132 * 8133 * 8134 * 3 2 1 8135 * 10987654321098765432109876543210 8136 * 001000 x1110000101 8137 * rt ----- 8138 * rs ----- 8139 * rd ----- 8140 */ 8141 static char *LDM(uint64 instruction, Dis_info *info) 8142 { 8143 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8144 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8145 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 8146 uint64 count3_value = extract_count3_14_13_12(instruction); 8147 8148 const char *rt = GPR(rt_value, info); 8149 const char *rs = GPR(rs_value, info); 8150 uint64 count3 = encode_count3_from_count(count3_value); 8151 8152 return img_format("LDM %s, %" PRId64 "(%s), 0x%" PRIx64, 8153 rt, s_value, rs, count3); 8154 } 8155 8156 8157 /* 8158 * 8159 * 8160 * 3 2 1 8161 * 10987654321098765432109876543210 8162 * 001000 x1110000101 8163 * rt ----- 8164 * rs ----- 8165 * rd ----- 8166 */ 8167 static char *LDPC_48_(uint64 instruction, Dis_info *info) 8168 { 8169 uint64 rt_value = extract_rt_41_40_39_38_37(instruction); 8170 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction); 8171 8172 const char *rt = GPR(rt_value, info); 8173 g_autofree char *s = ADDRESS(s_value, 6, info); 8174 8175 return img_format("LDPC %s, %s", rt, s); 8176 } 8177 8178 8179 /* 8180 * 8181 * 8182 * 3 2 1 8183 * 10987654321098765432109876543210 8184 * 001000 x1110000101 8185 * rt ----- 8186 * rs ----- 8187 * rd ----- 8188 */ 8189 static char *LDX(uint64 instruction, Dis_info *info) 8190 { 8191 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8192 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8193 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 8194 8195 const char *rd = GPR(rd_value, info); 8196 const char *rs = GPR(rs_value, info); 8197 const char *rt = GPR(rt_value, info); 8198 8199 return img_format("LDX %s, %s(%s)", rd, rs, rt); 8200 } 8201 8202 8203 /* 8204 * 8205 * 8206 * 3 2 1 8207 * 10987654321098765432109876543210 8208 * 001000 x1110000101 8209 * rt ----- 8210 * rs ----- 8211 * rd ----- 8212 */ 8213 static char *LDXS(uint64 instruction, Dis_info *info) 8214 { 8215 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8216 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8217 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 8218 8219 const char *rd = GPR(rd_value, info); 8220 const char *rs = GPR(rs_value, info); 8221 const char *rt = GPR(rt_value, info); 8222 8223 return img_format("LDXS %s, %s(%s)", rd, rs, rt); 8224 } 8225 8226 8227 /* 8228 * 8229 * 8230 * 3 2 1 8231 * 10987654321098765432109876543210 8232 * 001000 x1110000101 8233 * rt ----- 8234 * rs ----- 8235 * rd ----- 8236 */ 8237 static char *LH_16_(uint64 instruction, Dis_info *info) 8238 { 8239 uint64 rt3_value = extract_rt3_9_8_7(instruction); 8240 uint64 rs3_value = extract_rs3_6_5_4(instruction); 8241 uint64 u_value = extract_u_2_1__s1(instruction); 8242 8243 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 8244 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 8245 8246 return img_format("LH %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3); 8247 } 8248 8249 8250 /* 8251 * 8252 * 8253 * 3 2 1 8254 * 10987654321098765432109876543210 8255 * 001000 x1110000101 8256 * rt ----- 8257 * rs ----- 8258 * rd ----- 8259 */ 8260 static char *LH_GP_(uint64 instruction, Dis_info *info) 8261 { 8262 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8263 uint64 u_value = extract_u_17_to_1__s1(instruction); 8264 8265 const char *rt = GPR(rt_value, info); 8266 8267 return img_format("LH %s, 0x%" PRIx64 "($%d)", rt, u_value, 28); 8268 } 8269 8270 8271 /* 8272 * 8273 * 8274 * 3 2 1 8275 * 10987654321098765432109876543210 8276 * 001000 x1110000101 8277 * rt ----- 8278 * rs ----- 8279 * rd ----- 8280 */ 8281 static char *LH_S9_(uint64 instruction, Dis_info *info) 8282 { 8283 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8284 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8285 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 8286 8287 const char *rt = GPR(rt_value, info); 8288 const char *rs = GPR(rs_value, info); 8289 8290 return img_format("LH %s, %" PRId64 "(%s)", rt, s_value, rs); 8291 } 8292 8293 8294 /* 8295 * 8296 * 8297 * 3 2 1 8298 * 10987654321098765432109876543210 8299 * 001000 x1110000101 8300 * rt ----- 8301 * rs ----- 8302 * rd ----- 8303 */ 8304 static char *LH_U12_(uint64 instruction, Dis_info *info) 8305 { 8306 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8307 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8308 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 8309 8310 const char *rt = GPR(rt_value, info); 8311 const char *rs = GPR(rs_value, info); 8312 8313 return img_format("LH %s, 0x%" PRIx64 "(%s)", rt, u_value, rs); 8314 } 8315 8316 8317 /* 8318 * 8319 * 8320 * 3 2 1 8321 * 10987654321098765432109876543210 8322 * 001000 x1110000101 8323 * rt ----- 8324 * rs ----- 8325 * rd ----- 8326 */ 8327 static char *LHE(uint64 instruction, Dis_info *info) 8328 { 8329 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8330 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8331 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 8332 8333 const char *rt = GPR(rt_value, info); 8334 const char *rs = GPR(rs_value, info); 8335 8336 return img_format("LHE %s, %" PRId64 "(%s)", rt, s_value, rs); 8337 } 8338 8339 8340 /* 8341 * 8342 * 8343 * 3 2 1 8344 * 10987654321098765432109876543210 8345 * 001000 x1110000101 8346 * rt ----- 8347 * rs ----- 8348 * rd ----- 8349 */ 8350 static char *LHU_16_(uint64 instruction, Dis_info *info) 8351 { 8352 uint64 rt3_value = extract_rt3_9_8_7(instruction); 8353 uint64 rs3_value = extract_rs3_6_5_4(instruction); 8354 uint64 u_value = extract_u_2_1__s1(instruction); 8355 8356 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 8357 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 8358 8359 return img_format("LHU %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3); 8360 } 8361 8362 8363 /* 8364 * 8365 * 8366 * 3 2 1 8367 * 10987654321098765432109876543210 8368 * 001000 x1110000101 8369 * rt ----- 8370 * rs ----- 8371 * rd ----- 8372 */ 8373 static char *LHU_GP_(uint64 instruction, Dis_info *info) 8374 { 8375 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8376 uint64 u_value = extract_u_17_to_1__s1(instruction); 8377 8378 const char *rt = GPR(rt_value, info); 8379 8380 return img_format("LHU %s, 0x%" PRIx64 "($%d)", rt, u_value, 28); 8381 } 8382 8383 8384 /* 8385 * 8386 * 8387 * 3 2 1 8388 * 10987654321098765432109876543210 8389 * 001000 x1110000101 8390 * rt ----- 8391 * rs ----- 8392 * rd ----- 8393 */ 8394 static char *LHU_S9_(uint64 instruction, Dis_info *info) 8395 { 8396 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8397 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8398 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 8399 8400 const char *rt = GPR(rt_value, info); 8401 const char *rs = GPR(rs_value, info); 8402 8403 return img_format("LHU %s, %" PRId64 "(%s)", rt, s_value, rs); 8404 } 8405 8406 8407 /* 8408 * 8409 * 8410 * 3 2 1 8411 * 10987654321098765432109876543210 8412 * 001000 x1110000101 8413 * rt ----- 8414 * rs ----- 8415 * rd ----- 8416 */ 8417 static char *LHU_U12_(uint64 instruction, Dis_info *info) 8418 { 8419 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8420 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8421 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 8422 8423 const char *rt = GPR(rt_value, info); 8424 const char *rs = GPR(rs_value, info); 8425 8426 return img_format("LHU %s, 0x%" PRIx64 "(%s)", rt, u_value, rs); 8427 } 8428 8429 8430 /* 8431 * 8432 * 8433 * 3 2 1 8434 * 10987654321098765432109876543210 8435 * 001000 x1110000101 8436 * rt ----- 8437 * rs ----- 8438 * rd ----- 8439 */ 8440 static char *LHUE(uint64 instruction, Dis_info *info) 8441 { 8442 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8443 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8444 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 8445 8446 const char *rt = GPR(rt_value, info); 8447 const char *rs = GPR(rs_value, info); 8448 8449 return img_format("LHUE %s, %" PRId64 "(%s)", rt, s_value, rs); 8450 } 8451 8452 8453 /* 8454 * 8455 * 8456 * 3 2 1 8457 * 10987654321098765432109876543210 8458 * 001000 x1110000101 8459 * rt ----- 8460 * rs ----- 8461 * rd ----- 8462 */ 8463 static char *LHUX(uint64 instruction, Dis_info *info) 8464 { 8465 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8466 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8467 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 8468 8469 const char *rd = GPR(rd_value, info); 8470 const char *rs = GPR(rs_value, info); 8471 const char *rt = GPR(rt_value, info); 8472 8473 return img_format("LHUX %s, %s(%s)", rd, rs, rt); 8474 } 8475 8476 8477 /* 8478 * 8479 * 8480 * 3 2 1 8481 * 10987654321098765432109876543210 8482 * 001000 x1110000101 8483 * rt ----- 8484 * rs ----- 8485 * rd ----- 8486 */ 8487 static char *LHUXS(uint64 instruction, Dis_info *info) 8488 { 8489 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8490 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8491 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 8492 8493 const char *rd = GPR(rd_value, info); 8494 const char *rs = GPR(rs_value, info); 8495 const char *rt = GPR(rt_value, info); 8496 8497 return img_format("LHUXS %s, %s(%s)", rd, rs, rt); 8498 } 8499 8500 8501 /* 8502 * 8503 * 8504 * 3 2 1 8505 * 10987654321098765432109876543210 8506 * 001000 x1110000101 8507 * rt ----- 8508 * rs ----- 8509 * rd ----- 8510 */ 8511 static char *LHXS(uint64 instruction, Dis_info *info) 8512 { 8513 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8514 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8515 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 8516 8517 const char *rd = GPR(rd_value, info); 8518 const char *rs = GPR(rs_value, info); 8519 const char *rt = GPR(rt_value, info); 8520 8521 return img_format("LHXS %s, %s(%s)", rd, rs, rt); 8522 } 8523 8524 8525 /* 8526 * 8527 * 8528 * 3 2 1 8529 * 10987654321098765432109876543210 8530 * 001000 x1110000101 8531 * rt ----- 8532 * rs ----- 8533 * rd ----- 8534 */ 8535 static char *LHX(uint64 instruction, Dis_info *info) 8536 { 8537 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8538 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8539 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 8540 8541 const char *rd = GPR(rd_value, info); 8542 const char *rs = GPR(rs_value, info); 8543 const char *rt = GPR(rt_value, info); 8544 8545 return img_format("LHX %s, %s(%s)", rd, rs, rt); 8546 } 8547 8548 8549 /* 8550 * 8551 * 8552 * 3 2 1 8553 * 10987654321098765432109876543210 8554 * 001000 x1110000101 8555 * rt ----- 8556 * rs ----- 8557 * rd ----- 8558 */ 8559 static char *LI_16_(uint64 instruction, Dis_info *info) 8560 { 8561 uint64 rt3_value = extract_rt3_9_8_7(instruction); 8562 uint64 eu_value = extract_eu_6_5_4_3_2_1_0(instruction); 8563 8564 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 8565 int64 eu = encode_eu_from_s_li16(eu_value); 8566 8567 return img_format("LI %s, %" PRId64, rt3, eu); 8568 } 8569 8570 8571 /* 8572 * 8573 * 8574 * 3 2 1 8575 * 10987654321098765432109876543210 8576 * 001000 x1110000101 8577 * rt ----- 8578 * rs ----- 8579 * rd ----- 8580 */ 8581 static char *LI_48_(uint64 instruction, Dis_info *info) 8582 { 8583 uint64 rt_value = extract_rt_41_40_39_38_37(instruction); 8584 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction); 8585 8586 const char *rt = GPR(rt_value, info); 8587 8588 return img_format("LI %s, %" PRId64, rt, s_value); 8589 } 8590 8591 8592 /* 8593 * 8594 * 8595 * 3 2 1 8596 * 10987654321098765432109876543210 8597 * 001000 x1110000101 8598 * rt ----- 8599 * rs ----- 8600 * rd ----- 8601 */ 8602 static char *LL(uint64 instruction, Dis_info *info) 8603 { 8604 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8605 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8606 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction); 8607 8608 const char *rt = GPR(rt_value, info); 8609 const char *rs = GPR(rs_value, info); 8610 8611 return img_format("LL %s, %" PRId64 "(%s)", rt, s_value, rs); 8612 } 8613 8614 8615 /* 8616 * 8617 * 8618 * 3 2 1 8619 * 10987654321098765432109876543210 8620 * 001000 x1110000101 8621 * rt ----- 8622 * rs ----- 8623 * rd ----- 8624 */ 8625 static char *LLD(uint64 instruction, Dis_info *info) 8626 { 8627 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8628 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8629 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction); 8630 8631 const char *rt = GPR(rt_value, info); 8632 const char *rs = GPR(rs_value, info); 8633 8634 return img_format("LLD %s, %" PRId64 "(%s)", rt, s_value, rs); 8635 } 8636 8637 8638 /* 8639 * 8640 * 8641 * 3 2 1 8642 * 10987654321098765432109876543210 8643 * 001000 x1110000101 8644 * rt ----- 8645 * rs ----- 8646 * rd ----- 8647 */ 8648 static char *LLDP(uint64 instruction, Dis_info *info) 8649 { 8650 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8651 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8652 uint64 ru_value = extract_ru_7_6_5_4_3(instruction); 8653 8654 const char *rt = GPR(rt_value, info); 8655 const char *ru = GPR(ru_value, info); 8656 const char *rs = GPR(rs_value, info); 8657 8658 return img_format("LLDP %s, %s, (%s)", rt, ru, rs); 8659 } 8660 8661 8662 /* 8663 * 8664 * 8665 * 3 2 1 8666 * 10987654321098765432109876543210 8667 * 001000 x1110000101 8668 * rt ----- 8669 * rs ----- 8670 * rd ----- 8671 */ 8672 static char *LLE(uint64 instruction, Dis_info *info) 8673 { 8674 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8675 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8676 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction); 8677 8678 const char *rt = GPR(rt_value, info); 8679 const char *rs = GPR(rs_value, info); 8680 8681 return img_format("LLE %s, %" PRId64 "(%s)", rt, s_value, rs); 8682 } 8683 8684 8685 /* 8686 * 8687 * 8688 * 3 2 1 8689 * 10987654321098765432109876543210 8690 * 001000 x1110000101 8691 * rt ----- 8692 * rs ----- 8693 * rd ----- 8694 */ 8695 static char *LLWP(uint64 instruction, Dis_info *info) 8696 { 8697 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8698 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8699 uint64 ru_value = extract_ru_7_6_5_4_3(instruction); 8700 8701 const char *rt = GPR(rt_value, info); 8702 const char *ru = GPR(ru_value, info); 8703 const char *rs = GPR(rs_value, info); 8704 8705 return img_format("LLWP %s, %s, (%s)", rt, ru, rs); 8706 } 8707 8708 8709 /* 8710 * 8711 * 8712 * 3 2 1 8713 * 10987654321098765432109876543210 8714 * 001000 x1110000101 8715 * rt ----- 8716 * rs ----- 8717 * rd ----- 8718 */ 8719 static char *LLWPE(uint64 instruction, Dis_info *info) 8720 { 8721 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8722 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8723 uint64 ru_value = extract_ru_7_6_5_4_3(instruction); 8724 8725 const char *rt = GPR(rt_value, info); 8726 const char *ru = GPR(ru_value, info); 8727 const char *rs = GPR(rs_value, info); 8728 8729 return img_format("LLWPE %s, %s, (%s)", rt, ru, rs); 8730 } 8731 8732 8733 /* 8734 * 8735 * 8736 * 3 2 1 8737 * 10987654321098765432109876543210 8738 * 001000 x1110000101 8739 * rt ----- 8740 * rs ----- 8741 * rd ----- 8742 */ 8743 static char *LSA(uint64 instruction, Dis_info *info) 8744 { 8745 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8746 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8747 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 8748 uint64 u2_value = extract_u2_10_9(instruction); 8749 8750 const char *rd = GPR(rd_value, info); 8751 const char *rs = GPR(rs_value, info); 8752 const char *rt = GPR(rt_value, info); 8753 8754 return img_format("LSA %s, %s, %s, 0x%" PRIx64, rd, rs, rt, u2_value); 8755 } 8756 8757 8758 /* 8759 * 8760 * 8761 * 3 2 1 8762 * 10987654321098765432109876543210 8763 * 001000 x1110000101 8764 * rt ----- 8765 * rs ----- 8766 * rd ----- 8767 */ 8768 static char *LUI(uint64 instruction, Dis_info *info) 8769 { 8770 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8771 int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction); 8772 8773 const char *rt = GPR(rt_value, info); 8774 8775 return img_format("LUI %s, %%hi(%" PRId64 ")", rt, s_value); 8776 } 8777 8778 8779 /* 8780 * 8781 * 8782 * 3 2 1 8783 * 10987654321098765432109876543210 8784 * 001000 x1110000101 8785 * rt ----- 8786 * rs ----- 8787 * rd ----- 8788 */ 8789 static char *LW_16_(uint64 instruction, Dis_info *info) 8790 { 8791 uint64 rt3_value = extract_rt3_9_8_7(instruction); 8792 uint64 rs3_value = extract_rs3_6_5_4(instruction); 8793 uint64 u_value = extract_u_3_2_1_0__s2(instruction); 8794 8795 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 8796 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 8797 8798 return img_format("LW %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3); 8799 } 8800 8801 8802 /* 8803 * 8804 * 8805 * 3 2 1 8806 * 10987654321098765432109876543210 8807 * 001000 x1110000101 8808 * rt ----- 8809 * rs ----- 8810 * rd ----- 8811 */ 8812 static char *LW_4X4_(uint64 instruction, Dis_info *info) 8813 { 8814 uint64 rt4_value = extract_rt4_9_7_6_5(instruction); 8815 uint64 rs4_value = extract_rs4_4_2_1_0(instruction); 8816 uint64 u_value = extract_u_3_8__s2(instruction); 8817 8818 const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info); 8819 const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info); 8820 8821 return img_format("LW %s, 0x%" PRIx64 "(%s)", rt4, u_value, rs4); 8822 } 8823 8824 8825 /* 8826 * 8827 * 8828 * 3 2 1 8829 * 10987654321098765432109876543210 8830 * 001000 x1110000101 8831 * rt ----- 8832 * rs ----- 8833 * rd ----- 8834 */ 8835 static char *LW_GP_(uint64 instruction, Dis_info *info) 8836 { 8837 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8838 uint64 u_value = extract_u_20_to_2__s2(instruction); 8839 8840 const char *rt = GPR(rt_value, info); 8841 8842 return img_format("LW %s, 0x%" PRIx64 "($%d)", rt, u_value, 28); 8843 } 8844 8845 8846 /* 8847 * 8848 * 8849 * 3 2 1 8850 * 10987654321098765432109876543210 8851 * 001000 x1110000101 8852 * rt ----- 8853 * rs ----- 8854 * rd ----- 8855 */ 8856 static char *LW_GP16_(uint64 instruction, Dis_info *info) 8857 { 8858 uint64 rt3_value = extract_rt3_9_8_7(instruction); 8859 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction); 8860 8861 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 8862 8863 return img_format("LW %s, 0x%" PRIx64 "($%d)", rt3, u_value, 28); 8864 } 8865 8866 8867 /* 8868 * 8869 * 8870 * 3 2 1 8871 * 10987654321098765432109876543210 8872 * 001000 x1110000101 8873 * rt ----- 8874 * rs ----- 8875 * rd ----- 8876 */ 8877 static char *LW_S9_(uint64 instruction, Dis_info *info) 8878 { 8879 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8880 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8881 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 8882 8883 const char *rt = GPR(rt_value, info); 8884 const char *rs = GPR(rs_value, info); 8885 8886 return img_format("LW %s, %" PRId64 "(%s)", rt, s_value, rs); 8887 } 8888 8889 8890 /* 8891 * 8892 * 8893 * 3 2 1 8894 * 10987654321098765432109876543210 8895 * 001000 x1110000101 8896 * rt ----- 8897 * rs ----- 8898 * rd ----- 8899 */ 8900 static char *LW_SP_(uint64 instruction, Dis_info *info) 8901 { 8902 uint64 rt_value = extract_rt_9_8_7_6_5(instruction); 8903 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction); 8904 8905 const char *rt = GPR(rt_value, info); 8906 8907 return img_format("LW %s, 0x%" PRIx64 "($%d)", rt, u_value, 29); 8908 } 8909 8910 8911 /* 8912 * 8913 * 8914 * 3 2 1 8915 * 10987654321098765432109876543210 8916 * 001000 x1110000101 8917 * rt ----- 8918 * rs ----- 8919 * rd ----- 8920 */ 8921 static char *LW_U12_(uint64 instruction, Dis_info *info) 8922 { 8923 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 8924 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8925 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 8926 8927 const char *rt = GPR(rt_value, info); 8928 const char *rs = GPR(rs_value, info); 8929 8930 return img_format("LW %s, 0x%" PRIx64 "(%s)", rt, u_value, rs); 8931 } 8932 8933 8934 /* 8935 * 8936 * 8937 * 3 2 1 8938 * 10987654321098765432109876543210 8939 * 001000 x1110000101 8940 * rt ----- 8941 * rs ----- 8942 * rd ----- 8943 */ 8944 static char *LWC1_GP_(uint64 instruction, Dis_info *info) 8945 { 8946 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 8947 uint64 u_value = extract_u_17_to_2__s2(instruction); 8948 8949 const char *ft = FPR(ft_value, info); 8950 8951 return img_format("LWC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28); 8952 } 8953 8954 8955 /* 8956 * 8957 * 8958 * 3 2 1 8959 * 10987654321098765432109876543210 8960 * 001000 x1110000101 8961 * rt ----- 8962 * rs ----- 8963 * rd ----- 8964 */ 8965 static char *LWC1_S9_(uint64 instruction, Dis_info *info) 8966 { 8967 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 8968 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8969 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 8970 8971 const char *ft = FPR(ft_value, info); 8972 const char *rs = GPR(rs_value, info); 8973 8974 return img_format("LWC1 %s, %" PRId64 "(%s)", ft, s_value, rs); 8975 } 8976 8977 8978 /* 8979 * 8980 * 8981 * 3 2 1 8982 * 10987654321098765432109876543210 8983 * 001000 x1110000101 8984 * rt ----- 8985 * rs ----- 8986 * rd ----- 8987 */ 8988 static char *LWC1_U12_(uint64 instruction, Dis_info *info) 8989 { 8990 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 8991 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 8992 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 8993 8994 const char *ft = FPR(ft_value, info); 8995 const char *rs = GPR(rs_value, info); 8996 8997 return img_format("LWC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs); 8998 } 8999 9000 9001 /* 9002 * 9003 * 9004 * 3 2 1 9005 * 10987654321098765432109876543210 9006 * 001000 x1110000101 9007 * rt ----- 9008 * rs ----- 9009 * rd ----- 9010 */ 9011 static char *LWC1X(uint64 instruction, Dis_info *info) 9012 { 9013 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9014 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9015 uint64 ft_value = extract_ft_15_14_13_12_11(instruction); 9016 9017 const char *ft = FPR(ft_value, info); 9018 const char *rs = GPR(rs_value, info); 9019 const char *rt = GPR(rt_value, info); 9020 9021 return img_format("LWC1X %s, %s(%s)", ft, rs, rt); 9022 } 9023 9024 9025 /* 9026 * 9027 * 9028 * 3 2 1 9029 * 10987654321098765432109876543210 9030 * 001000 x1110000101 9031 * rt ----- 9032 * rs ----- 9033 * rd ----- 9034 */ 9035 static char *LWC1XS(uint64 instruction, Dis_info *info) 9036 { 9037 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9038 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9039 uint64 ft_value = extract_ft_15_14_13_12_11(instruction); 9040 9041 const char *ft = FPR(ft_value, info); 9042 const char *rs = GPR(rs_value, info); 9043 const char *rt = GPR(rt_value, info); 9044 9045 return img_format("LWC1XS %s, %s(%s)", ft, rs, rt); 9046 } 9047 9048 9049 /* 9050 * 9051 * 9052 * 3 2 1 9053 * 10987654321098765432109876543210 9054 * 001000 x1110000101 9055 * rt ----- 9056 * rs ----- 9057 * rd ----- 9058 */ 9059 static char *LWC2(uint64 instruction, Dis_info *info) 9060 { 9061 uint64 ct_value = extract_ct_25_24_23_22_21(instruction); 9062 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9063 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 9064 9065 const char *rs = GPR(rs_value, info); 9066 9067 return img_format("LWC2 CP%" PRIu64 ", %" PRId64 "(%s)", 9068 ct_value, s_value, rs); 9069 } 9070 9071 9072 /* 9073 * 9074 * 9075 * 3 2 1 9076 * 10987654321098765432109876543210 9077 * 001000 x1110000101 9078 * rt ----- 9079 * rs ----- 9080 * rd ----- 9081 */ 9082 static char *LWE(uint64 instruction, Dis_info *info) 9083 { 9084 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9085 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9086 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 9087 9088 const char *rt = GPR(rt_value, info); 9089 const char *rs = GPR(rs_value, info); 9090 9091 return img_format("LWE %s, %" PRId64 "(%s)", rt, s_value, rs); 9092 } 9093 9094 9095 /* 9096 * 9097 * 9098 * 3 2 1 9099 * 10987654321098765432109876543210 9100 * 001000 x1110000101 9101 * rt ----- 9102 * rs ----- 9103 * rd ----- 9104 */ 9105 static char *LWM(uint64 instruction, Dis_info *info) 9106 { 9107 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9108 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9109 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 9110 uint64 count3_value = extract_count3_14_13_12(instruction); 9111 9112 const char *rt = GPR(rt_value, info); 9113 const char *rs = GPR(rs_value, info); 9114 uint64 count3 = encode_count3_from_count(count3_value); 9115 9116 return img_format("LWM %s, %" PRId64 "(%s), 0x%" PRIx64, 9117 rt, s_value, rs, count3); 9118 } 9119 9120 9121 /* 9122 * 9123 * 9124 * 3 2 1 9125 * 10987654321098765432109876543210 9126 * 001000 x1110000101 9127 * rt ----- 9128 * rs ----- 9129 * rd ----- 9130 */ 9131 static char *LWPC_48_(uint64 instruction, Dis_info *info) 9132 { 9133 uint64 rt_value = extract_rt_41_40_39_38_37(instruction); 9134 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction); 9135 9136 const char *rt = GPR(rt_value, info); 9137 g_autofree char *s = ADDRESS(s_value, 6, info); 9138 9139 return img_format("LWPC %s, %s", rt, s); 9140 } 9141 9142 9143 /* 9144 * 9145 * 9146 * 3 2 1 9147 * 10987654321098765432109876543210 9148 * 001000 x1110000101 9149 * rt ----- 9150 * rs ----- 9151 * rd ----- 9152 */ 9153 static char *LWU_GP_(uint64 instruction, Dis_info *info) 9154 { 9155 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9156 uint64 u_value = extract_u_17_to_2__s2(instruction); 9157 9158 const char *rt = GPR(rt_value, info); 9159 9160 return img_format("LWU %s, 0x%" PRIx64 "($%d)", rt, u_value, 28); 9161 } 9162 9163 9164 /* 9165 * 9166 * 9167 * 3 2 1 9168 * 10987654321098765432109876543210 9169 * 001000 x1110000101 9170 * rt ----- 9171 * rs ----- 9172 * rd ----- 9173 */ 9174 static char *LWU_S9_(uint64 instruction, Dis_info *info) 9175 { 9176 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9177 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9178 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 9179 9180 const char *rt = GPR(rt_value, info); 9181 const char *rs = GPR(rs_value, info); 9182 9183 return img_format("LWU %s, %" PRId64 "(%s)", rt, s_value, rs); 9184 } 9185 9186 9187 /* 9188 * 9189 * 9190 * 3 2 1 9191 * 10987654321098765432109876543210 9192 * 001000 x1110000101 9193 * rt ----- 9194 * rs ----- 9195 * rd ----- 9196 */ 9197 static char *LWU_U12_(uint64 instruction, Dis_info *info) 9198 { 9199 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9200 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9201 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 9202 9203 const char *rt = GPR(rt_value, info); 9204 const char *rs = GPR(rs_value, info); 9205 9206 return img_format("LWU %s, 0x%" PRIx64 "(%s)", rt, u_value, rs); 9207 } 9208 9209 9210 /* 9211 * 9212 * 9213 * 3 2 1 9214 * 10987654321098765432109876543210 9215 * 001000 x1110000101 9216 * rt ----- 9217 * rs ----- 9218 * rd ----- 9219 */ 9220 static char *LWUX(uint64 instruction, Dis_info *info) 9221 { 9222 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9223 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9224 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 9225 9226 const char *rd = GPR(rd_value, info); 9227 const char *rs = GPR(rs_value, info); 9228 const char *rt = GPR(rt_value, info); 9229 9230 return img_format("LWUX %s, %s(%s)", rd, rs, rt); 9231 } 9232 9233 9234 /* 9235 * 9236 * 9237 * 3 2 1 9238 * 10987654321098765432109876543210 9239 * 001000 x1110000101 9240 * rt ----- 9241 * rs ----- 9242 * rd ----- 9243 */ 9244 static char *LWUXS(uint64 instruction, Dis_info *info) 9245 { 9246 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9247 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9248 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 9249 9250 const char *rd = GPR(rd_value, info); 9251 const char *rs = GPR(rs_value, info); 9252 const char *rt = GPR(rt_value, info); 9253 9254 return img_format("LWUXS %s, %s(%s)", rd, rs, rt); 9255 } 9256 9257 9258 /* 9259 * 9260 * 9261 * 3 2 1 9262 * 10987654321098765432109876543210 9263 * 001000 x1110000101 9264 * rt ----- 9265 * rs ----- 9266 * rd ----- 9267 */ 9268 static char *LWX(uint64 instruction, Dis_info *info) 9269 { 9270 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9271 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9272 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 9273 9274 const char *rd = GPR(rd_value, info); 9275 const char *rs = GPR(rs_value, info); 9276 const char *rt = GPR(rt_value, info); 9277 9278 return img_format("LWX %s, %s(%s)", rd, rs, rt); 9279 } 9280 9281 9282 /* 9283 * 9284 * 9285 * 3 2 1 9286 * 10987654321098765432109876543210 9287 * 001000 x1110000101 9288 * rt ----- 9289 * rs ----- 9290 * rd ----- 9291 */ 9292 static char *LWXS_16_(uint64 instruction, Dis_info *info) 9293 { 9294 uint64 rt3_value = extract_rt3_9_8_7(instruction); 9295 uint64 rs3_value = extract_rs3_6_5_4(instruction); 9296 uint64 rd3_value = extract_rd3_3_2_1(instruction); 9297 9298 const char *rd3 = GPR(decode_gpr_gpr3(rd3_value, info), info); 9299 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 9300 uint64 rt3 = decode_gpr_gpr3(rt3_value, info); 9301 9302 return img_format("LWXS %s, %s(0x%" PRIx64 ")", rd3, rs3, rt3); 9303 } 9304 9305 9306 /* 9307 * 9308 * 9309 * 3 2 1 9310 * 10987654321098765432109876543210 9311 * 001000 x1110000101 9312 * rt ----- 9313 * rs ----- 9314 * rd ----- 9315 */ 9316 static char *LWXS_32_(uint64 instruction, Dis_info *info) 9317 { 9318 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9319 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9320 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 9321 9322 const char *rd = GPR(rd_value, info); 9323 const char *rs = GPR(rs_value, info); 9324 const char *rt = GPR(rt_value, info); 9325 9326 return img_format("LWXS %s, %s(%s)", rd, rs, rt); 9327 } 9328 9329 9330 /* 9331 * [DSP] MADD ac, rs, rt - Multiply two words and add to the specified 9332 * accumulator 9333 * 9334 * 3 2 1 9335 * 10987654321098765432109876543210 9336 * 001000 x1110000101 9337 * rt ----- 9338 * rs ----- 9339 * rd ----- 9340 */ 9341 static char *MADD_DSP_(uint64 instruction, Dis_info *info) 9342 { 9343 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9344 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9345 uint64 ac_value = extract_ac_15_14(instruction); 9346 9347 const char *ac = AC(ac_value, info); 9348 const char *rs = GPR(rs_value, info); 9349 const char *rt = GPR(rt_value, info); 9350 9351 return img_format("MADD %s, %s, %s", ac, rs, rt); 9352 } 9353 9354 9355 /* 9356 * 9357 * 9358 * 3 2 1 9359 * 10987654321098765432109876543210 9360 * 001000 x1110000101 9361 * rt ----- 9362 * rs ----- 9363 * rd ----- 9364 */ 9365 static char *MADDF_D(uint64 instruction, Dis_info *info) 9366 { 9367 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 9368 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 9369 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 9370 9371 const char *fd = FPR(fd_value, info); 9372 const char *fs = FPR(fs_value, info); 9373 const char *ft = FPR(ft_value, info); 9374 9375 return img_format("MADDF.D %s, %s, %s", fd, fs, ft); 9376 } 9377 9378 9379 /* 9380 * 9381 * 9382 * 3 2 1 9383 * 10987654321098765432109876543210 9384 * 001000 x1110000101 9385 * rt ----- 9386 * rs ----- 9387 * rd ----- 9388 */ 9389 static char *MADDF_S(uint64 instruction, Dis_info *info) 9390 { 9391 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 9392 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 9393 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 9394 9395 const char *fd = FPR(fd_value, info); 9396 const char *fs = FPR(fs_value, info); 9397 const char *ft = FPR(ft_value, info); 9398 9399 return img_format("MADDF.S %s, %s, %s", fd, fs, ft); 9400 } 9401 9402 9403 /* 9404 * [DSP] MADDU ac, rs, rt - Multiply two unsigned words and add to the 9405 * specified accumulator 9406 * 9407 * 3 2 1 9408 * 10987654321098765432109876543210 9409 * 001000 x1110000101 9410 * rt ----- 9411 * rs ----- 9412 * rd ----- 9413 */ 9414 static char *MADDU_DSP_(uint64 instruction, Dis_info *info) 9415 { 9416 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9417 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9418 uint64 ac_value = extract_ac_15_14(instruction); 9419 9420 const char *ac = AC(ac_value, info); 9421 const char *rs = GPR(rs_value, info); 9422 const char *rt = GPR(rt_value, info); 9423 9424 return img_format("MADDU %s, %s, %s", ac, rs, rt); 9425 } 9426 9427 9428 /* 9429 * [DSP] MAQ_S.W.PHL ac, rs, rt - Multiply the left-most single vector 9430 * fractional halfword elements with accumulation 9431 * 9432 * 3 2 1 9433 * 10987654321098765432109876543210 9434 * 001000 x1110000101 9435 * rt ----- 9436 * rs ----- 9437 * rd ----- 9438 */ 9439 static char *MAQ_S_W_PHL(uint64 instruction, Dis_info *info) 9440 { 9441 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9442 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9443 uint64 ac_value = extract_ac_15_14(instruction); 9444 9445 const char *ac = AC(ac_value, info); 9446 const char *rs = GPR(rs_value, info); 9447 const char *rt = GPR(rt_value, info); 9448 9449 return img_format("MAQ_S.W.PHL %s, %s, %s", ac, rs, rt); 9450 } 9451 9452 9453 /* 9454 * [DSP] MAQ_S.W.PHR ac, rs, rt - Multiply the right-most single vector 9455 * fractional halfword elements with accumulation 9456 * 9457 * 3 2 1 9458 * 10987654321098765432109876543210 9459 * 001000 x1110000101 9460 * rt ----- 9461 * rs ----- 9462 * rd ----- 9463 */ 9464 static char *MAQ_S_W_PHR(uint64 instruction, Dis_info *info) 9465 { 9466 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9467 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9468 uint64 ac_value = extract_ac_15_14(instruction); 9469 9470 const char *ac = AC(ac_value, info); 9471 const char *rs = GPR(rs_value, info); 9472 const char *rt = GPR(rt_value, info); 9473 9474 return img_format("MAQ_S.W.PHR %s, %s, %s", ac, rs, rt); 9475 } 9476 9477 9478 /* 9479 * [DSP] MAQ_SA.W.PHL ac, rs, rt - Multiply the left-most single vector 9480 * fractional halfword elements with saturating accumulation 9481 * 9482 * 3 2 1 9483 * 10987654321098765432109876543210 9484 * 001000 x1110000101 9485 * rt ----- 9486 * rs ----- 9487 * rd ----- 9488 */ 9489 static char *MAQ_SA_W_PHL(uint64 instruction, Dis_info *info) 9490 { 9491 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9492 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9493 uint64 ac_value = extract_ac_15_14(instruction); 9494 9495 const char *ac = AC(ac_value, info); 9496 const char *rs = GPR(rs_value, info); 9497 const char *rt = GPR(rt_value, info); 9498 9499 return img_format("MAQ_SA.W.PHL %s, %s, %s", ac, rs, rt); 9500 } 9501 9502 9503 /* 9504 * [DSP] MAQ_SA.W.PHR ac, rs, rt - Multiply the right-most single vector 9505 * fractional halfword elements with saturating accumulation 9506 * 9507 * 3 2 1 9508 * 10987654321098765432109876543210 9509 * 001000 x1110000101 9510 * rt ----- 9511 * rs ----- 9512 * rd ----- 9513 */ 9514 static char *MAQ_SA_W_PHR(uint64 instruction, Dis_info *info) 9515 { 9516 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9517 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 9518 uint64 ac_value = extract_ac_15_14(instruction); 9519 9520 const char *ac = AC(ac_value, info); 9521 const char *rs = GPR(rs_value, info); 9522 const char *rt = GPR(rt_value, info); 9523 9524 return img_format("MAQ_SA.W.PHR %s, %s, %s", ac, rs, rt); 9525 } 9526 9527 9528 /* 9529 * 9530 * 9531 * 3 2 1 9532 * 10987654321098765432109876543210 9533 * 001000 x1110000101 9534 * rt ----- 9535 * rs ----- 9536 * rd ----- 9537 */ 9538 static char *MAX_D(uint64 instruction, Dis_info *info) 9539 { 9540 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 9541 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 9542 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 9543 9544 const char *fd = FPR(fd_value, info); 9545 const char *fs = FPR(fs_value, info); 9546 const char *ft = FPR(ft_value, info); 9547 9548 return img_format("MAX.D %s, %s, %s", fd, fs, ft); 9549 } 9550 9551 9552 /* 9553 * 9554 * 9555 * 3 2 1 9556 * 10987654321098765432109876543210 9557 * 001000 x1110000101 9558 * rt ----- 9559 * rs ----- 9560 * rd ----- 9561 */ 9562 static char *MAX_S(uint64 instruction, Dis_info *info) 9563 { 9564 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 9565 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 9566 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 9567 9568 const char *fd = FPR(fd_value, info); 9569 const char *fs = FPR(fs_value, info); 9570 const char *ft = FPR(ft_value, info); 9571 9572 return img_format("MAX.S %s, %s, %s", fd, fs, ft); 9573 } 9574 9575 9576 /* 9577 * 9578 * 9579 * 3 2 1 9580 * 10987654321098765432109876543210 9581 * 001000 x1110000101 9582 * rt ----- 9583 * rs ----- 9584 * rd ----- 9585 */ 9586 static char *MAXA_D(uint64 instruction, Dis_info *info) 9587 { 9588 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 9589 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 9590 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 9591 9592 const char *fd = FPR(fd_value, info); 9593 const char *fs = FPR(fs_value, info); 9594 const char *ft = FPR(ft_value, info); 9595 9596 return img_format("MAXA.D %s, %s, %s", fd, fs, ft); 9597 } 9598 9599 9600 /* 9601 * 9602 * 9603 * 3 2 1 9604 * 10987654321098765432109876543210 9605 * 001000 x1110000101 9606 * rt ----- 9607 * rs ----- 9608 * rd ----- 9609 */ 9610 static char *MAXA_S(uint64 instruction, Dis_info *info) 9611 { 9612 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 9613 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 9614 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 9615 9616 const char *fd = FPR(fd_value, info); 9617 const char *fs = FPR(fs_value, info); 9618 const char *ft = FPR(ft_value, info); 9619 9620 return img_format("MAXA.S %s, %s, %s", fd, fs, ft); 9621 } 9622 9623 9624 /* 9625 * 9626 * 9627 * 3 2 1 9628 * 10987654321098765432109876543210 9629 * 001000 x1110000101 9630 * rt ----- 9631 * rs ----- 9632 * rd ----- 9633 */ 9634 static char *MFC0(uint64 instruction, Dis_info *info) 9635 { 9636 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9637 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 9638 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 9639 9640 const char *rt = GPR(rt_value, info); 9641 9642 return img_format("MFC0 %s, CP%" PRIu64 ", 0x%" PRIx64, 9643 rt, c0s_value, sel_value); 9644 } 9645 9646 9647 /* 9648 * 9649 * 9650 * 3 2 1 9651 * 10987654321098765432109876543210 9652 * 001000 x1110000101 9653 * rt ----- 9654 * rs ----- 9655 * rd ----- 9656 */ 9657 static char *MFC1(uint64 instruction, Dis_info *info) 9658 { 9659 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9660 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 9661 9662 const char *rt = GPR(rt_value, info); 9663 const char *fs = FPR(fs_value, info); 9664 9665 return img_format("MFC1 %s, %s", rt, fs); 9666 } 9667 9668 9669 /* 9670 * 9671 * 9672 * 3 2 1 9673 * 10987654321098765432109876543210 9674 * 001000 x1110000101 9675 * rt ----- 9676 * rs ----- 9677 * rd ----- 9678 */ 9679 static char *MFC2(uint64 instruction, Dis_info *info) 9680 { 9681 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9682 uint64 cs_value = extract_cs_20_19_18_17_16(instruction); 9683 9684 const char *rt = GPR(rt_value, info); 9685 9686 return img_format("MFC2 %s, CP%" PRIu64, rt, cs_value); 9687 } 9688 9689 9690 /* 9691 * 9692 * 9693 * 3 2 1 9694 * 10987654321098765432109876543210 9695 * 001000 x1110000101 9696 * rt ----- 9697 * rs ----- 9698 * rd ----- 9699 */ 9700 static char *MFGC0(uint64 instruction, Dis_info *info) 9701 { 9702 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9703 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 9704 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 9705 9706 const char *rt = GPR(rt_value, info); 9707 9708 return img_format("MFGC0 %s, CP%" PRIu64 ", 0x%" PRIx64, 9709 rt, c0s_value, sel_value); 9710 } 9711 9712 9713 /* 9714 * 9715 * 9716 * 3 2 1 9717 * 10987654321098765432109876543210 9718 * 001000 x1110000101 9719 * rt ----- 9720 * rs ----- 9721 * rd ----- 9722 */ 9723 static char *MFHC0(uint64 instruction, Dis_info *info) 9724 { 9725 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9726 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 9727 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 9728 9729 const char *rt = GPR(rt_value, info); 9730 9731 return img_format("MFHC0 %s, CP%" PRIu64 ", 0x%" PRIx64, 9732 rt, c0s_value, sel_value); 9733 } 9734 9735 9736 /* 9737 * 9738 * 9739 * 3 2 1 9740 * 10987654321098765432109876543210 9741 * 001000 x1110000101 9742 * rt ----- 9743 * rs ----- 9744 * rd ----- 9745 */ 9746 static char *MFHC1(uint64 instruction, Dis_info *info) 9747 { 9748 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9749 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 9750 9751 const char *rt = GPR(rt_value, info); 9752 const char *fs = FPR(fs_value, info); 9753 9754 return img_format("MFHC1 %s, %s", rt, fs); 9755 } 9756 9757 9758 /* 9759 * 9760 * 9761 * 3 2 1 9762 * 10987654321098765432109876543210 9763 * 001000 x1110000101 9764 * rt ----- 9765 * rs ----- 9766 * rd ----- 9767 */ 9768 static char *MFHC2(uint64 instruction, Dis_info *info) 9769 { 9770 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9771 uint64 cs_value = extract_cs_20_19_18_17_16(instruction); 9772 9773 const char *rt = GPR(rt_value, info); 9774 9775 return img_format("MFHC2 %s, CP%" PRIu64, rt, cs_value); 9776 } 9777 9778 9779 /* 9780 * 9781 * 9782 * 3 2 1 9783 * 10987654321098765432109876543210 9784 * 001000 x1110000101 9785 * rt ----- 9786 * rs ----- 9787 * rd ----- 9788 */ 9789 static char *MFHGC0(uint64 instruction, Dis_info *info) 9790 { 9791 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9792 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 9793 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 9794 9795 const char *rt = GPR(rt_value, info); 9796 9797 return img_format("MFHGC0 %s, CP%" PRIu64 ", 0x%" PRIx64, 9798 rt, c0s_value, sel_value); 9799 } 9800 9801 9802 /* 9803 * [DSP] MFHI rs, ac - Move from HI register 9804 * 9805 * 3 2 1 9806 * 10987654321098765432109876543210 9807 * 001000 xxxxx 00000001111111 9808 * rt ----- 9809 * ac -- 9810 */ 9811 static char *MFHI_DSP_(uint64 instruction, Dis_info *info) 9812 { 9813 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9814 uint64 ac_value = extract_ac_15_14(instruction); 9815 9816 const char *rt = GPR(rt_value, info); 9817 const char *ac = AC(ac_value, info); 9818 9819 return img_format("MFHI %s, %s", rt, ac); 9820 } 9821 9822 9823 /* 9824 * 9825 * 9826 * 3 2 1 9827 * 10987654321098765432109876543210 9828 * 001000 x1110000101 9829 * rt ----- 9830 * rs ----- 9831 * rd ----- 9832 */ 9833 static char *MFHTR(uint64 instruction, Dis_info *info) 9834 { 9835 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9836 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 9837 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 9838 uint64 u_value = extract_u_10(instruction); 9839 9840 const char *rt = GPR(rt_value, info); 9841 9842 return img_format("MFHTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64, 9843 rt, c0s_value, u_value, sel_value); 9844 } 9845 9846 9847 /* 9848 * [DSP] MFLO rs, ac - Move from HI register 9849 * 9850 * 3 2 1 9851 * 10987654321098765432109876543210 9852 * 001000 xxxxx 01000001111111 9853 * rt ----- 9854 * ac -- 9855 */ 9856 static char *MFLO_DSP_(uint64 instruction, Dis_info *info) 9857 { 9858 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9859 uint64 ac_value = extract_ac_15_14(instruction); 9860 9861 const char *rt = GPR(rt_value, info); 9862 const char *ac = AC(ac_value, info); 9863 9864 return img_format("MFLO %s, %s", rt, ac); 9865 } 9866 9867 9868 /* 9869 * 9870 * 9871 * 3 2 1 9872 * 10987654321098765432109876543210 9873 * 001000 x1110000101 9874 * rt ----- 9875 * rs ----- 9876 * rd ----- 9877 */ 9878 static char *MFTR(uint64 instruction, Dis_info *info) 9879 { 9880 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 9881 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 9882 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 9883 uint64 u_value = extract_u_10(instruction); 9884 9885 const char *rt = GPR(rt_value, info); 9886 9887 return img_format("MFTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64, 9888 rt, c0s_value, u_value, sel_value); 9889 } 9890 9891 9892 /* 9893 * 9894 * 9895 * 3 2 1 9896 * 10987654321098765432109876543210 9897 * 001000 x1110000101 9898 * rt ----- 9899 * rs ----- 9900 * rd ----- 9901 */ 9902 static char *MIN_D(uint64 instruction, Dis_info *info) 9903 { 9904 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 9905 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 9906 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 9907 9908 const char *fd = FPR(fd_value, info); 9909 const char *fs = FPR(fs_value, info); 9910 const char *ft = FPR(ft_value, info); 9911 9912 return img_format("MIN.D %s, %s, %s", fd, fs, ft); 9913 } 9914 9915 9916 /* 9917 * 9918 * 9919 * 3 2 1 9920 * 10987654321098765432109876543210 9921 * 001000 x1110000101 9922 * rt ----- 9923 * rs ----- 9924 * rd ----- 9925 */ 9926 static char *MIN_S(uint64 instruction, Dis_info *info) 9927 { 9928 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 9929 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 9930 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 9931 9932 const char *fd = FPR(fd_value, info); 9933 const char *fs = FPR(fs_value, info); 9934 const char *ft = FPR(ft_value, info); 9935 9936 return img_format("MIN.S %s, %s, %s", fd, fs, ft); 9937 } 9938 9939 9940 /* 9941 * 9942 * 9943 * 3 2 1 9944 * 10987654321098765432109876543210 9945 * 001000 x1110000101 9946 * rt ----- 9947 * rs ----- 9948 * rd ----- 9949 */ 9950 static char *MINA_D(uint64 instruction, Dis_info *info) 9951 { 9952 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 9953 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 9954 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 9955 9956 const char *fd = FPR(fd_value, info); 9957 const char *fs = FPR(fs_value, info); 9958 const char *ft = FPR(ft_value, info); 9959 9960 return img_format("MINA.D %s, %s, %s", fd, fs, ft); 9961 } 9962 9963 9964 /* 9965 * 9966 * 9967 * 3 2 1 9968 * 10987654321098765432109876543210 9969 * 001000 x1110000101 9970 * rt ----- 9971 * rs ----- 9972 * rd ----- 9973 */ 9974 static char *MINA_S(uint64 instruction, Dis_info *info) 9975 { 9976 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 9977 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 9978 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 9979 9980 const char *fd = FPR(fd_value, info); 9981 const char *fs = FPR(fs_value, info); 9982 const char *ft = FPR(ft_value, info); 9983 9984 return img_format("MINA.S %s, %s, %s", fd, fs, ft); 9985 } 9986 9987 9988 /* 9989 * 9990 * 9991 * 3 2 1 9992 * 10987654321098765432109876543210 9993 * 001000 x1110000101 9994 * rt ----- 9995 * rs ----- 9996 * rd ----- 9997 */ 9998 static char *MOD(uint64 instruction, Dis_info *info) 9999 { 10000 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10001 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10002 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10003 10004 const char *rd = GPR(rd_value, info); 10005 const char *rs = GPR(rs_value, info); 10006 const char *rt = GPR(rt_value, info); 10007 10008 return img_format("MOD %s, %s, %s", rd, rs, rt); 10009 } 10010 10011 10012 /* 10013 * [DSP] MODSUB rd, rs, rt - Modular subtraction on an index value 10014 * 10015 * 3 2 1 10016 * 10987654321098765432109876543210 10017 * 001000 x1110000101 10018 * rt ----- 10019 * rs ----- 10020 * rd ----- 10021 */ 10022 static char *MODSUB(uint64 instruction, Dis_info *info) 10023 { 10024 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10025 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10026 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10027 10028 const char *rd = GPR(rd_value, info); 10029 const char *rs = GPR(rs_value, info); 10030 const char *rt = GPR(rt_value, info); 10031 10032 return img_format("MODSUB %s, %s, %s", rd, rs, rt); 10033 } 10034 10035 10036 /* 10037 * 10038 * 10039 * 3 2 1 10040 * 10987654321098765432109876543210 10041 * 001000 x1010010101 10042 * rt ----- 10043 * rs ----- 10044 * rd ----- 10045 */ 10046 static char *MODU(uint64 instruction, Dis_info *info) 10047 { 10048 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10049 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10050 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10051 10052 const char *rd = GPR(rd_value, info); 10053 const char *rs = GPR(rs_value, info); 10054 const char *rt = GPR(rt_value, info); 10055 10056 return img_format("MODU %s, %s, %s", rd, rs, rt); 10057 } 10058 10059 10060 /* 10061 * 10062 * 10063 * 3 2 1 10064 * 10987654321098765432109876543210 10065 * 001000 x1110000101 10066 * rt ----- 10067 * rs ----- 10068 * rd ----- 10069 */ 10070 static char *MOV_D(uint64 instruction, Dis_info *info) 10071 { 10072 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 10073 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 10074 10075 const char *ft = FPR(ft_value, info); 10076 const char *fs = FPR(fs_value, info); 10077 10078 return img_format("MOV.D %s, %s", ft, fs); 10079 } 10080 10081 10082 /* 10083 * 10084 * 10085 * 3 2 1 10086 * 10987654321098765432109876543210 10087 * 001000 x1110000101 10088 * rt ----- 10089 * rs ----- 10090 * rd ----- 10091 */ 10092 static char *MOV_S(uint64 instruction, Dis_info *info) 10093 { 10094 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 10095 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 10096 10097 const char *ft = FPR(ft_value, info); 10098 const char *fs = FPR(fs_value, info); 10099 10100 return img_format("MOV.S %s, %s", ft, fs); 10101 } 10102 10103 10104 /* 10105 * 10106 * 10107 * 3 2 1 10108 * 10987654321098765432109876543210 10109 * 001000 x1110000101 10110 * rt ----- 10111 * rs ----- 10112 * rd ----- 10113 */ 10114 static char *MOVE_BALC(uint64 instruction, Dis_info *info) 10115 { 10116 uint64 rtz4_value = extract_rtz4_27_26_25_23_22_21(instruction); 10117 uint64 rd1_value = extract_rdl_25_24(instruction); 10118 int64 s_value = extract_s__se21_0_20_to_1_s1(instruction); 10119 10120 const char *rd1 = GPR(decode_gpr_gpr1(rd1_value, info), info); 10121 const char *rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value, info), info); 10122 g_autofree char *s = ADDRESS(s_value, 4, info); 10123 10124 return img_format("MOVE.BALC %s, %s, %s", rd1, rtz4, s); 10125 } 10126 10127 10128 /* 10129 * 10130 * 10131 * 3 2 1 10132 * 10987654321098765432109876543210 10133 * 001000 x1110000101 10134 * rt ----- 10135 * rs ----- 10136 * rd ----- 10137 */ 10138 static char *MOVEP(uint64 instruction, Dis_info *info) 10139 { 10140 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction); 10141 uint64 rd2_value = extract_rd2_3_8(instruction); 10142 uint64 rsz4_value = extract_rsz4_4_2_1_0(instruction); 10143 10144 const char *rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value, info), info); 10145 const char *re2 = GPR(decode_gpr_gpr2_reg2(rd2_value, info), info); 10146 /* !!!!!!!!!! - no conversion function */ 10147 const char *rsz4 = GPR(decode_gpr_gpr4_zero(rsz4_value, info), info); 10148 const char *rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value, info), info); 10149 10150 return img_format("MOVEP %s, %s, %s, %s", rd2, re2, rsz4, rtz4); 10151 /* hand edited */ 10152 } 10153 10154 10155 /* 10156 * 10157 * 10158 * 3 2 1 10159 * 10987654321098765432109876543210 10160 * 001000 x1110000101 10161 * rt ----- 10162 * rs ----- 10163 * rd ----- 10164 */ 10165 static char *MOVEP_REV_(uint64 instruction, Dis_info *info) 10166 { 10167 uint64 rt4_value = extract_rt4_9_7_6_5(instruction); 10168 uint64 rd2_value = extract_rd2_3_8(instruction); 10169 uint64 rs4_value = extract_rs4_4_2_1_0(instruction); 10170 10171 const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info); 10172 const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info); 10173 const char *rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value, info), info); 10174 const char *rs2 = GPR(decode_gpr_gpr2_reg2(rd2_value, info), info); 10175 /* !!!!!!!!!! - no conversion function */ 10176 10177 return img_format("MOVEP %s, %s, %s, %s", rs4, rt4, rd2, rs2); 10178 /* hand edited */ 10179 } 10180 10181 10182 /* 10183 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10184 * 10185 * 3 2 1 10186 * 10987654321098765432109876543210 10187 * 001000 00010001101 10188 * rt ----- 10189 * rs ----- 10190 * rd ----- 10191 */ 10192 static char *MOVE(uint64 instruction, Dis_info *info) 10193 { 10194 uint64 rt_value = extract_rt_9_8_7_6_5(instruction); 10195 uint64 rs_value = extract_rs_4_3_2_1_0(instruction); 10196 10197 const char *rt = GPR(rt_value, info); 10198 const char *rs = GPR(rs_value, info); 10199 10200 return img_format("MOVE %s, %s", rt, rs); 10201 } 10202 10203 10204 /* 10205 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10206 * 10207 * 3 2 1 10208 * 10987654321098765432109876543210 10209 * 001000 00010001101 10210 * rt ----- 10211 * rs ----- 10212 * rd ----- 10213 */ 10214 static char *MOVN(uint64 instruction, Dis_info *info) 10215 { 10216 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10217 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10218 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10219 10220 const char *rd = GPR(rd_value, info); 10221 const char *rs = GPR(rs_value, info); 10222 const char *rt = GPR(rt_value, info); 10223 10224 return img_format("MOVN %s, %s, %s", rd, rs, rt); 10225 } 10226 10227 10228 /* 10229 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10230 * 10231 * 3 2 1 10232 * 10987654321098765432109876543210 10233 * 001000 00010001101 10234 * rt ----- 10235 * rs ----- 10236 * rd ----- 10237 */ 10238 static char *MOVZ(uint64 instruction, Dis_info *info) 10239 { 10240 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10241 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10242 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10243 10244 const char *rd = GPR(rd_value, info); 10245 const char *rs = GPR(rs_value, info); 10246 const char *rt = GPR(rt_value, info); 10247 10248 return img_format("MOVZ %s, %s, %s", rd, rs, rt); 10249 } 10250 10251 10252 /* 10253 * [DSP] MSUB ac, rs, rt - Multiply word and subtract from accumulator 10254 * 10255 * 3 2 1 10256 * 10987654321098765432109876543210 10257 * 001000 10101010111111 10258 * rt ----- 10259 * rs ----- 10260 * ac -- 10261 */ 10262 static char *MSUB_DSP_(uint64 instruction, Dis_info *info) 10263 { 10264 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10265 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10266 uint64 ac_value = extract_ac_15_14(instruction); 10267 10268 const char *ac = AC(ac_value, info); 10269 const char *rs = GPR(rs_value, info); 10270 const char *rt = GPR(rt_value, info); 10271 10272 return img_format("MSUB %s, %s, %s", ac, rs, rt); 10273 } 10274 10275 10276 /* 10277 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10278 * 10279 * 3 2 1 10280 * 10987654321098765432109876543210 10281 * 001000 00010001101 10282 * rt ----- 10283 * rs ----- 10284 * rd ----- 10285 */ 10286 static char *MSUBF_D(uint64 instruction, Dis_info *info) 10287 { 10288 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 10289 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 10290 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 10291 10292 const char *fd = FPR(fd_value, info); 10293 const char *fs = FPR(fs_value, info); 10294 const char *ft = FPR(ft_value, info); 10295 10296 return img_format("MSUBF.D %s, %s, %s", fd, fs, ft); 10297 } 10298 10299 10300 /* 10301 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10302 * 10303 * 3 2 1 10304 * 10987654321098765432109876543210 10305 * 001000 00010001101 10306 * rt ----- 10307 * rs ----- 10308 * rd ----- 10309 */ 10310 static char *MSUBF_S(uint64 instruction, Dis_info *info) 10311 { 10312 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 10313 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 10314 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 10315 10316 const char *fd = FPR(fd_value, info); 10317 const char *fs = FPR(fs_value, info); 10318 const char *ft = FPR(ft_value, info); 10319 10320 return img_format("MSUBF.S %s, %s, %s", fd, fs, ft); 10321 } 10322 10323 10324 /* 10325 * [DSP] MSUBU ac, rs, rt - Multiply word and add to accumulator 10326 * 10327 * 3 2 1 10328 * 10987654321098765432109876543210 10329 * 001000 11101010111111 10330 * rt ----- 10331 * rs ----- 10332 * ac -- 10333 */ 10334 static char *MSUBU_DSP_(uint64 instruction, Dis_info *info) 10335 { 10336 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10337 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10338 uint64 ac_value = extract_ac_15_14(instruction); 10339 10340 const char *ac = AC(ac_value, info); 10341 const char *rs = GPR(rs_value, info); 10342 const char *rt = GPR(rt_value, info); 10343 10344 return img_format("MSUBU %s, %s, %s", ac, rs, rt); 10345 } 10346 10347 10348 /* 10349 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10350 * 10351 * 3 2 1 10352 * 10987654321098765432109876543210 10353 * 001000 00010001101 10354 * rt ----- 10355 * rs ----- 10356 * rd ----- 10357 */ 10358 static char *MTC0(uint64 instruction, Dis_info *info) 10359 { 10360 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10361 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 10362 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 10363 10364 const char *rt = GPR(rt_value, info); 10365 10366 return img_format("MTC0 %s, CP%" PRIu64 ", 0x%" PRIx64, 10367 rt, c0s_value, sel_value); 10368 } 10369 10370 10371 /* 10372 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10373 * 10374 * 3 2 1 10375 * 10987654321098765432109876543210 10376 * 001000 00010001101 10377 * rt ----- 10378 * rs ----- 10379 * rd ----- 10380 */ 10381 static char *MTC1(uint64 instruction, Dis_info *info) 10382 { 10383 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10384 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 10385 10386 const char *rt = GPR(rt_value, info); 10387 const char *fs = FPR(fs_value, info); 10388 10389 return img_format("MTC1 %s, %s", rt, fs); 10390 } 10391 10392 10393 /* 10394 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10395 * 10396 * 3 2 1 10397 * 10987654321098765432109876543210 10398 * 001000 00010001101 10399 * rt ----- 10400 * rs ----- 10401 * rd ----- 10402 */ 10403 static char *MTC2(uint64 instruction, Dis_info *info) 10404 { 10405 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10406 uint64 cs_value = extract_cs_20_19_18_17_16(instruction); 10407 10408 const char *rt = GPR(rt_value, info); 10409 10410 return img_format("MTC2 %s, CP%" PRIu64, rt, cs_value); 10411 } 10412 10413 10414 /* 10415 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10416 * 10417 * 3 2 1 10418 * 10987654321098765432109876543210 10419 * 001000 00010001101 10420 * rt ----- 10421 * rs ----- 10422 * rd ----- 10423 */ 10424 static char *MTGC0(uint64 instruction, Dis_info *info) 10425 { 10426 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10427 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 10428 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 10429 10430 const char *rt = GPR(rt_value, info); 10431 10432 return img_format("MTGC0 %s, CP%" PRIu64 ", 0x%" PRIx64, 10433 rt, c0s_value, sel_value); 10434 } 10435 10436 10437 /* 10438 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10439 * 10440 * 3 2 1 10441 * 10987654321098765432109876543210 10442 * 001000 00010001101 10443 * rt ----- 10444 * rs ----- 10445 * rd ----- 10446 */ 10447 static char *MTHC0(uint64 instruction, Dis_info *info) 10448 { 10449 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10450 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 10451 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 10452 10453 const char *rt = GPR(rt_value, info); 10454 10455 return img_format("MTHC0 %s, CP%" PRIu64 ", 0x%" PRIx64, 10456 rt, c0s_value, sel_value); 10457 } 10458 10459 10460 /* 10461 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10462 * 10463 * 3 2 1 10464 * 10987654321098765432109876543210 10465 * 001000 00010001101 10466 * rt ----- 10467 * rs ----- 10468 * rd ----- 10469 */ 10470 static char *MTHC1(uint64 instruction, Dis_info *info) 10471 { 10472 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10473 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 10474 10475 const char *rt = GPR(rt_value, info); 10476 const char *fs = FPR(fs_value, info); 10477 10478 return img_format("MTHC1 %s, %s", rt, fs); 10479 } 10480 10481 10482 /* 10483 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10484 * 10485 * 3 2 1 10486 * 10987654321098765432109876543210 10487 * 001000 00010001101 10488 * rt ----- 10489 * rs ----- 10490 * rd ----- 10491 */ 10492 static char *MTHC2(uint64 instruction, Dis_info *info) 10493 { 10494 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10495 uint64 cs_value = extract_cs_20_19_18_17_16(instruction); 10496 10497 const char *rt = GPR(rt_value, info); 10498 10499 return img_format("MTHC2 %s, CP%" PRIu64, rt, cs_value); 10500 } 10501 10502 10503 /* 10504 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10505 * 10506 * 3 2 1 10507 * 10987654321098765432109876543210 10508 * 001000 00010001101 10509 * rt ----- 10510 * rs ----- 10511 * rd ----- 10512 */ 10513 static char *MTHGC0(uint64 instruction, Dis_info *info) 10514 { 10515 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10516 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 10517 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 10518 10519 const char *rt = GPR(rt_value, info); 10520 10521 return img_format("MTHGC0 %s, CP%" PRIu64 ", 0x%" PRIx64, 10522 rt, c0s_value, sel_value); 10523 } 10524 10525 10526 /* 10527 * [DSP] MTHI rs, ac - Move to HI register 10528 * 10529 * 3 2 1 10530 * 10987654321098765432109876543210 10531 * 001000xxxxx 10000001111111 10532 * rs ----- 10533 * ac -- 10534 */ 10535 static char *MTHI_DSP_(uint64 instruction, Dis_info *info) 10536 { 10537 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10538 uint64 ac_value = extract_ac_15_14(instruction); 10539 10540 const char *rs = GPR(rs_value, info); 10541 const char *ac = AC(ac_value, info); 10542 10543 return img_format("MTHI %s, %s", rs, ac); 10544 } 10545 10546 10547 /* 10548 * [DSP] MTHLIP rs, ac - Copy LO to HI and a GPR to LO and increment pos by 32 10549 * 10550 * 3 2 1 10551 * 10987654321098765432109876543210 10552 * 001000xxxxx 00001001111111 10553 * rs ----- 10554 * ac -- 10555 */ 10556 static char *MTHLIP(uint64 instruction, Dis_info *info) 10557 { 10558 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10559 uint64 ac_value = extract_ac_15_14(instruction); 10560 10561 const char *rs = GPR(rs_value, info); 10562 const char *ac = AC(ac_value, info); 10563 10564 return img_format("MTHLIP %s, %s", rs, ac); 10565 } 10566 10567 10568 /* 10569 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10570 * 10571 * 3 2 1 10572 * 10987654321098765432109876543210 10573 * 001000 00010001101 10574 * rt ----- 10575 * rs ----- 10576 * rd ----- 10577 */ 10578 static char *MTHTR(uint64 instruction, Dis_info *info) 10579 { 10580 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10581 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 10582 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 10583 uint64 u_value = extract_u_10(instruction); 10584 10585 const char *rt = GPR(rt_value, info); 10586 10587 return img_format("MTHTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64, 10588 rt, c0s_value, u_value, sel_value); 10589 } 10590 10591 10592 /* 10593 * [DSP] MTLO rs, ac - Move to LO register 10594 * 10595 * 3 2 1 10596 * 10987654321098765432109876543210 10597 * 001000xxxxx 11000001111111 10598 * rs ----- 10599 * ac -- 10600 */ 10601 static char *MTLO_DSP_(uint64 instruction, Dis_info *info) 10602 { 10603 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10604 uint64 ac_value = extract_ac_15_14(instruction); 10605 10606 const char *rs = GPR(rs_value, info); 10607 const char *ac = AC(ac_value, info); 10608 10609 return img_format("MTLO %s, %s", rs, ac); 10610 } 10611 10612 10613 /* 10614 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10615 * 10616 * 3 2 1 10617 * 10987654321098765432109876543210 10618 * 001000 00010001101 10619 * rt ----- 10620 * rs ----- 10621 * rd ----- 10622 */ 10623 static char *MTTR(uint64 instruction, Dis_info *info) 10624 { 10625 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10626 uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction); 10627 uint64 sel_value = extract_sel_15_14_13_12_11(instruction); 10628 uint64 u_value = extract_u_10(instruction); 10629 10630 const char *rt = GPR(rt_value, info); 10631 10632 return img_format("MTTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64, 10633 rt, c0s_value, u_value, sel_value); 10634 } 10635 10636 10637 /* 10638 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10639 * 10640 * 3 2 1 10641 * 10987654321098765432109876543210 10642 * 001000 00010001101 10643 * rt ----- 10644 * rs ----- 10645 * rd ----- 10646 */ 10647 static char *MUH(uint64 instruction, Dis_info *info) 10648 { 10649 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10650 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10651 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10652 10653 const char *rd = GPR(rd_value, info); 10654 const char *rs = GPR(rs_value, info); 10655 const char *rt = GPR(rt_value, info); 10656 10657 return img_format("MUH %s, %s, %s", rd, rs, rt); 10658 } 10659 10660 10661 /* 10662 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10663 * 10664 * 3 2 1 10665 * 10987654321098765432109876543210 10666 * 001000 00010001101 10667 * rt ----- 10668 * rs ----- 10669 * rd ----- 10670 */ 10671 static char *MUHU(uint64 instruction, Dis_info *info) 10672 { 10673 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10674 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10675 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10676 10677 const char *rd = GPR(rd_value, info); 10678 const char *rs = GPR(rs_value, info); 10679 const char *rt = GPR(rt_value, info); 10680 10681 return img_format("MUHU %s, %s, %s", rd, rs, rt); 10682 } 10683 10684 10685 /* 10686 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10687 * 10688 * 3 2 1 10689 * 10987654321098765432109876543210 10690 * 001000 00010001101 10691 * rt ----- 10692 * rs ----- 10693 * rd ----- 10694 */ 10695 static char *MUL_32_(uint64 instruction, Dis_info *info) 10696 { 10697 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10698 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10699 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10700 10701 const char *rd = GPR(rd_value, info); 10702 const char *rs = GPR(rs_value, info); 10703 const char *rt = GPR(rt_value, info); 10704 10705 return img_format("MUL %s, %s, %s", rd, rs, rt); 10706 } 10707 10708 10709 /* 10710 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10711 * 10712 * 3 2 1 10713 * 10987654321098765432109876543210 10714 * 001000 00010001101 10715 * rt ----- 10716 * rs ----- 10717 * rd ----- 10718 */ 10719 static char *MUL_4X4_(uint64 instruction, Dis_info *info) 10720 { 10721 uint64 rt4_value = extract_rt4_9_7_6_5(instruction); 10722 uint64 rs4_value = extract_rs4_4_2_1_0(instruction); 10723 10724 const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info); 10725 const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info); 10726 10727 return img_format("MUL %s, %s", rs4, rt4); 10728 } 10729 10730 10731 /* 10732 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10733 * 10734 * 3 2 1 10735 * 10987654321098765432109876543210 10736 * 001000 00010001101 10737 * rt ----- 10738 * rs ----- 10739 * rd ----- 10740 */ 10741 static char *MUL_D(uint64 instruction, Dis_info *info) 10742 { 10743 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 10744 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 10745 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 10746 10747 const char *fd = FPR(fd_value, info); 10748 const char *fs = FPR(fs_value, info); 10749 const char *ft = FPR(ft_value, info); 10750 10751 return img_format("MUL.D %s, %s, %s", fd, fs, ft); 10752 } 10753 10754 10755 /* 10756 * [DSP] MUL.PH rd, rs, rt - Multiply vector integer half words to same size 10757 * products 10758 * 10759 * 3 2 1 10760 * 10987654321098765432109876543210 10761 * 001000 00000101101 10762 * rt ----- 10763 * rs ----- 10764 * rd ----- 10765 */ 10766 static char *MUL_PH(uint64 instruction, Dis_info *info) 10767 { 10768 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10769 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10770 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10771 10772 const char *rd = GPR(rd_value, info); 10773 const char *rs = GPR(rs_value, info); 10774 const char *rt = GPR(rt_value, info); 10775 10776 return img_format("MUL.PH %s, %s, %s", rd, rs, rt); 10777 } 10778 10779 10780 /* 10781 * [DSP] MUL_S.PH rd, rs, rt - Multiply vector integer half words to same size 10782 * products (saturated) 10783 * 10784 * 3 2 1 10785 * 10987654321098765432109876543210 10786 * 001000 10000101101 10787 * rt ----- 10788 * rs ----- 10789 * rd ----- 10790 */ 10791 static char *MUL_S_PH(uint64 instruction, Dis_info *info) 10792 { 10793 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10794 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10795 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10796 10797 const char *rd = GPR(rd_value, info); 10798 const char *rs = GPR(rs_value, info); 10799 const char *rt = GPR(rt_value, info); 10800 10801 return img_format("MUL_S.PH %s, %s, %s", rd, rs, rt); 10802 } 10803 10804 10805 /* 10806 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 10807 * 10808 * 3 2 1 10809 * 10987654321098765432109876543210 10810 * 001000 00010001101 10811 * rt ----- 10812 * rs ----- 10813 * rd ----- 10814 */ 10815 static char *MUL_S(uint64 instruction, Dis_info *info) 10816 { 10817 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 10818 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 10819 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 10820 10821 const char *fd = FPR(fd_value, info); 10822 const char *fs = FPR(fs_value, info); 10823 const char *ft = FPR(ft_value, info); 10824 10825 return img_format("MUL.S %s, %s, %s", fd, fs, ft); 10826 } 10827 10828 10829 /* 10830 * [DSP] MULEQ_S.W.PHL rd, rs, rt - Multiply vector fractional left halfwords 10831 * to expanded width products 10832 * 10833 * 3 2 1 10834 * 10987654321098765432109876543210 10835 * 001000 x0000100101 10836 * rt ----- 10837 * rs ----- 10838 * rd ----- 10839 */ 10840 static char *MULEQ_S_W_PHL(uint64 instruction, Dis_info *info) 10841 { 10842 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10843 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10844 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10845 10846 const char *rd = GPR(rd_value, info); 10847 const char *rs = GPR(rs_value, info); 10848 const char *rt = GPR(rt_value, info); 10849 10850 return img_format("MULEQ_S.W.PHL %s, %s, %s", rd, rs, rt); 10851 } 10852 10853 10854 /* 10855 * [DSP] MULEQ_S.W.PHR rd, rs, rt - Multiply vector fractional right halfwords 10856 * to expanded width products 10857 * 10858 * 3 2 1 10859 * 10987654321098765432109876543210 10860 * 001000 x0001100101 10861 * rt ----- 10862 * rs ----- 10863 * rd ----- 10864 */ 10865 static char *MULEQ_S_W_PHR(uint64 instruction, Dis_info *info) 10866 { 10867 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10868 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10869 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10870 10871 const char *rd = GPR(rd_value, info); 10872 const char *rs = GPR(rs_value, info); 10873 const char *rt = GPR(rt_value, info); 10874 10875 return img_format("MULEQ_S.W.PHR %s, %s, %s", rd, rs, rt); 10876 } 10877 10878 10879 /* 10880 * [DSP] MULEU_S.PH.QBL rd, rs, rt - Multiply vector fractional left bytes 10881 * by halfwords to halfword products 10882 * 10883 * 3 2 1 10884 * 10987654321098765432109876543210 10885 * 001000 x0010010101 10886 * rt ----- 10887 * rs ----- 10888 * rd ----- 10889 */ 10890 static char *MULEU_S_PH_QBL(uint64 instruction, Dis_info *info) 10891 { 10892 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10893 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10894 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10895 10896 const char *rd = GPR(rd_value, info); 10897 const char *rs = GPR(rs_value, info); 10898 const char *rt = GPR(rt_value, info); 10899 10900 return img_format("MULEU_S.PH.QBL %s, %s, %s", rd, rs, rt); 10901 } 10902 10903 10904 /* 10905 * [DSP] MULEU_S.PH.QBR rd, rs, rt - Multiply vector fractional right bytes 10906 * by halfwords to halfword products 10907 * 10908 * 3 2 1 10909 * 10987654321098765432109876543210 10910 * 001000 x0011010101 10911 * rt ----- 10912 * rs ----- 10913 * rd ----- 10914 */ 10915 static char *MULEU_S_PH_QBR(uint64 instruction, Dis_info *info) 10916 { 10917 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10918 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10919 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10920 10921 const char *rd = GPR(rd_value, info); 10922 const char *rs = GPR(rs_value, info); 10923 const char *rt = GPR(rt_value, info); 10924 10925 return img_format("MULEU_S.PH.QBR %s, %s, %s", rd, rs, rt); 10926 } 10927 10928 10929 /* 10930 * [DSP] MULQ_RS.PH rd, rs, rt - Multiply vector fractional halfwords 10931 * to fractional halfword products 10932 * 10933 * 3 2 1 10934 * 10987654321098765432109876543210 10935 * 001000 x0100010101 10936 * rt ----- 10937 * rs ----- 10938 * rd ----- 10939 */ 10940 static char *MULQ_RS_PH(uint64 instruction, Dis_info *info) 10941 { 10942 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10943 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10944 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10945 10946 const char *rd = GPR(rd_value, info); 10947 const char *rs = GPR(rs_value, info); 10948 const char *rt = GPR(rt_value, info); 10949 10950 return img_format("MULQ_RS.PH %s, %s, %s", rd, rs, rt); 10951 } 10952 10953 10954 /* 10955 * [DSP] MULQ_RS.W rd, rs, rt - Multiply fractional words to same size 10956 * product with saturation and rounding 10957 * 10958 * 3 2 1 10959 * 10987654321098765432109876543210 10960 * 001000 x0110010101 10961 * rt ----- 10962 * rs ----- 10963 * rd ----- 10964 */ 10965 static char *MULQ_RS_W(uint64 instruction, Dis_info *info) 10966 { 10967 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10968 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10969 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10970 10971 const char *rd = GPR(rd_value, info); 10972 const char *rs = GPR(rs_value, info); 10973 const char *rt = GPR(rt_value, info); 10974 10975 return img_format("MULQ_RS.W %s, %s, %s", rd, rs, rt); 10976 } 10977 10978 10979 /* 10980 * [DSP] MULQ_S.PH rd, rs, rt - Multiply fractional halfwords to same size 10981 * products 10982 * 10983 * 3 2 1 10984 * 10987654321098765432109876543210 10985 * 001000 x0101010101 10986 * rt ----- 10987 * rs ----- 10988 * rd ----- 10989 */ 10990 static char *MULQ_S_PH(uint64 instruction, Dis_info *info) 10991 { 10992 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 10993 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 10994 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 10995 10996 const char *rd = GPR(rd_value, info); 10997 const char *rs = GPR(rs_value, info); 10998 const char *rt = GPR(rt_value, info); 10999 11000 return img_format("MULQ_S.PH %s, %s, %s", rd, rs, rt); 11001 } 11002 11003 11004 /* 11005 * [DSP] MULQ_S.W rd, rs, rt - Multiply fractional words to same size product 11006 * with saturation 11007 * 11008 * 3 2 1 11009 * 10987654321098765432109876543210 11010 * 001000 x0111010101 11011 * rt ----- 11012 * rs ----- 11013 * rd ----- 11014 */ 11015 static char *MULQ_S_W(uint64 instruction, Dis_info *info) 11016 { 11017 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11018 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11019 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 11020 11021 const char *rd = GPR(rd_value, info); 11022 const char *rs = GPR(rs_value, info); 11023 const char *rt = GPR(rt_value, info); 11024 11025 return img_format("MULQ_S.W %s, %s, %s", rd, rs, rt); 11026 } 11027 11028 11029 /* 11030 * [DSP] MULSA.W.PH ac, rs, rt - Multiply and subtract vector integer halfword 11031 * elements and accumulate 11032 * 11033 * 3 2 1 11034 * 10987654321098765432109876543210 11035 * 001000 10110010111111 11036 * rt ----- 11037 * rs ----- 11038 * ac -- 11039 */ 11040 static char *MULSA_W_PH(uint64 instruction, Dis_info *info) 11041 { 11042 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11043 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11044 uint64 ac_value = extract_ac_15_14(instruction); 11045 11046 const char *ac = AC(ac_value, info); 11047 const char *rs = GPR(rs_value, info); 11048 const char *rt = GPR(rt_value, info); 11049 11050 return img_format("MULSA.W.PH %s, %s, %s", ac, rs, rt); 11051 } 11052 11053 11054 /* 11055 * [DSP] MULSAQ_S.W.PH ac, rs, rt - Multiply and subtract vector fractional 11056 * halfwords and accumulate 11057 * 11058 * 3 2 1 11059 * 10987654321098765432109876543210 11060 * 001000 11110010111111 11061 * rt ----- 11062 * rs ----- 11063 * ac -- 11064 */ 11065 static char *MULSAQ_S_W_PH(uint64 instruction, Dis_info *info) 11066 { 11067 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11068 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11069 uint64 ac_value = extract_ac_15_14(instruction); 11070 11071 const char *ac = AC(ac_value, info); 11072 const char *rs = GPR(rs_value, info); 11073 const char *rt = GPR(rt_value, info); 11074 11075 return img_format("MULSAQ_S.W.PH %s, %s, %s", ac, rs, rt); 11076 } 11077 11078 11079 /* 11080 * [DSP] MULT ac, rs, rt - Multiply word 11081 * 11082 * 3 2 1 11083 * 10987654321098765432109876543210 11084 * 001000 00110010111111 11085 * rt ----- 11086 * rs ----- 11087 * ac -- 11088 */ 11089 static char *MULT_DSP_(uint64 instruction, Dis_info *info) 11090 { 11091 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11092 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11093 uint64 ac_value = extract_ac_15_14(instruction); 11094 11095 const char *ac = AC(ac_value, info); 11096 const char *rs = GPR(rs_value, info); 11097 const char *rt = GPR(rt_value, info); 11098 11099 return img_format("MULT %s, %s, %s", ac, rs, rt); 11100 } 11101 11102 11103 /* 11104 * [DSP] MULTU ac, rs, rt - Multiply unsigned word 11105 * 11106 * 3 2 1 11107 * 10987654321098765432109876543210 11108 * 001000 01110010111111 11109 * rt ----- 11110 * rs ----- 11111 * ac -- 11112 */ 11113 static char *MULTU_DSP_(uint64 instruction, Dis_info *info) 11114 { 11115 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11116 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11117 uint64 ac_value = extract_ac_15_14(instruction); 11118 11119 const char *ac = AC(ac_value, info); 11120 const char *rs = GPR(rs_value, info); 11121 const char *rt = GPR(rt_value, info); 11122 11123 return img_format("MULTU %s, %s, %s", ac, rs, rt); 11124 } 11125 11126 11127 /* 11128 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 11129 * 11130 * 3 2 1 11131 * 10987654321098765432109876543210 11132 * 001000 00010001101 11133 * rt ----- 11134 * rs ----- 11135 * rd ----- 11136 */ 11137 static char *MULU(uint64 instruction, Dis_info *info) 11138 { 11139 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11140 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11141 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 11142 11143 const char *rd = GPR(rd_value, info); 11144 const char *rs = GPR(rs_value, info); 11145 const char *rt = GPR(rt_value, info); 11146 11147 return img_format("MULU %s, %s, %s", rd, rs, rt); 11148 } 11149 11150 11151 /* 11152 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 11153 * 11154 * 3 2 1 11155 * 10987654321098765432109876543210 11156 * 001000 00010001101 11157 * rt ----- 11158 * rs ----- 11159 * rd ----- 11160 */ 11161 static char *NEG_D(uint64 instruction, Dis_info *info) 11162 { 11163 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 11164 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 11165 11166 const char *ft = FPR(ft_value, info); 11167 const char *fs = FPR(fs_value, info); 11168 11169 return img_format("NEG.D %s, %s", ft, fs); 11170 } 11171 11172 11173 /* 11174 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 11175 * 11176 * 3 2 1 11177 * 10987654321098765432109876543210 11178 * 001000 00010001101 11179 * rt ----- 11180 * rs ----- 11181 * rd ----- 11182 */ 11183 static char *NEG_S(uint64 instruction, Dis_info *info) 11184 { 11185 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 11186 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 11187 11188 const char *ft = FPR(ft_value, info); 11189 const char *fs = FPR(fs_value, info); 11190 11191 return img_format("NEG.S %s, %s", ft, fs); 11192 } 11193 11194 11195 /* 11196 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 11197 * 11198 * 3 2 1 11199 * 10987654321098765432109876543210 11200 * 001000 00010001101 11201 * rt ----- 11202 * rs ----- 11203 * rd ----- 11204 */ 11205 static char *NOP_16_(uint64 instruction, Dis_info *info) 11206 { 11207 (void)instruction; 11208 11209 return g_strdup("NOP "); 11210 } 11211 11212 11213 /* 11214 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 11215 * 11216 * 3 2 1 11217 * 10987654321098765432109876543210 11218 * 001000 00010001101 11219 * rt ----- 11220 * rs ----- 11221 * rd ----- 11222 */ 11223 static char *NOP_32_(uint64 instruction, Dis_info *info) 11224 { 11225 (void)instruction; 11226 11227 return g_strdup("NOP "); 11228 } 11229 11230 11231 /* 11232 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 11233 * 11234 * 3 2 1 11235 * 10987654321098765432109876543210 11236 * 001000 00010001101 11237 * rt ----- 11238 * rs ----- 11239 * rd ----- 11240 */ 11241 static char *NOR(uint64 instruction, Dis_info *info) 11242 { 11243 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11244 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11245 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 11246 11247 const char *rd = GPR(rd_value, info); 11248 const char *rs = GPR(rs_value, info); 11249 const char *rt = GPR(rt_value, info); 11250 11251 return img_format("NOR %s, %s, %s", rd, rs, rt); 11252 } 11253 11254 11255 /* 11256 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 11257 * 11258 * 3 2 1 11259 * 10987654321098765432109876543210 11260 * 001000 00010001101 11261 * rt ----- 11262 * rs ----- 11263 * rd ----- 11264 */ 11265 static char *NOT_16_(uint64 instruction, Dis_info *info) 11266 { 11267 uint64 rt3_value = extract_rt3_9_8_7(instruction); 11268 uint64 rs3_value = extract_rs3_6_5_4(instruction); 11269 11270 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 11271 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 11272 11273 return img_format("NOT %s, %s", rt3, rs3); 11274 } 11275 11276 11277 /* 11278 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 11279 * 11280 * 3 2 1 11281 * 10987654321098765432109876543210 11282 * 001000 00010001101 11283 * rt ----- 11284 * rs ----- 11285 * rd ----- 11286 */ 11287 static char *OR_16_(uint64 instruction, Dis_info *info) 11288 { 11289 uint64 rt3_value = extract_rt3_9_8_7(instruction); 11290 uint64 rs3_value = extract_rs3_6_5_4(instruction); 11291 11292 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 11293 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 11294 11295 return img_format("OR %s, %s", rs3, rt3); 11296 } 11297 11298 11299 /* 11300 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 11301 * 11302 * 3 2 1 11303 * 10987654321098765432109876543210 11304 * 001000 00010001101 11305 * rt ----- 11306 * rs ----- 11307 * rd ----- 11308 */ 11309 static char *OR_32_(uint64 instruction, Dis_info *info) 11310 { 11311 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11312 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11313 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 11314 11315 const char *rd = GPR(rd_value, info); 11316 const char *rs = GPR(rs_value, info); 11317 const char *rt = GPR(rt_value, info); 11318 11319 return img_format("OR %s, %s, %s", rd, rs, rt); 11320 } 11321 11322 11323 /* 11324 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 11325 * 11326 * 3 2 1 11327 * 10987654321098765432109876543210 11328 * 001000 00010001101 11329 * rt ----- 11330 * rs ----- 11331 * rd ----- 11332 */ 11333 static char *ORI(uint64 instruction, Dis_info *info) 11334 { 11335 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11336 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11337 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 11338 11339 const char *rt = GPR(rt_value, info); 11340 const char *rs = GPR(rs_value, info); 11341 11342 return img_format("ORI %s, %s, 0x%" PRIx64, rt, rs, u_value); 11343 } 11344 11345 11346 /* 11347 * [DSP] PACKRL.PH rd, rs, rt - Pack a word using the right halfword from one 11348 * source register and left halfword from another source register 11349 * 11350 * 3 2 1 11351 * 10987654321098765432109876543210 11352 * 001000 00010001101 11353 * rt ----- 11354 * rs ----- 11355 * rd ----- 11356 */ 11357 static char *PACKRL_PH(uint64 instruction, Dis_info *info) 11358 { 11359 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11360 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11361 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 11362 11363 const char *rd = GPR(rd_value, info); 11364 const char *rs = GPR(rs_value, info); 11365 const char *rt = GPR(rt_value, info); 11366 11367 return img_format("PACKRL.PH %s, %s, %s", rd, rs, rt); 11368 } 11369 11370 11371 /* 11372 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 11373 * 11374 * 3 2 1 11375 * 10987654321098765432109876543210 11376 * 001000 00010001101 11377 * rt ----- 11378 * rs ----- 11379 * rd ----- 11380 */ 11381 static char *PAUSE(uint64 instruction, Dis_info *info) 11382 { 11383 (void)instruction; 11384 11385 return g_strdup("PAUSE "); 11386 } 11387 11388 11389 /* 11390 * [DSP] PICK.PH rd, rs, rt - Pick a vector of halfwords based on condition 11391 * code bits 11392 * 11393 * 3 2 1 11394 * 10987654321098765432109876543210 11395 * 001000 00010001101 11396 * rt ----- 11397 * rs ----- 11398 * rd ----- 11399 */ 11400 static char *PICK_PH(uint64 instruction, Dis_info *info) 11401 { 11402 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11403 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11404 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 11405 11406 const char *rd = GPR(rd_value, info); 11407 const char *rs = GPR(rs_value, info); 11408 const char *rt = GPR(rt_value, info); 11409 11410 return img_format("PICK.PH %s, %s, %s", rd, rs, rt); 11411 } 11412 11413 11414 /* 11415 * [DSP] PICK.QB rd, rs, rt - Pick a vector of byte values based on condition 11416 * code bits 11417 * 11418 * 3 2 1 11419 * 10987654321098765432109876543210 11420 * 001000 00010001101 11421 * rt ----- 11422 * rs ----- 11423 * rd ----- 11424 */ 11425 static char *PICK_QB(uint64 instruction, Dis_info *info) 11426 { 11427 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11428 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11429 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 11430 11431 const char *rd = GPR(rd_value, info); 11432 const char *rs = GPR(rs_value, info); 11433 const char *rt = GPR(rt_value, info); 11434 11435 return img_format("PICK.QB %s, %s, %s", rd, rs, rt); 11436 } 11437 11438 11439 /* 11440 * [DSP] PRECEQ.W.PHL rt, rs - Expand the precision of the left-most element 11441 * of a paired halfword 11442 * 11443 * 3 2 1 11444 * 10987654321098765432109876543210 11445 * 001000 00010001101 11446 * rt ----- 11447 * rs ----- 11448 * rd ----- 11449 */ 11450 static char *PRECEQ_W_PHL(uint64 instruction, Dis_info *info) 11451 { 11452 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11453 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11454 11455 const char *rt = GPR(rt_value, info); 11456 const char *rs = GPR(rs_value, info); 11457 11458 return img_format("PRECEQ.W.PHL %s, %s", rt, rs); 11459 } 11460 11461 11462 /* 11463 * [DSP] PRECEQ.W.PHR rt, rs - Expand the precision of the right-most element 11464 * of a paired halfword 11465 * 11466 * 3 2 1 11467 * 10987654321098765432109876543210 11468 * 001000 00010001101 11469 * rt ----- 11470 * rs ----- 11471 * rd ----- 11472 */ 11473 static char *PRECEQ_W_PHR(uint64 instruction, Dis_info *info) 11474 { 11475 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11476 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11477 11478 const char *rt = GPR(rt_value, info); 11479 const char *rs = GPR(rs_value, info); 11480 11481 return img_format("PRECEQ.W.PHR %s, %s", rt, rs); 11482 } 11483 11484 11485 /* 11486 * [DSP] PRECEQU.PH.QBLA rt, rs - Expand the precision of the two 11487 * left-alternate elements of a quad byte vector 11488 * 11489 * 3 2 1 11490 * 10987654321098765432109876543210 11491 * 001000 00010001101 11492 * rt ----- 11493 * rs ----- 11494 * rd ----- 11495 */ 11496 static char *PRECEQU_PH_QBLA(uint64 instruction, Dis_info *info) 11497 { 11498 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11499 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11500 11501 const char *rt = GPR(rt_value, info); 11502 const char *rs = GPR(rs_value, info); 11503 11504 return img_format("PRECEQU.PH.QBLA %s, %s", rt, rs); 11505 } 11506 11507 11508 /* 11509 * [DSP] PRECEQU.PH.QBL rt, rs - Expand the precision of the two left-most 11510 * elements of a quad byte vector 11511 * 11512 * 3 2 1 11513 * 10987654321098765432109876543210 11514 * 001000 00010001101 11515 * rt ----- 11516 * rs ----- 11517 * rd ----- 11518 */ 11519 static char *PRECEQU_PH_QBL(uint64 instruction, Dis_info *info) 11520 { 11521 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11522 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11523 11524 const char *rt = GPR(rt_value, info); 11525 const char *rs = GPR(rs_value, info); 11526 11527 return img_format("PRECEQU.PH.QBL %s, %s", rt, rs); 11528 } 11529 11530 11531 /* 11532 * [DSP] PRECEQU.PH.QBRA rt, rs - Expand the precision of the two 11533 * right-alternate elements of a quad byte vector 11534 * 11535 * 3 2 1 11536 * 10987654321098765432109876543210 11537 * 001000 00010001101 11538 * rt ----- 11539 * rs ----- 11540 * rd ----- 11541 */ 11542 static char *PRECEQU_PH_QBRA(uint64 instruction, Dis_info *info) 11543 { 11544 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11545 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11546 11547 const char *rt = GPR(rt_value, info); 11548 const char *rs = GPR(rs_value, info); 11549 11550 return img_format("PRECEQU.PH.QBRA %s, %s", rt, rs); 11551 } 11552 11553 11554 /* 11555 * [DSP] PRECEQU.PH.QBR rt, rs - Expand the precision of the two right-most 11556 * elements of a quad byte vector 11557 * 11558 * 3 2 1 11559 * 10987654321098765432109876543210 11560 * 001000 00010001101 11561 * rt ----- 11562 * rs ----- 11563 * rd ----- 11564 */ 11565 static char *PRECEQU_PH_QBR(uint64 instruction, Dis_info *info) 11566 { 11567 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11568 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11569 11570 const char *rt = GPR(rt_value, info); 11571 const char *rs = GPR(rs_value, info); 11572 11573 return img_format("PRECEQU.PH.QBR %s, %s", rt, rs); 11574 } 11575 11576 11577 /* 11578 * [DSP] PRECEU.PH.QBLA rt, rs - Expand the precision of the two 11579 * left-alternate elements of a quad byte vector to four unsigned 11580 * halfwords 11581 * 11582 * 3 2 1 11583 * 10987654321098765432109876543210 11584 * 001000 00010001101 11585 * rt ----- 11586 * rs ----- 11587 * rd ----- 11588 */ 11589 static char *PRECEU_PH_QBLA(uint64 instruction, Dis_info *info) 11590 { 11591 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11592 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11593 11594 const char *rt = GPR(rt_value, info); 11595 const char *rs = GPR(rs_value, info); 11596 11597 return img_format("PRECEU.PH.QBLA %s, %s", rt, rs); 11598 } 11599 11600 11601 /* 11602 * [DSP] PRECEU.PH.QBL rt, rs - Expand the precision of the two left-most 11603 * elements of a quad byte vector to form unsigned halfwords 11604 * 11605 * 3 2 1 11606 * 10987654321098765432109876543210 11607 * 001000 00010001101 11608 * rt ----- 11609 * rs ----- 11610 * rd ----- 11611 */ 11612 static char *PRECEU_PH_QBL(uint64 instruction, Dis_info *info) 11613 { 11614 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11615 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11616 11617 const char *rt = GPR(rt_value, info); 11618 const char *rs = GPR(rs_value, info); 11619 11620 return img_format("PRECEU.PH.QBL %s, %s", rt, rs); 11621 } 11622 11623 11624 /* 11625 * [DSP] PRECEU.PH.QBRA rt, rs - Expand the precision of the two 11626 * right-alternate elements of a quad byte vector to form four 11627 * unsigned halfwords 11628 * 11629 * 3 2 1 11630 * 10987654321098765432109876543210 11631 * 001000 00010001101 11632 * rt ----- 11633 * rs ----- 11634 * rd ----- 11635 */ 11636 static char *PRECEU_PH_QBRA(uint64 instruction, Dis_info *info) 11637 { 11638 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11639 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11640 11641 const char *rt = GPR(rt_value, info); 11642 const char *rs = GPR(rs_value, info); 11643 11644 return img_format("PRECEU.PH.QBRA %s, %s", rt, rs); 11645 } 11646 11647 11648 /* 11649 * [DSP] PRECEU.PH.QBR rt, rs - Expand the precision of the two right-most 11650 * elements of a quad byte vector to form unsigned halfwords 11651 * 11652 * 3 2 1 11653 * 10987654321098765432109876543210 11654 * 001000 00010001101 11655 * rt ----- 11656 * rs ----- 11657 * rd ----- 11658 */ 11659 static char *PRECEU_PH_QBR(uint64 instruction, Dis_info *info) 11660 { 11661 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11662 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11663 11664 const char *rt = GPR(rt_value, info); 11665 const char *rs = GPR(rs_value, info); 11666 11667 return img_format("PRECEU.PH.QBR %s, %s", rt, rs); 11668 } 11669 11670 11671 /* 11672 * [DSP] PRECR.QB.PH rd, rs, rt - Reduce the precision of four integer 11673 * halfwords to four bytes 11674 * 11675 * 3 2 1 11676 * 10987654321098765432109876543210 11677 * 001000 x0001101101 11678 * rt ----- 11679 * rs ----- 11680 * rd ----- 11681 */ 11682 static char *PRECR_QB_PH(uint64 instruction, Dis_info *info) 11683 { 11684 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11685 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11686 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 11687 11688 const char *rd = GPR(rd_value, info); 11689 const char *rs = GPR(rs_value, info); 11690 const char *rt = GPR(rt_value, info); 11691 11692 return img_format("PRECR.QB.PH %s, %s, %s", rd, rs, rt); 11693 } 11694 11695 11696 /* 11697 * [DSP] PRECR_SRA.PH.W rt, rs, sa - Reduce the precision of two integer 11698 * words to halfwords after a right shift 11699 * 11700 * 3 2 1 11701 * 10987654321098765432109876543210 11702 * 001000 x1110000101 11703 * rt ----- 11704 * rs ----- 11705 * rd ----- 11706 */ 11707 static char *PRECR_SRA_PH_W(uint64 instruction, Dis_info *info) 11708 { 11709 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11710 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11711 uint64 sa_value = extract_sa_15_14_13_12_11(instruction); 11712 11713 const char *rt = GPR(rt_value, info); 11714 const char *rs = GPR(rs_value, info); 11715 11716 return img_format("PRECR_SRA.PH.W %s, %s, 0x%" PRIx64, rt, rs, sa_value); 11717 } 11718 11719 11720 /* 11721 * [DSP] PRECR_SRA_R.PH.W rt, rs, sa - Reduce the precision of two integer 11722 * words to halfwords after a right shift with rounding 11723 * 11724 * 3 2 1 11725 * 10987654321098765432109876543210 11726 * 001000 x1110000101 11727 * rt ----- 11728 * rs ----- 11729 * rd ----- 11730 */ 11731 static char *PRECR_SRA_R_PH_W(uint64 instruction, Dis_info *info) 11732 { 11733 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11734 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11735 uint64 sa_value = extract_sa_15_14_13_12_11(instruction); 11736 11737 const char *rt = GPR(rt_value, info); 11738 const char *rs = GPR(rs_value, info); 11739 11740 return img_format("PRECR_SRA_R.PH.W %s, %s, 0x%" PRIx64, rt, rs, sa_value); 11741 } 11742 11743 11744 /* 11745 * [DSP] PRECRQ.PH.W rd, rs, rt - Reduce the precision of fractional 11746 * words to fractional halfwords 11747 * 11748 * 3 2 1 11749 * 10987654321098765432109876543210 11750 * 001000 x1110000101 11751 * rt ----- 11752 * rs ----- 11753 * rd ----- 11754 */ 11755 static char *PRECRQ_PH_W(uint64 instruction, Dis_info *info) 11756 { 11757 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11758 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11759 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 11760 11761 const char *rd = GPR(rd_value, info); 11762 const char *rs = GPR(rs_value, info); 11763 const char *rt = GPR(rt_value, info); 11764 11765 return img_format("PRECRQ.PH.W %s, %s, %s", rd, rs, rt); 11766 } 11767 11768 11769 /* 11770 * [DSP] PRECRQ.QB.PH rd, rs, rt - Reduce the precision of four fractional 11771 * halfwords to four bytes 11772 * 11773 * 3 2 1 11774 * 10987654321098765432109876543210 11775 * 001000 x0010101101 11776 * rt ----- 11777 * rs ----- 11778 * rd ----- 11779 */ 11780 static char *PRECRQ_QB_PH(uint64 instruction, Dis_info *info) 11781 { 11782 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11783 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11784 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 11785 11786 const char *rd = GPR(rd_value, info); 11787 const char *rs = GPR(rs_value, info); 11788 const char *rt = GPR(rt_value, info); 11789 11790 return img_format("PRECRQ.QB.PH %s, %s, %s", rd, rs, rt); 11791 } 11792 11793 11794 /* 11795 * [DSP] PRECRQ_RS.PH.W rd, rs, rt - Reduce the precision of fractional 11796 * words to halfwords with rounding and saturation 11797 * 11798 * 3 2 1 11799 * 10987654321098765432109876543210 11800 * 001000 x1110000101 11801 * rt ----- 11802 * rs ----- 11803 * rd ----- 11804 */ 11805 static char *PRECRQ_RS_PH_W(uint64 instruction, Dis_info *info) 11806 { 11807 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11808 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11809 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 11810 11811 const char *rd = GPR(rd_value, info); 11812 const char *rs = GPR(rs_value, info); 11813 const char *rt = GPR(rt_value, info); 11814 11815 return img_format("PRECRQ_RS.PH.W %s, %s, %s", rd, rs, rt); 11816 } 11817 11818 11819 /* 11820 * [DSP] PRECRQU_S.QB.PH rd, rs, rt - Reduce the precision of fractional 11821 * halfwords to unsigned bytes with saturation 11822 * 11823 * 3 2 1 11824 * 10987654321098765432109876543210 11825 * 001000 x1110000101 11826 * rt ----- 11827 * rs ----- 11828 * rd ----- 11829 */ 11830 static char *PRECRQU_S_QB_PH(uint64 instruction, Dis_info *info) 11831 { 11832 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11833 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11834 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 11835 11836 const char *rd = GPR(rd_value, info); 11837 const char *rs = GPR(rs_value, info); 11838 const char *rt = GPR(rt_value, info); 11839 11840 return img_format("PRECRQU_S.QB.PH %s, %s, %s", rd, rs, rt); 11841 } 11842 11843 11844 /* 11845 * 11846 * 11847 * 3 2 1 11848 * 10987654321098765432109876543210 11849 * 001000 x1110000101 11850 * rt ----- 11851 * rs ----- 11852 * rd ----- 11853 */ 11854 static char *PREF_S9_(uint64 instruction, Dis_info *info) 11855 { 11856 uint64 hint_value = extract_hint_25_24_23_22_21(instruction); 11857 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11858 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 11859 11860 const char *rs = GPR(rs_value, info); 11861 11862 return img_format("PREF 0x%" PRIx64 ", %s(%s)", 11863 hint_value, s_value, rs); 11864 } 11865 11866 11867 /* 11868 * 11869 * 11870 * 3 2 1 11871 * 10987654321098765432109876543210 11872 * 001000 x1110000101 11873 * rt ----- 11874 * rs ----- 11875 * rd ----- 11876 */ 11877 static char *PREF_U12_(uint64 instruction, Dis_info *info) 11878 { 11879 uint64 hint_value = extract_hint_25_24_23_22_21(instruction); 11880 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11881 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 11882 11883 const char *rs = GPR(rs_value, info); 11884 11885 return img_format("PREF 0x%" PRIx64 ", 0x%" PRIx64 "(%s)", 11886 hint_value, u_value, rs); 11887 } 11888 11889 11890 /* 11891 * 11892 * 11893 * 3 2 1 11894 * 10987654321098765432109876543210 11895 * 001000 x1110000101 11896 * rt ----- 11897 * rs ----- 11898 * rd ----- 11899 */ 11900 static char *PREFE(uint64 instruction, Dis_info *info) 11901 { 11902 uint64 hint_value = extract_hint_25_24_23_22_21(instruction); 11903 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11904 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 11905 11906 const char *rs = GPR(rs_value, info); 11907 11908 return img_format("PREFE 0x%" PRIx64 ", %s(%s)", hint_value, s_value, rs); 11909 } 11910 11911 11912 /* 11913 * [DSP] PREPEND rt, rs, sa - Right shift and prepend bits to the MSB 11914 * 11915 * 3 2 1 11916 * 10987654321098765432109876543210 11917 * 001000 x1110000101 11918 * rt ----- 11919 * rs ----- 11920 * rd ----- 11921 */ 11922 static char *PREPEND(uint64 instruction, Dis_info *info) 11923 { 11924 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11925 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11926 uint64 sa_value = extract_sa_15_14_13_12_11(instruction); 11927 11928 const char *rt = GPR(rt_value, info); 11929 const char *rs = GPR(rs_value, info); 11930 11931 return img_format("PREPEND %s, %s, 0x%" PRIx64, rt, rs, sa_value); 11932 } 11933 11934 11935 /* 11936 * [DSP] RADDU.W.QB rt, rs - Unsigned reduction add of vector quad bytes 11937 * 11938 * 3 2 1 11939 * 10987654321098765432109876543210 11940 * 001000 1111000100111111 11941 * rt ----- 11942 * rs ----- 11943 */ 11944 static char *RADDU_W_QB(uint64 instruction, Dis_info *info) 11945 { 11946 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11947 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 11948 11949 const char *rt = GPR(rt_value, info); 11950 const char *rs = GPR(rs_value, info); 11951 11952 return img_format("RADDU.W.QB %s, %s", rt, rs); 11953 } 11954 11955 11956 /* 11957 * [DSP] RDDSP rt, mask - Read DSPControl register fields to a GPR 11958 * 11959 * 3 2 1 11960 * 10987654321098765432109876543210 11961 * 001000 00011001111111 11962 * rt ----- 11963 * mask ------- 11964 */ 11965 static char *RDDSP(uint64 instruction, Dis_info *info) 11966 { 11967 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11968 uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction); 11969 11970 const char *rt = GPR(rt_value, info); 11971 11972 return img_format("RDDSP %s, 0x%" PRIx64, rt, mask_value); 11973 } 11974 11975 11976 /* 11977 * 11978 * 11979 * 3 2 1 11980 * 10987654321098765432109876543210 11981 * 001000 x1110000101 11982 * rt ----- 11983 * rs ----- 11984 * rd ----- 11985 */ 11986 static char *RDHWR(uint64 instruction, Dis_info *info) 11987 { 11988 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 11989 uint64 hs_value = extract_hs_20_19_18_17_16(instruction); 11990 uint64 sel_value = extract_sel_13_12_11(instruction); 11991 11992 const char *rt = GPR(rt_value, info); 11993 11994 return img_format("RDHWR %s, CP%" PRIu64 ", 0x%" PRIx64, 11995 rt, hs_value, sel_value); 11996 } 11997 11998 11999 /* 12000 * 12001 * 12002 * 3 2 1 12003 * 10987654321098765432109876543210 12004 * 001000 x1110000101 12005 * rt ----- 12006 * rs ----- 12007 * rd ----- 12008 */ 12009 static char *RDPGPR(uint64 instruction, Dis_info *info) 12010 { 12011 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12012 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12013 12014 const char *rt = GPR(rt_value, info); 12015 const char *rs = GPR(rs_value, info); 12016 12017 return img_format("RDPGPR %s, %s", rt, rs); 12018 } 12019 12020 12021 /* 12022 * 12023 * 12024 * 3 2 1 12025 * 10987654321098765432109876543210 12026 * 001000 x1110000101 12027 * rt ----- 12028 * rs ----- 12029 * rd ----- 12030 */ 12031 static char *RECIP_D(uint64 instruction, Dis_info *info) 12032 { 12033 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 12034 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 12035 12036 const char *ft = FPR(ft_value, info); 12037 const char *fs = FPR(fs_value, info); 12038 12039 return img_format("RECIP.D %s, %s", ft, fs); 12040 } 12041 12042 12043 /* 12044 * 12045 * 12046 * 3 2 1 12047 * 10987654321098765432109876543210 12048 * 001000 x1110000101 12049 * rt ----- 12050 * rs ----- 12051 * rd ----- 12052 */ 12053 static char *RECIP_S(uint64 instruction, Dis_info *info) 12054 { 12055 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 12056 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 12057 12058 const char *ft = FPR(ft_value, info); 12059 const char *fs = FPR(fs_value, info); 12060 12061 return img_format("RECIP.S %s, %s", ft, fs); 12062 } 12063 12064 12065 /* 12066 * [DSP] REPL.PH rd, s - Replicate immediate integer into all vector element 12067 * positions 12068 * 12069 * 3 2 1 12070 * 10987654321098765432109876543210 12071 * 001000 x0000111101 12072 * rt ----- 12073 * s ---------- 12074 */ 12075 static char *REPL_PH(uint64 instruction, Dis_info *info) 12076 { 12077 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12078 int64 s_value = extract_s__se9_20_19_18_17_16_15_14_13_12_11(instruction); 12079 12080 const char *rt = GPR(rt_value, info); 12081 12082 return img_format("REPL.PH %s, %s", rt, s_value); 12083 } 12084 12085 12086 /* 12087 * [DSP] REPL.QB rd, u - Replicate immediate integer into all vector element 12088 * positions 12089 * 12090 * 3 2 1 12091 * 10987654321098765432109876543210 12092 * 001000 x010111111111 12093 * rt ----- 12094 * u -------- 12095 */ 12096 static char *REPL_QB(uint64 instruction, Dis_info *info) 12097 { 12098 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12099 uint64 u_value = extract_u_20_19_18_17_16_15_14_13(instruction); 12100 12101 const char *rt = GPR(rt_value, info); 12102 12103 return img_format("REPL.QB %s, 0x%" PRIx64, rt, u_value); 12104 } 12105 12106 12107 /* 12108 * [DSP] REPLV.PH rt, rs - Replicate a halfword into all vector element 12109 * positions 12110 * 12111 * 3 2 1 12112 * 10987654321098765432109876543210 12113 * 001000 0000001100111111 12114 * rt ----- 12115 * rs ----- 12116 */ 12117 static char *REPLV_PH(uint64 instruction, Dis_info *info) 12118 { 12119 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12120 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12121 12122 const char *rt = GPR(rt_value, info); 12123 const char *rs = GPR(rs_value, info); 12124 12125 return img_format("REPLV.PH %s, %s", rt, rs); 12126 } 12127 12128 12129 /* 12130 * [DSP] REPLV.QB rt, rs - Replicate byte into all vector element positions 12131 * 12132 * 3 2 1 12133 * 10987654321098765432109876543210 12134 * 001000 0001001100111111 12135 * rt ----- 12136 * rs ----- 12137 */ 12138 static char *REPLV_QB(uint64 instruction, Dis_info *info) 12139 { 12140 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12141 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12142 12143 const char *rt = GPR(rt_value, info); 12144 const char *rs = GPR(rs_value, info); 12145 12146 return img_format("REPLV.QB %s, %s", rt, rs); 12147 } 12148 12149 12150 /* 12151 * 12152 * 12153 * 3 2 1 12154 * 10987654321098765432109876543210 12155 * 001000 x1110000101 12156 * rt ----- 12157 * rs ----- 12158 * rd ----- 12159 */ 12160 static char *RESTORE_32_(uint64 instruction, Dis_info *info) 12161 { 12162 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12163 uint64 count_value = extract_count_19_18_17_16(instruction); 12164 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction); 12165 uint64 gp_value = extract_gp_2(instruction); 12166 12167 g_autofree char *save_restore_str = save_restore_list( 12168 rt_value, count_value, gp_value, info); 12169 return img_format("RESTORE 0x%" PRIx64 "%s", u_value, save_restore_str); 12170 } 12171 12172 12173 /* 12174 * 12175 * 12176 * 3 2 1 12177 * 10987654321098765432109876543210 12178 * 001000 x1110000101 12179 * rt ----- 12180 * rs ----- 12181 * rd ----- 12182 */ 12183 static char *RESTORE_JRC_16_(uint64 instruction, Dis_info *info) 12184 { 12185 uint64 rt1_value = extract_rtl_11(instruction); 12186 uint64 u_value = extract_u_7_6_5_4__s4(instruction); 12187 uint64 count_value = extract_count_3_2_1_0(instruction); 12188 12189 g_autofree char *save_restore_str = save_restore_list( 12190 encode_rt1_from_rt(rt1_value), count_value, 0, info); 12191 return img_format("RESTORE.JRC 0x%" PRIx64 "%s", u_value, save_restore_str); 12192 } 12193 12194 12195 /* 12196 * 12197 * 12198 * 3 2 1 12199 * 10987654321098765432109876543210 12200 * 001000 x1110000101 12201 * rt ----- 12202 * rs ----- 12203 * rd ----- 12204 */ 12205 static char *RESTORE_JRC_32_(uint64 instruction, Dis_info *info) 12206 { 12207 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12208 uint64 count_value = extract_count_19_18_17_16(instruction); 12209 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction); 12210 uint64 gp_value = extract_gp_2(instruction); 12211 12212 g_autofree char *save_restore_str = save_restore_list( 12213 rt_value, count_value, gp_value, info); 12214 return img_format("RESTORE.JRC 0x%" PRIx64 "%s", u_value, 12215 save_restore_str); 12216 } 12217 12218 12219 /* 12220 * 12221 * 12222 * 3 2 1 12223 * 10987654321098765432109876543210 12224 * 001000 x1110000101 12225 * rt ----- 12226 * rs ----- 12227 * rd ----- 12228 */ 12229 static char *RESTOREF(uint64 instruction, Dis_info *info) 12230 { 12231 uint64 count_value = extract_count_19_18_17_16(instruction); 12232 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction); 12233 12234 12235 return img_format("RESTOREF 0x%" PRIx64 ", %s", u_value, count_value); 12236 } 12237 12238 12239 /* 12240 * 12241 * 12242 * 3 2 1 12243 * 10987654321098765432109876543210 12244 * 001000 x1110000101 12245 * rt ----- 12246 * rs ----- 12247 * rd ----- 12248 */ 12249 static char *RINT_D(uint64 instruction, Dis_info *info) 12250 { 12251 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 12252 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 12253 12254 const char *ft = FPR(ft_value, info); 12255 const char *fs = FPR(fs_value, info); 12256 12257 return img_format("RINT.D %s, %s", ft, fs); 12258 } 12259 12260 12261 /* 12262 * 12263 * 12264 * 3 2 1 12265 * 10987654321098765432109876543210 12266 * 001000 x1110000101 12267 * rt ----- 12268 * rs ----- 12269 * rd ----- 12270 */ 12271 static char *RINT_S(uint64 instruction, Dis_info *info) 12272 { 12273 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 12274 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 12275 12276 const char *ft = FPR(ft_value, info); 12277 const char *fs = FPR(fs_value, info); 12278 12279 return img_format("RINT.S %s, %s", ft, fs); 12280 } 12281 12282 12283 /* 12284 * 12285 * 12286 * 3 2 1 12287 * 10987654321098765432109876543210 12288 * 001000 x1110000101 12289 * rt ----- 12290 * rs ----- 12291 * rd ----- 12292 */ 12293 static char *ROTR(uint64 instruction, Dis_info *info) 12294 { 12295 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12296 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12297 uint64 shift_value = extract_shift_4_3_2_1_0(instruction); 12298 12299 const char *rt = GPR(rt_value, info); 12300 const char *rs = GPR(rs_value, info); 12301 12302 return img_format("ROTR %s, %s, 0x%" PRIx64, rt, rs, shift_value); 12303 } 12304 12305 12306 /* 12307 * 12308 * 12309 * 3 2 1 12310 * 10987654321098765432109876543210 12311 * 001000 x1110000101 12312 * rt ----- 12313 * rs ----- 12314 * rd ----- 12315 */ 12316 static char *ROTRV(uint64 instruction, Dis_info *info) 12317 { 12318 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12319 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12320 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 12321 12322 const char *rd = GPR(rd_value, info); 12323 const char *rs = GPR(rs_value, info); 12324 const char *rt = GPR(rt_value, info); 12325 12326 return img_format("ROTRV %s, %s, %s", rd, rs, rt); 12327 } 12328 12329 12330 /* 12331 * 12332 * 12333 * 3 2 1 12334 * 10987654321098765432109876543210 12335 * 001000 x1110000101 12336 * rt ----- 12337 * rs ----- 12338 * rd ----- 12339 */ 12340 static char *ROTX(uint64 instruction, Dis_info *info) 12341 { 12342 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12343 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12344 uint64 shiftx_value = extract_shiftx_10_9_8_7__s1(instruction); 12345 uint64 stripe_value = extract_stripe_6(instruction); 12346 uint64 shift_value = extract_shift_4_3_2_1_0(instruction); 12347 12348 const char *rt = GPR(rt_value, info); 12349 const char *rs = GPR(rs_value, info); 12350 12351 return img_format("ROTX %s, %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64, 12352 rt, rs, shift_value, shiftx_value, stripe_value); 12353 } 12354 12355 12356 /* 12357 * 12358 * 12359 * 3 2 1 12360 * 10987654321098765432109876543210 12361 * 001000 x1110000101 12362 * rt ----- 12363 * rs ----- 12364 * rd ----- 12365 */ 12366 static char *ROUND_L_D(uint64 instruction, Dis_info *info) 12367 { 12368 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 12369 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 12370 12371 const char *ft = FPR(ft_value, info); 12372 const char *fs = FPR(fs_value, info); 12373 12374 return img_format("ROUND.L.D %s, %s", ft, fs); 12375 } 12376 12377 12378 /* 12379 * 12380 * 12381 * 3 2 1 12382 * 10987654321098765432109876543210 12383 * 001000 x1110000101 12384 * rt ----- 12385 * rs ----- 12386 * rd ----- 12387 */ 12388 static char *ROUND_L_S(uint64 instruction, Dis_info *info) 12389 { 12390 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 12391 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 12392 12393 const char *ft = FPR(ft_value, info); 12394 const char *fs = FPR(fs_value, info); 12395 12396 return img_format("ROUND.L.S %s, %s", ft, fs); 12397 } 12398 12399 12400 /* 12401 * 12402 * 12403 * 3 2 1 12404 * 10987654321098765432109876543210 12405 * 001000 x1110000101 12406 * rt ----- 12407 * rs ----- 12408 * rd ----- 12409 */ 12410 static char *ROUND_W_D(uint64 instruction, Dis_info *info) 12411 { 12412 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 12413 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 12414 12415 const char *ft = FPR(ft_value, info); 12416 const char *fs = FPR(fs_value, info); 12417 12418 return img_format("ROUND.W.D %s, %s", ft, fs); 12419 } 12420 12421 12422 /* 12423 * 12424 * 12425 * 3 2 1 12426 * 10987654321098765432109876543210 12427 * 001000 x1110000101 12428 * rt ----- 12429 * rs ----- 12430 * rd ----- 12431 */ 12432 static char *ROUND_W_S(uint64 instruction, Dis_info *info) 12433 { 12434 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 12435 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 12436 12437 const char *ft = FPR(ft_value, info); 12438 const char *fs = FPR(fs_value, info); 12439 12440 return img_format("ROUND.W.S %s, %s", ft, fs); 12441 } 12442 12443 12444 /* 12445 * 12446 * 12447 * 3 2 1 12448 * 10987654321098765432109876543210 12449 * 001000 x1110000101 12450 * rt ----- 12451 * rs ----- 12452 * rd ----- 12453 */ 12454 static char *RSQRT_D(uint64 instruction, Dis_info *info) 12455 { 12456 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 12457 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 12458 12459 const char *ft = FPR(ft_value, info); 12460 const char *fs = FPR(fs_value, info); 12461 12462 return img_format("RSQRT.D %s, %s", ft, fs); 12463 } 12464 12465 12466 /* 12467 * 12468 * 12469 * 3 2 1 12470 * 10987654321098765432109876543210 12471 * 001000 x1110000101 12472 * rt ----- 12473 * rs ----- 12474 * rd ----- 12475 */ 12476 static char *RSQRT_S(uint64 instruction, Dis_info *info) 12477 { 12478 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 12479 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 12480 12481 const char *ft = FPR(ft_value, info); 12482 const char *fs = FPR(fs_value, info); 12483 12484 return img_format("RSQRT.S %s, %s", ft, fs); 12485 } 12486 12487 12488 /* 12489 * 12490 * 12491 * 3 2 1 12492 * 10987654321098765432109876543210 12493 * 001000 01001001101 12494 * rt ----- 12495 * rs ----- 12496 * rd ----- 12497 */ 12498 static char *SAVE_16_(uint64 instruction, Dis_info *info) 12499 { 12500 uint64 rt1_value = extract_rtl_11(instruction); 12501 uint64 u_value = extract_u_7_6_5_4__s4(instruction); 12502 uint64 count_value = extract_count_3_2_1_0(instruction); 12503 12504 g_autofree char *save_restore_str = save_restore_list( 12505 encode_rt1_from_rt(rt1_value), count_value, 0, info); 12506 return img_format("SAVE 0x%" PRIx64 "%s", u_value, save_restore_str); 12507 } 12508 12509 12510 /* 12511 * 12512 * 12513 * 3 2 1 12514 * 10987654321098765432109876543210 12515 * 001000 01001001101 12516 * rt ----- 12517 * rs ----- 12518 * rd ----- 12519 */ 12520 static char *SAVE_32_(uint64 instruction, Dis_info *info) 12521 { 12522 uint64 count_value = extract_count_19_18_17_16(instruction); 12523 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12524 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction); 12525 uint64 gp_value = extract_gp_2(instruction); 12526 12527 g_autofree char *save_restore_str = save_restore_list( 12528 rt_value, count_value, gp_value, info); 12529 return img_format("SAVE 0x%" PRIx64 "%s", u_value, save_restore_str); 12530 } 12531 12532 12533 /* 12534 * 12535 * 12536 * 3 2 1 12537 * 10987654321098765432109876543210 12538 * 001000 01001001101 12539 * rt ----- 12540 * rs ----- 12541 * rd ----- 12542 */ 12543 static char *SAVEF(uint64 instruction, Dis_info *info) 12544 { 12545 uint64 count_value = extract_count_19_18_17_16(instruction); 12546 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction); 12547 12548 12549 return img_format("SAVEF 0x%" PRIx64 ", 0x%" PRIx64, u_value, count_value); 12550 } 12551 12552 12553 /* 12554 * 12555 * 12556 * 3 2 1 12557 * 10987654321098765432109876543210 12558 * 001000 01001001101 12559 * rt ----- 12560 * rs ----- 12561 * rd ----- 12562 */ 12563 static char *SB_16_(uint64 instruction, Dis_info *info) 12564 { 12565 uint64 rtz3_value = extract_rtz3_9_8_7(instruction); 12566 uint64 rs3_value = extract_rs3_6_5_4(instruction); 12567 uint64 u_value = extract_u_1_0(instruction); 12568 12569 const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info); 12570 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 12571 12572 return img_format("SB %s, 0x%" PRIx64 "(%s)", rtz3, u_value, rs3); 12573 } 12574 12575 12576 /* 12577 * 12578 * 12579 * 3 2 1 12580 * 10987654321098765432109876543210 12581 * 001000 01001001101 12582 * rt ----- 12583 * rs ----- 12584 * rd ----- 12585 */ 12586 static char *SB_GP_(uint64 instruction, Dis_info *info) 12587 { 12588 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12589 uint64 u_value = extract_u_17_to_0(instruction); 12590 12591 const char *rt = GPR(rt_value, info); 12592 12593 return img_format("SB %s, 0x%" PRIx64 "($%d)", rt, u_value, 28); 12594 } 12595 12596 12597 /* 12598 * 12599 * 12600 * 3 2 1 12601 * 10987654321098765432109876543210 12602 * 001000 01001001101 12603 * rt ----- 12604 * rs ----- 12605 * rd ----- 12606 */ 12607 static char *SB_S9_(uint64 instruction, Dis_info *info) 12608 { 12609 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12610 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12611 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 12612 12613 const char *rt = GPR(rt_value, info); 12614 const char *rs = GPR(rs_value, info); 12615 12616 return img_format("SB %s, %s(%s)", rt, s_value, rs); 12617 } 12618 12619 12620 /* 12621 * 12622 * 12623 * 3 2 1 12624 * 10987654321098765432109876543210 12625 * 001000 01001001101 12626 * rt ----- 12627 * rs ----- 12628 * rd ----- 12629 */ 12630 static char *SB_U12_(uint64 instruction, Dis_info *info) 12631 { 12632 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12633 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12634 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 12635 12636 const char *rt = GPR(rt_value, info); 12637 const char *rs = GPR(rs_value, info); 12638 12639 return img_format("SB %s, 0x%" PRIx64 "(%s)", rt, u_value, rs); 12640 } 12641 12642 12643 /* 12644 * 12645 * 12646 * 3 2 1 12647 * 10987654321098765432109876543210 12648 * 001000 01001001101 12649 * rt ----- 12650 * rs ----- 12651 * rd ----- 12652 */ 12653 static char *SBE(uint64 instruction, Dis_info *info) 12654 { 12655 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12656 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12657 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 12658 12659 const char *rt = GPR(rt_value, info); 12660 const char *rs = GPR(rs_value, info); 12661 12662 return img_format("SBE %s, %s(%s)", rt, s_value, rs); 12663 } 12664 12665 12666 /* 12667 * 12668 * 12669 * 3 2 1 12670 * 10987654321098765432109876543210 12671 * 001000 01001001101 12672 * rt ----- 12673 * rs ----- 12674 * rd ----- 12675 */ 12676 static char *SBX(uint64 instruction, Dis_info *info) 12677 { 12678 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12679 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12680 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 12681 12682 const char *rd = GPR(rd_value, info); 12683 const char *rs = GPR(rs_value, info); 12684 const char *rt = GPR(rt_value, info); 12685 12686 return img_format("SBX %s, %s(%s)", rd, rs, rt); 12687 } 12688 12689 12690 /* 12691 * 12692 * 12693 * 3 2 1 12694 * 10987654321098765432109876543210 12695 * 001000 01001001101 12696 * rt ----- 12697 * rs ----- 12698 * rd ----- 12699 */ 12700 static char *SC(uint64 instruction, Dis_info *info) 12701 { 12702 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12703 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12704 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction); 12705 12706 const char *rt = GPR(rt_value, info); 12707 const char *rs = GPR(rs_value, info); 12708 12709 return img_format("SC %s, %s(%s)", rt, s_value, rs); 12710 } 12711 12712 12713 /* 12714 * 12715 * 12716 * 3 2 1 12717 * 10987654321098765432109876543210 12718 * 001000 01001001101 12719 * rt ----- 12720 * rs ----- 12721 * rd ----- 12722 */ 12723 static char *SCD(uint64 instruction, Dis_info *info) 12724 { 12725 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12726 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12727 int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction); 12728 12729 const char *rt = GPR(rt_value, info); 12730 const char *rs = GPR(rs_value, info); 12731 12732 return img_format("SCD %s, %s(%s)", rt, s_value, rs); 12733 } 12734 12735 12736 /* 12737 * 12738 * 12739 * 3 2 1 12740 * 10987654321098765432109876543210 12741 * 001000 01001001101 12742 * rt ----- 12743 * rs ----- 12744 * rd ----- 12745 */ 12746 static char *SCDP(uint64 instruction, Dis_info *info) 12747 { 12748 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12749 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12750 uint64 ru_value = extract_ru_7_6_5_4_3(instruction); 12751 12752 const char *rt = GPR(rt_value, info); 12753 const char *ru = GPR(ru_value, info); 12754 const char *rs = GPR(rs_value, info); 12755 12756 return img_format("SCDP %s, %s, (%s)", rt, ru, rs); 12757 } 12758 12759 12760 /* 12761 * 12762 * 12763 * 3 2 1 12764 * 10987654321098765432109876543210 12765 * 001000 01001001101 12766 * rt ----- 12767 * rs ----- 12768 * rd ----- 12769 */ 12770 static char *SCE(uint64 instruction, Dis_info *info) 12771 { 12772 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12773 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12774 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction); 12775 12776 const char *rt = GPR(rt_value, info); 12777 const char *rs = GPR(rs_value, info); 12778 12779 return img_format("SCE %s, %s(%s)", rt, s_value, rs); 12780 } 12781 12782 12783 /* 12784 * 12785 * 12786 * 3 2 1 12787 * 10987654321098765432109876543210 12788 * 001000 01001001101 12789 * rt ----- 12790 * rs ----- 12791 * rd ----- 12792 */ 12793 static char *SCWP(uint64 instruction, Dis_info *info) 12794 { 12795 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12796 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12797 uint64 ru_value = extract_ru_7_6_5_4_3(instruction); 12798 12799 const char *rt = GPR(rt_value, info); 12800 const char *ru = GPR(ru_value, info); 12801 const char *rs = GPR(rs_value, info); 12802 12803 return img_format("SCWP %s, %s, (%s)", rt, ru, rs); 12804 } 12805 12806 12807 /* 12808 * 12809 * 12810 * 3 2 1 12811 * 10987654321098765432109876543210 12812 * 001000 01001001101 12813 * rt ----- 12814 * rs ----- 12815 * rd ----- 12816 */ 12817 static char *SCWPE(uint64 instruction, Dis_info *info) 12818 { 12819 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12820 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12821 uint64 ru_value = extract_ru_7_6_5_4_3(instruction); 12822 12823 const char *rt = GPR(rt_value, info); 12824 const char *ru = GPR(ru_value, info); 12825 const char *rs = GPR(rs_value, info); 12826 12827 return img_format("SCWPE %s, %s, (%s)", rt, ru, rs); 12828 } 12829 12830 12831 /* 12832 * 12833 * 12834 * 3 2 1 12835 * 10987654321098765432109876543210 12836 * 001000 01001001101 12837 * rt ----- 12838 * rs ----- 12839 * rd ----- 12840 */ 12841 static char *SD_GP_(uint64 instruction, Dis_info *info) 12842 { 12843 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12844 uint64 u_value = extract_u_20_to_3__s3(instruction); 12845 12846 const char *rt = GPR(rt_value, info); 12847 12848 return img_format("SD %s, 0x%" PRIx64 "($%d)", rt, u_value, 28); 12849 } 12850 12851 12852 /* 12853 * 12854 * 12855 * 3 2 1 12856 * 10987654321098765432109876543210 12857 * 001000 01001001101 12858 * rt ----- 12859 * rs ----- 12860 * rd ----- 12861 */ 12862 static char *SD_S9_(uint64 instruction, Dis_info *info) 12863 { 12864 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12865 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12866 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 12867 12868 const char *rt = GPR(rt_value, info); 12869 const char *rs = GPR(rs_value, info); 12870 12871 return img_format("SD %s, %s(%s)", rt, s_value, rs); 12872 } 12873 12874 12875 /* 12876 * 12877 * 12878 * 3 2 1 12879 * 10987654321098765432109876543210 12880 * 001000 01001001101 12881 * rt ----- 12882 * rs ----- 12883 * rd ----- 12884 */ 12885 static char *SD_U12_(uint64 instruction, Dis_info *info) 12886 { 12887 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 12888 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12889 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 12890 12891 const char *rt = GPR(rt_value, info); 12892 const char *rs = GPR(rs_value, info); 12893 12894 return img_format("SD %s, 0x%" PRIx64 "(%s)", rt, u_value, rs); 12895 } 12896 12897 12898 /* 12899 * 12900 * 12901 * 3 2 1 12902 * 10987654321098765432109876543210 12903 * 001000 01001001101 12904 * rt ----- 12905 * rs ----- 12906 * rd ----- 12907 */ 12908 static char *SDBBP_16_(uint64 instruction, Dis_info *info) 12909 { 12910 uint64 code_value = extract_code_2_1_0(instruction); 12911 12912 12913 return img_format("SDBBP 0x%" PRIx64, code_value); 12914 } 12915 12916 12917 /* 12918 * 12919 * 12920 * 3 2 1 12921 * 10987654321098765432109876543210 12922 * 001000 01001001101 12923 * rt ----- 12924 * rs ----- 12925 * rd ----- 12926 */ 12927 static char *SDBBP_32_(uint64 instruction, Dis_info *info) 12928 { 12929 uint64 code_value = extract_code_18_to_0(instruction); 12930 12931 12932 return img_format("SDBBP 0x%" PRIx64, code_value); 12933 } 12934 12935 12936 /* 12937 * 12938 * 12939 * 3 2 1 12940 * 10987654321098765432109876543210 12941 * 001000 01001001101 12942 * rt ----- 12943 * rs ----- 12944 * rd ----- 12945 */ 12946 static char *SDC1_GP_(uint64 instruction, Dis_info *info) 12947 { 12948 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 12949 uint64 u_value = extract_u_17_to_2__s2(instruction); 12950 12951 const char *ft = FPR(ft_value, info); 12952 12953 return img_format("SDC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28); 12954 } 12955 12956 12957 /* 12958 * 12959 * 12960 * 3 2 1 12961 * 10987654321098765432109876543210 12962 * 001000 01001001101 12963 * rt ----- 12964 * rs ----- 12965 * rd ----- 12966 */ 12967 static char *SDC1_S9_(uint64 instruction, Dis_info *info) 12968 { 12969 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 12970 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12971 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 12972 12973 const char *ft = FPR(ft_value, info); 12974 const char *rs = GPR(rs_value, info); 12975 12976 return img_format("SDC1 %s, %s(%s)", ft, s_value, rs); 12977 } 12978 12979 12980 /* 12981 * 12982 * 12983 * 3 2 1 12984 * 10987654321098765432109876543210 12985 * 001000 01001001101 12986 * rt ----- 12987 * rs ----- 12988 * rd ----- 12989 */ 12990 static char *SDC1_U12_(uint64 instruction, Dis_info *info) 12991 { 12992 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 12993 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 12994 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 12995 12996 const char *ft = FPR(ft_value, info); 12997 const char *rs = GPR(rs_value, info); 12998 12999 return img_format("SDC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs); 13000 } 13001 13002 13003 /* 13004 * 13005 * 13006 * 3 2 1 13007 * 10987654321098765432109876543210 13008 * 001000 01001001101 13009 * rt ----- 13010 * rs ----- 13011 * rd ----- 13012 */ 13013 static char *SDC1X(uint64 instruction, Dis_info *info) 13014 { 13015 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13016 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13017 uint64 ft_value = extract_ft_15_14_13_12_11(instruction); 13018 13019 const char *ft = FPR(ft_value, info); 13020 const char *rs = GPR(rs_value, info); 13021 const char *rt = GPR(rt_value, info); 13022 13023 return img_format("SDC1X %s, %s(%s)", ft, rs, rt); 13024 } 13025 13026 13027 /* 13028 * 13029 * 13030 * 3 2 1 13031 * 10987654321098765432109876543210 13032 * 001000 01001001101 13033 * rt ----- 13034 * rs ----- 13035 * rd ----- 13036 */ 13037 static char *SDC1XS(uint64 instruction, Dis_info *info) 13038 { 13039 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13040 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13041 uint64 ft_value = extract_ft_15_14_13_12_11(instruction); 13042 13043 const char *ft = FPR(ft_value, info); 13044 const char *rs = GPR(rs_value, info); 13045 const char *rt = GPR(rt_value, info); 13046 13047 return img_format("SDC1XS %s, %s(%s)", ft, rs, rt); 13048 } 13049 13050 13051 /* 13052 * 13053 * 13054 * 3 2 1 13055 * 10987654321098765432109876543210 13056 * 001000 01001001101 13057 * rt ----- 13058 * rs ----- 13059 * rd ----- 13060 */ 13061 static char *SDC2(uint64 instruction, Dis_info *info) 13062 { 13063 uint64 cs_value = extract_cs_25_24_23_22_21(instruction); 13064 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13065 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 13066 13067 const char *rs = GPR(rs_value, info); 13068 13069 return img_format("SDC2 CP%" PRIu64 ", %s(%s)", cs_value, s_value, rs); 13070 } 13071 13072 13073 /* 13074 * 13075 * 13076 * 3 2 1 13077 * 10987654321098765432109876543210 13078 * 001000 01001001101 13079 * rt ----- 13080 * rs ----- 13081 * rd ----- 13082 */ 13083 static char *SDM(uint64 instruction, Dis_info *info) 13084 { 13085 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13086 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13087 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 13088 uint64 count3_value = extract_count3_14_13_12(instruction); 13089 13090 const char *rt = GPR(rt_value, info); 13091 const char *rs = GPR(rs_value, info); 13092 uint64 count3 = encode_count3_from_count(count3_value); 13093 13094 return img_format("SDM %s, %s(%s), 0x%" PRIx64, rt, s_value, rs, count3); 13095 } 13096 13097 13098 /* 13099 * 13100 * 13101 * 3 2 1 13102 * 10987654321098765432109876543210 13103 * 001000 01001001101 13104 * rt ----- 13105 * rs ----- 13106 * rd ----- 13107 */ 13108 static char *SDPC_48_(uint64 instruction, Dis_info *info) 13109 { 13110 uint64 rt_value = extract_rt_41_40_39_38_37(instruction); 13111 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction); 13112 13113 const char *rt = GPR(rt_value, info); 13114 g_autofree char *s = ADDRESS(s_value, 6, info); 13115 13116 return img_format("SDPC %s, %s", rt, s); 13117 } 13118 13119 13120 /* 13121 * 13122 * 13123 * 3 2 1 13124 * 10987654321098765432109876543210 13125 * 001000 01001001101 13126 * rt ----- 13127 * rs ----- 13128 * rd ----- 13129 */ 13130 static char *SDXS(uint64 instruction, Dis_info *info) 13131 { 13132 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13133 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13134 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 13135 13136 const char *rd = GPR(rd_value, info); 13137 const char *rs = GPR(rs_value, info); 13138 const char *rt = GPR(rt_value, info); 13139 13140 return img_format("SDXS %s, %s(%s)", rd, rs, rt); 13141 } 13142 13143 13144 /* 13145 * 13146 * 13147 * 3 2 1 13148 * 10987654321098765432109876543210 13149 * 001000 01001001101 13150 * rt ----- 13151 * rs ----- 13152 * rd ----- 13153 */ 13154 static char *SDX(uint64 instruction, Dis_info *info) 13155 { 13156 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13157 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13158 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 13159 13160 const char *rd = GPR(rd_value, info); 13161 const char *rs = GPR(rs_value, info); 13162 const char *rt = GPR(rt_value, info); 13163 13164 return img_format("SDX %s, %s(%s)", rd, rs, rt); 13165 } 13166 13167 13168 /* 13169 * 13170 * 13171 * 3 2 1 13172 * 10987654321098765432109876543210 13173 * 001000 01001001101 13174 * rt ----- 13175 * rs ----- 13176 * rd ----- 13177 */ 13178 static char *SEB(uint64 instruction, Dis_info *info) 13179 { 13180 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13181 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13182 13183 const char *rt = GPR(rt_value, info); 13184 const char *rs = GPR(rs_value, info); 13185 13186 return img_format("SEB %s, %s", rt, rs); 13187 } 13188 13189 13190 /* 13191 * 13192 * 13193 * 3 2 1 13194 * 10987654321098765432109876543210 13195 * 001000 01001001101 13196 * rt ----- 13197 * rs ----- 13198 * rd ----- 13199 */ 13200 static char *SEH(uint64 instruction, Dis_info *info) 13201 { 13202 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13203 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13204 13205 const char *rt = GPR(rt_value, info); 13206 const char *rs = GPR(rs_value, info); 13207 13208 return img_format("SEH %s, %s", rt, rs); 13209 } 13210 13211 13212 /* 13213 * 13214 * 13215 * 3 2 1 13216 * 10987654321098765432109876543210 13217 * 001000 01001001101 13218 * rt ----- 13219 * rs ----- 13220 * rd ----- 13221 */ 13222 static char *SEL_D(uint64 instruction, Dis_info *info) 13223 { 13224 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 13225 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 13226 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 13227 13228 const char *fd = FPR(fd_value, info); 13229 const char *fs = FPR(fs_value, info); 13230 const char *ft = FPR(ft_value, info); 13231 13232 return img_format("SEL.D %s, %s, %s", fd, fs, ft); 13233 } 13234 13235 13236 /* 13237 * 13238 * 13239 * 3 2 1 13240 * 10987654321098765432109876543210 13241 * 001000 01001001101 13242 * rt ----- 13243 * rs ----- 13244 * rd ----- 13245 */ 13246 static char *SEL_S(uint64 instruction, Dis_info *info) 13247 { 13248 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 13249 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 13250 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 13251 13252 const char *fd = FPR(fd_value, info); 13253 const char *fs = FPR(fs_value, info); 13254 const char *ft = FPR(ft_value, info); 13255 13256 return img_format("SEL.S %s, %s, %s", fd, fs, ft); 13257 } 13258 13259 13260 /* 13261 * 13262 * 13263 * 3 2 1 13264 * 10987654321098765432109876543210 13265 * 001000 01001001101 13266 * rt ----- 13267 * rs ----- 13268 * rd ----- 13269 */ 13270 static char *SELEQZ_D(uint64 instruction, Dis_info *info) 13271 { 13272 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 13273 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 13274 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 13275 13276 const char *fd = FPR(fd_value, info); 13277 const char *fs = FPR(fs_value, info); 13278 const char *ft = FPR(ft_value, info); 13279 13280 return img_format("SELEQZ.D %s, %s, %s", fd, fs, ft); 13281 } 13282 13283 13284 /* 13285 * 13286 * 13287 * 3 2 1 13288 * 10987654321098765432109876543210 13289 * 001000 01001001101 13290 * rt ----- 13291 * rs ----- 13292 * rd ----- 13293 */ 13294 static char *SELEQZ_S(uint64 instruction, Dis_info *info) 13295 { 13296 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 13297 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 13298 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 13299 13300 const char *fd = FPR(fd_value, info); 13301 const char *fs = FPR(fs_value, info); 13302 const char *ft = FPR(ft_value, info); 13303 13304 return img_format("SELEQZ.S %s, %s, %s", fd, fs, ft); 13305 } 13306 13307 13308 /* 13309 * 13310 * 13311 * 3 2 1 13312 * 10987654321098765432109876543210 13313 * 001000 01001001101 13314 * rt ----- 13315 * rs ----- 13316 * rd ----- 13317 */ 13318 static char *SELNEZ_D(uint64 instruction, Dis_info *info) 13319 { 13320 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 13321 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 13322 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 13323 13324 const char *fd = FPR(fd_value, info); 13325 const char *fs = FPR(fs_value, info); 13326 const char *ft = FPR(ft_value, info); 13327 13328 return img_format("SELNEZ.D %s, %s, %s", fd, fs, ft); 13329 } 13330 13331 13332 /* 13333 * 13334 * 13335 * 3 2 1 13336 * 10987654321098765432109876543210 13337 * 001000 01001001101 13338 * rt ----- 13339 * rs ----- 13340 * rd ----- 13341 */ 13342 static char *SELNEZ_S(uint64 instruction, Dis_info *info) 13343 { 13344 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 13345 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 13346 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 13347 13348 const char *fd = FPR(fd_value, info); 13349 const char *fs = FPR(fs_value, info); 13350 const char *ft = FPR(ft_value, info); 13351 13352 return img_format("SELNEZ.S %s, %s, %s", fd, fs, ft); 13353 } 13354 13355 13356 /* 13357 * 13358 * 13359 * 3 2 1 13360 * 10987654321098765432109876543210 13361 * 001000 01001001101 13362 * rt ----- 13363 * rs ----- 13364 * rd ----- 13365 */ 13366 static char *SEQI(uint64 instruction, Dis_info *info) 13367 { 13368 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13369 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13370 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 13371 13372 const char *rt = GPR(rt_value, info); 13373 const char *rs = GPR(rs_value, info); 13374 13375 return img_format("SEQI %s, %s, 0x%" PRIx64, rt, rs, u_value); 13376 } 13377 13378 13379 /* 13380 * 13381 * 13382 * 3 2 1 13383 * 10987654321098765432109876543210 13384 * 001000 01001001101 13385 * rt ----- 13386 * rs ----- 13387 * rd ----- 13388 */ 13389 static char *SH_16_(uint64 instruction, Dis_info *info) 13390 { 13391 uint64 rtz3_value = extract_rtz3_9_8_7(instruction); 13392 uint64 rs3_value = extract_rs3_6_5_4(instruction); 13393 uint64 u_value = extract_u_2_1__s1(instruction); 13394 13395 const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info); 13396 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 13397 13398 return img_format("SH %s, 0x%" PRIx64 "(%s)", rtz3, u_value, rs3); 13399 } 13400 13401 13402 /* 13403 * 13404 * 13405 * 3 2 1 13406 * 10987654321098765432109876543210 13407 * 001000 01001001101 13408 * rt ----- 13409 * rs ----- 13410 * rd ----- 13411 */ 13412 static char *SH_GP_(uint64 instruction, Dis_info *info) 13413 { 13414 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13415 uint64 u_value = extract_u_17_to_1__s1(instruction); 13416 13417 const char *rt = GPR(rt_value, info); 13418 13419 return img_format("SH %s, 0x%" PRIx64 "($%d)", rt, u_value, 28); 13420 } 13421 13422 13423 /* 13424 * 13425 * 13426 * 3 2 1 13427 * 10987654321098765432109876543210 13428 * 001000 01001001101 13429 * rt ----- 13430 * rs ----- 13431 * rd ----- 13432 */ 13433 static char *SH_S9_(uint64 instruction, Dis_info *info) 13434 { 13435 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13436 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13437 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 13438 13439 const char *rt = GPR(rt_value, info); 13440 const char *rs = GPR(rs_value, info); 13441 13442 return img_format("SH %s, %" PRId64 "(%s)", rt, s_value, rs); 13443 } 13444 13445 13446 /* 13447 * 13448 * 13449 * 3 2 1 13450 * 10987654321098765432109876543210 13451 * 001000 01001001101 13452 * rt ----- 13453 * rs ----- 13454 * rd ----- 13455 */ 13456 static char *SH_U12_(uint64 instruction, Dis_info *info) 13457 { 13458 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13459 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13460 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 13461 13462 const char *rt = GPR(rt_value, info); 13463 const char *rs = GPR(rs_value, info); 13464 13465 return img_format("SH %s, 0x%" PRIx64 "(%s)", rt, u_value, rs); 13466 } 13467 13468 13469 /* 13470 * 13471 * 13472 * 3 2 1 13473 * 10987654321098765432109876543210 13474 * 001000 01001001101 13475 * rt ----- 13476 * rs ----- 13477 * rd ----- 13478 */ 13479 static char *SHE(uint64 instruction, Dis_info *info) 13480 { 13481 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13482 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13483 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 13484 13485 const char *rt = GPR(rt_value, info); 13486 const char *rs = GPR(rs_value, info); 13487 13488 return img_format("SHE %s, %" PRId64 "(%s)", rt, s_value, rs); 13489 } 13490 13491 13492 /* 13493 * [DSP] SHILO ac, shift - Shift an accumulator value leaving the result in 13494 * the same accumulator 13495 * 13496 * 3 2 1 13497 * 10987654321098765432109876543210 13498 * 001000xxxx xxxx0000011101 13499 * shift ------ 13500 * ac -- 13501 */ 13502 static char *SHILO(uint64 instruction, Dis_info *info) 13503 { 13504 int64 shift_value = extract_shift__se5_21_20_19_18_17_16(instruction); 13505 uint64 ac_value = extract_ac_15_14(instruction); 13506 13507 const char *ac = AC(ac_value, info); 13508 13509 return img_format("SHILO %s, 0x%" PRIx64, ac, shift_value); 13510 } 13511 13512 13513 /* 13514 * [DSP] SHILOV ac, rs - Variable shift of accumulator value leaving the result 13515 * in the same accumulator 13516 * 13517 * 3 2 1 13518 * 10987654321098765432109876543210 13519 * 001000xxxxx 01001001111111 13520 * rs ----- 13521 * ac -- 13522 */ 13523 static char *SHILOV(uint64 instruction, Dis_info *info) 13524 { 13525 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13526 uint64 ac_value = extract_ac_15_14(instruction); 13527 13528 const char *rs = GPR(rs_value, info); 13529 const char *ac = AC(ac_value, info); 13530 13531 return img_format("SHILOV %s, %s", ac, rs); 13532 } 13533 13534 13535 /* 13536 * [DSP] SHLL.PH rt, rs, sa - Shift left logical vector pair halfwords 13537 * 13538 * 3 2 1 13539 * 10987654321098765432109876543210 13540 * 001000 001110110101 13541 * rt ----- 13542 * rs ----- 13543 * sa ---- 13544 */ 13545 static char *SHLL_PH(uint64 instruction, Dis_info *info) 13546 { 13547 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13548 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13549 uint64 sa_value = extract_sa_15_14_13_12(instruction); 13550 13551 const char *rt = GPR(rt_value, info); 13552 const char *rs = GPR(rs_value, info); 13553 13554 return img_format("SHLL.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value); 13555 } 13556 13557 13558 /* 13559 * [DSP] SHLL.QB rt, rs, sa - Shift left logical vector quad bytes 13560 * 13561 * 3 2 1 13562 * 10987654321098765432109876543210 13563 * 001000 0100001111111 13564 * rt ----- 13565 * rs ----- 13566 * sa --- 13567 */ 13568 static char *SHLL_QB(uint64 instruction, Dis_info *info) 13569 { 13570 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13571 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13572 uint64 sa_value = extract_sa_15_14_13(instruction); 13573 13574 const char *rt = GPR(rt_value, info); 13575 const char *rs = GPR(rs_value, info); 13576 13577 return img_format("SHLL.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value); 13578 } 13579 13580 13581 /* 13582 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical vector pair halfwords 13583 * with saturation 13584 * 13585 * 3 2 1 13586 * 10987654321098765432109876543210 13587 * 001000 001110110101 13588 * rt ----- 13589 * rs ----- 13590 * sa ---- 13591 */ 13592 static char *SHLL_S_PH(uint64 instruction, Dis_info *info) 13593 { 13594 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13595 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13596 uint64 sa_value = extract_sa_15_14_13_12(instruction); 13597 13598 const char *rt = GPR(rt_value, info); 13599 const char *rs = GPR(rs_value, info); 13600 13601 return img_format("SHLL_S.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value); 13602 } 13603 13604 13605 /* 13606 * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical word with saturation 13607 * 13608 * 3 2 1 13609 * 10987654321098765432109876543210 13610 * 001000 x1111110101 13611 * rt ----- 13612 * rs ----- 13613 * sa ----- 13614 */ 13615 static char *SHLL_S_W(uint64 instruction, Dis_info *info) 13616 { 13617 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13618 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13619 uint64 sa_value = extract_sa_15_14_13_12_11(instruction); 13620 13621 const char *rt = GPR(rt_value, info); 13622 const char *rs = GPR(rs_value, info); 13623 13624 return img_format("SHLL_S.W %s, %s, 0x%" PRIx64, rt, rs, sa_value); 13625 } 13626 13627 13628 /* 13629 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair 13630 * halfwords 13631 * 13632 * 3 2 1 13633 * 10987654321098765432109876543210 13634 * 001000 01110001101 13635 * rt ----- 13636 * rs ----- 13637 * rd ----- 13638 */ 13639 static char *SHLLV_PH(uint64 instruction, Dis_info *info) 13640 { 13641 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13642 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13643 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 13644 13645 const char *rd = GPR(rd_value, info); 13646 const char *rt = GPR(rt_value, info); 13647 const char *rs = GPR(rs_value, info); 13648 13649 return img_format("SHLLV.PH %s, %s, %s", rd, rt, rs); 13650 } 13651 13652 13653 /* 13654 * [DSP] SHLLV_S.QB rd, rt, rs - Shift left logical variable vector quad bytes 13655 * 13656 * 3 2 1 13657 * 10987654321098765432109876543210 13658 * 001000 x1110010101 13659 * rt ----- 13660 * rs ----- 13661 * rd ----- 13662 */ 13663 static char *SHLLV_QB(uint64 instruction, Dis_info *info) 13664 { 13665 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13666 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13667 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 13668 13669 const char *rd = GPR(rd_value, info); 13670 const char *rt = GPR(rt_value, info); 13671 const char *rs = GPR(rs_value, info); 13672 13673 return img_format("SHLLV.QB %s, %s, %s", rd, rt, rs); 13674 } 13675 13676 13677 /* 13678 * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair 13679 * halfwords with saturation 13680 * 13681 * 3 2 1 13682 * 10987654321098765432109876543210 13683 * 001000 11110001101 13684 * rt ----- 13685 * rs ----- 13686 * rd ----- 13687 */ 13688 static char *SHLLV_S_PH(uint64 instruction, Dis_info *info) 13689 { 13690 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13691 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13692 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 13693 13694 const char *rd = GPR(rd_value, info); 13695 const char *rt = GPR(rt_value, info); 13696 const char *rs = GPR(rs_value, info); 13697 13698 return img_format("SHLLV_S.PH %s, %s, %s", rd, rt, rs); 13699 } 13700 13701 13702 /* 13703 * [DSP] SHLLV_S.W rd, rt, rs - Shift left logical variable vector word 13704 * 13705 * 3 2 1 13706 * 10987654321098765432109876543210 13707 * 001000 x1111010101 13708 * rt ----- 13709 * rs ----- 13710 * rd ----- 13711 */ 13712 static char *SHLLV_S_W(uint64 instruction, Dis_info *info) 13713 { 13714 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13715 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13716 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 13717 13718 const char *rd = GPR(rd_value, info); 13719 const char *rt = GPR(rt_value, info); 13720 const char *rs = GPR(rs_value, info); 13721 13722 return img_format("SHLLV_S.W %s, %s, %s", rd, rt, rs); 13723 } 13724 13725 13726 /* 13727 * 13728 * 13729 * 3 2 1 13730 * 10987654321098765432109876543210 13731 * 001000 01001001101 13732 * rt ----- 13733 * rs ----- 13734 * rd ----- 13735 */ 13736 static char *SHRA_PH(uint64 instruction, Dis_info *info) 13737 { 13738 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13739 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13740 uint64 sa_value = extract_sa_15_14_13_12(instruction); 13741 13742 const char *rt = GPR(rt_value, info); 13743 const char *rs = GPR(rs_value, info); 13744 13745 return img_format("SHRA.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value); 13746 } 13747 13748 13749 /* 13750 * 13751 * 13752 * 3 2 1 13753 * 10987654321098765432109876543210 13754 * 001000 01001001101 13755 * rt ----- 13756 * rs ----- 13757 * rd ----- 13758 */ 13759 static char *SHRA_QB(uint64 instruction, Dis_info *info) 13760 { 13761 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13762 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13763 uint64 sa_value = extract_sa_15_14_13(instruction); 13764 13765 const char *rt = GPR(rt_value, info); 13766 const char *rs = GPR(rs_value, info); 13767 13768 return img_format("SHRA.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value); 13769 } 13770 13771 13772 /* 13773 * 13774 * 13775 * 3 2 1 13776 * 10987654321098765432109876543210 13777 * 001000 01001001101 13778 * rt ----- 13779 * rs ----- 13780 * rd ----- 13781 */ 13782 static char *SHRA_R_PH(uint64 instruction, Dis_info *info) 13783 { 13784 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13785 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13786 uint64 sa_value = extract_sa_15_14_13_12(instruction); 13787 13788 const char *rt = GPR(rt_value, info); 13789 const char *rs = GPR(rs_value, info); 13790 13791 return img_format("SHRA_R.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value); 13792 } 13793 13794 13795 /* 13796 * 13797 * 13798 * 3 2 1 13799 * 10987654321098765432109876543210 13800 * 001000 01001001101 13801 * rt ----- 13802 * rs ----- 13803 * rd ----- 13804 */ 13805 static char *SHRA_R_QB(uint64 instruction, Dis_info *info) 13806 { 13807 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13808 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13809 uint64 sa_value = extract_sa_15_14_13(instruction); 13810 13811 const char *rt = GPR(rt_value, info); 13812 const char *rs = GPR(rs_value, info); 13813 13814 return img_format("SHRA_R.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value); 13815 } 13816 13817 13818 /* 13819 * 13820 * 13821 * 3 2 1 13822 * 10987654321098765432109876543210 13823 * 001000 01001001101 13824 * rt ----- 13825 * rs ----- 13826 * rd ----- 13827 */ 13828 static char *SHRA_R_W(uint64 instruction, Dis_info *info) 13829 { 13830 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13831 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13832 uint64 sa_value = extract_sa_15_14_13_12_11(instruction); 13833 13834 const char *rt = GPR(rt_value, info); 13835 const char *rs = GPR(rs_value, info); 13836 13837 return img_format("SHRA_R.W %s, %s, 0x%" PRIx64, rt, rs, sa_value); 13838 } 13839 13840 13841 /* 13842 * 13843 * 13844 * 3 2 1 13845 * 10987654321098765432109876543210 13846 * 001000 01001001101 13847 * rt ----- 13848 * rs ----- 13849 * rd ----- 13850 */ 13851 static char *SHRAV_PH(uint64 instruction, Dis_info *info) 13852 { 13853 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13854 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13855 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 13856 13857 const char *rd = GPR(rd_value, info); 13858 const char *rt = GPR(rt_value, info); 13859 const char *rs = GPR(rs_value, info); 13860 13861 return img_format("SHRAV.PH %s, %s, %s", rd, rt, rs); 13862 } 13863 13864 13865 /* 13866 * 13867 * 13868 * 3 2 1 13869 * 10987654321098765432109876543210 13870 * 001000 01001001101 13871 * rt ----- 13872 * rs ----- 13873 * rd ----- 13874 */ 13875 static char *SHRAV_QB(uint64 instruction, Dis_info *info) 13876 { 13877 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13878 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13879 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 13880 13881 const char *rd = GPR(rd_value, info); 13882 const char *rt = GPR(rt_value, info); 13883 const char *rs = GPR(rs_value, info); 13884 13885 return img_format("SHRAV.QB %s, %s, %s", rd, rt, rs); 13886 } 13887 13888 13889 /* 13890 * 13891 * 13892 * 3 2 1 13893 * 10987654321098765432109876543210 13894 * 001000 01001001101 13895 * rt ----- 13896 * rs ----- 13897 * rd ----- 13898 */ 13899 static char *SHRAV_R_PH(uint64 instruction, Dis_info *info) 13900 { 13901 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13902 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13903 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 13904 13905 const char *rd = GPR(rd_value, info); 13906 const char *rt = GPR(rt_value, info); 13907 const char *rs = GPR(rs_value, info); 13908 13909 return img_format("SHRAV_R.PH %s, %s, %s", rd, rt, rs); 13910 } 13911 13912 13913 /* 13914 * 13915 * 13916 * 3 2 1 13917 * 10987654321098765432109876543210 13918 * 001000 01001001101 13919 * rt ----- 13920 * rs ----- 13921 * rd ----- 13922 */ 13923 static char *SHRAV_R_QB(uint64 instruction, Dis_info *info) 13924 { 13925 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13926 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13927 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 13928 13929 const char *rd = GPR(rd_value, info); 13930 const char *rt = GPR(rt_value, info); 13931 const char *rs = GPR(rs_value, info); 13932 13933 return img_format("SHRAV_R.QB %s, %s, %s", rd, rt, rs); 13934 } 13935 13936 13937 /* 13938 * 13939 * 13940 * 3 2 1 13941 * 10987654321098765432109876543210 13942 * 001000 01001001101 13943 * rt ----- 13944 * rs ----- 13945 * rd ----- 13946 */ 13947 static char *SHRAV_R_W(uint64 instruction, Dis_info *info) 13948 { 13949 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13950 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13951 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 13952 13953 const char *rd = GPR(rd_value, info); 13954 const char *rt = GPR(rt_value, info); 13955 const char *rs = GPR(rs_value, info); 13956 13957 return img_format("SHRAV_R.W %s, %s, %s", rd, rt, rs); 13958 } 13959 13960 13961 /* 13962 * [DSP] SHRL.PH rt, rs, sa - Shift right logical two halfwords 13963 * 13964 * 3 2 1 13965 * 10987654321098765432109876543210 13966 * 001000 001111111111 13967 * rt ----- 13968 * rs ----- 13969 * sa ---- 13970 */ 13971 static char *SHRL_PH(uint64 instruction, Dis_info *info) 13972 { 13973 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13974 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13975 uint64 sa_value = extract_sa_15_14_13_12(instruction); 13976 13977 const char *rt = GPR(rt_value, info); 13978 const char *rs = GPR(rs_value, info); 13979 13980 return img_format("SHRL.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value); 13981 } 13982 13983 13984 /* 13985 * [DSP] SHRL.QB rt, rs, sa - Shift right logical vector quad bytes 13986 * 13987 * 3 2 1 13988 * 10987654321098765432109876543210 13989 * 001000 1100001111111 13990 * rt ----- 13991 * rs ----- 13992 * sa --- 13993 */ 13994 static char *SHRL_QB(uint64 instruction, Dis_info *info) 13995 { 13996 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 13997 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 13998 uint64 sa_value = extract_sa_15_14_13(instruction); 13999 14000 const char *rt = GPR(rt_value, info); 14001 const char *rs = GPR(rs_value, info); 14002 14003 return img_format("SHRL.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value); 14004 } 14005 14006 14007 /* 14008 * [DSP] SHLLV.PH rd, rt, rs - Shift right logical variable vector pair of 14009 * halfwords 14010 * 14011 * 3 2 1 14012 * 10987654321098765432109876543210 14013 * 001000 x1100010101 14014 * rt ----- 14015 * rs ----- 14016 * rd ----- 14017 */ 14018 static char *SHRLV_PH(uint64 instruction, Dis_info *info) 14019 { 14020 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14021 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14022 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14023 14024 const char *rd = GPR(rd_value, info); 14025 const char *rt = GPR(rt_value, info); 14026 const char *rs = GPR(rs_value, info); 14027 14028 return img_format("SHRLV.PH %s, %s, %s", rd, rt, rs); 14029 } 14030 14031 14032 /* 14033 * [DSP] SHLLV.QB rd, rt, rs - Shift right logical variable vector quad bytes 14034 * 14035 * 3 2 1 14036 * 10987654321098765432109876543210 14037 * 001000 x1101010101 14038 * rt ----- 14039 * rs ----- 14040 * rd ----- 14041 */ 14042 static char *SHRLV_QB(uint64 instruction, Dis_info *info) 14043 { 14044 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14045 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14046 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14047 14048 const char *rd = GPR(rd_value, info); 14049 const char *rt = GPR(rt_value, info); 14050 const char *rs = GPR(rs_value, info); 14051 14052 return img_format("SHRLV.QB %s, %s, %s", rd, rt, rs); 14053 } 14054 14055 14056 /* 14057 * 14058 * 14059 * 3 2 1 14060 * 10987654321098765432109876543210 14061 * 001000 01001001101 14062 * rt ----- 14063 * rs ----- 14064 * rd ----- 14065 */ 14066 static char *SHX(uint64 instruction, Dis_info *info) 14067 { 14068 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14069 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14070 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14071 14072 const char *rd = GPR(rd_value, info); 14073 const char *rs = GPR(rs_value, info); 14074 const char *rt = GPR(rt_value, info); 14075 14076 return img_format("SHX %s, %s(%s)", rd, rs, rt); 14077 } 14078 14079 14080 /* 14081 * 14082 * 14083 * 3 2 1 14084 * 10987654321098765432109876543210 14085 * 001000 01001001101 14086 * rt ----- 14087 * rs ----- 14088 * rd ----- 14089 */ 14090 static char *SHXS(uint64 instruction, Dis_info *info) 14091 { 14092 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14093 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14094 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14095 14096 const char *rd = GPR(rd_value, info); 14097 const char *rs = GPR(rs_value, info); 14098 const char *rt = GPR(rt_value, info); 14099 14100 return img_format("SHXS %s, %s(%s)", rd, rs, rt); 14101 } 14102 14103 14104 /* 14105 * 14106 * 14107 * 3 2 1 14108 * 10987654321098765432109876543210 14109 * 001000 01001001101 14110 * rt ----- 14111 * rs ----- 14112 * rd ----- 14113 */ 14114 static char *SIGRIE(uint64 instruction, Dis_info *info) 14115 { 14116 uint64 code_value = extract_code_18_to_0(instruction); 14117 14118 14119 return img_format("SIGRIE 0x%" PRIx64, code_value); 14120 } 14121 14122 14123 /* 14124 * 14125 * 14126 * 3 2 1 14127 * 10987654321098765432109876543210 14128 * 001000 01001001101 14129 * rt ----- 14130 * rs ----- 14131 * rd ----- 14132 */ 14133 static char *SLL_16_(uint64 instruction, Dis_info *info) 14134 { 14135 uint64 rt3_value = extract_rt3_9_8_7(instruction); 14136 uint64 rs3_value = extract_rs3_6_5_4(instruction); 14137 uint64 shift3_value = extract_shift3_2_1_0(instruction); 14138 14139 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 14140 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 14141 uint64 shift3 = encode_shift3_from_shift(shift3_value); 14142 14143 return img_format("SLL %s, %s, 0x%" PRIx64, rt3, rs3, shift3); 14144 } 14145 14146 14147 /* 14148 * 14149 * 14150 * 3 2 1 14151 * 10987654321098765432109876543210 14152 * 001000 01001001101 14153 * rt ----- 14154 * rs ----- 14155 * rd ----- 14156 */ 14157 static char *SLL_32_(uint64 instruction, Dis_info *info) 14158 { 14159 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14160 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14161 uint64 shift_value = extract_shift_4_3_2_1_0(instruction); 14162 14163 const char *rt = GPR(rt_value, info); 14164 const char *rs = GPR(rs_value, info); 14165 14166 return img_format("SLL %s, %s, 0x%" PRIx64, rt, rs, shift_value); 14167 } 14168 14169 14170 /* 14171 * 14172 * 14173 * 3 2 1 14174 * 10987654321098765432109876543210 14175 * 001000 01001001101 14176 * rt ----- 14177 * rs ----- 14178 * rd ----- 14179 */ 14180 static char *SLLV(uint64 instruction, Dis_info *info) 14181 { 14182 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14183 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14184 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14185 14186 const char *rd = GPR(rd_value, info); 14187 const char *rs = GPR(rs_value, info); 14188 const char *rt = GPR(rt_value, info); 14189 14190 return img_format("SLLV %s, %s, %s", rd, rs, rt); 14191 } 14192 14193 14194 /* 14195 * 14196 * 14197 * 3 2 1 14198 * 10987654321098765432109876543210 14199 * 001000 01001001101 14200 * rt ----- 14201 * rs ----- 14202 * rd ----- 14203 */ 14204 static char *SLT(uint64 instruction, Dis_info *info) 14205 { 14206 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14207 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14208 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14209 14210 const char *rd = GPR(rd_value, info); 14211 const char *rs = GPR(rs_value, info); 14212 const char *rt = GPR(rt_value, info); 14213 14214 return img_format("SLT %s, %s, %s", rd, rs, rt); 14215 } 14216 14217 14218 /* 14219 * 14220 * 14221 * 3 2 1 14222 * 10987654321098765432109876543210 14223 * 001000 01001001101 14224 * rt ----- 14225 * rs ----- 14226 * rd ----- 14227 */ 14228 static char *SLTI(uint64 instruction, Dis_info *info) 14229 { 14230 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14231 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14232 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 14233 14234 const char *rt = GPR(rt_value, info); 14235 const char *rs = GPR(rs_value, info); 14236 14237 return img_format("SLTI %s, %s, 0x%" PRIx64, rt, rs, u_value); 14238 } 14239 14240 14241 /* 14242 * 14243 * 14244 * 3 2 1 14245 * 10987654321098765432109876543210 14246 * 001000 01001001101 14247 * rt ----- 14248 * rs ----- 14249 * rd ----- 14250 */ 14251 static char *SLTIU(uint64 instruction, Dis_info *info) 14252 { 14253 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14254 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14255 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 14256 14257 const char *rt = GPR(rt_value, info); 14258 const char *rs = GPR(rs_value, info); 14259 14260 return img_format("SLTIU %s, %s, 0x%" PRIx64, rt, rs, u_value); 14261 } 14262 14263 14264 /* 14265 * 14266 * 14267 * 3 2 1 14268 * 10987654321098765432109876543210 14269 * 001000 01001001101 14270 * rt ----- 14271 * rs ----- 14272 * rd ----- 14273 */ 14274 static char *SLTU(uint64 instruction, Dis_info *info) 14275 { 14276 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14277 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14278 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14279 14280 const char *rd = GPR(rd_value, info); 14281 const char *rs = GPR(rs_value, info); 14282 const char *rt = GPR(rt_value, info); 14283 14284 return img_format("SLTU %s, %s, %s", rd, rs, rt); 14285 } 14286 14287 14288 /* 14289 * 14290 * 14291 * 3 2 1 14292 * 10987654321098765432109876543210 14293 * 001000 01001001101 14294 * rt ----- 14295 * rs ----- 14296 * rd ----- 14297 */ 14298 static char *SOV(uint64 instruction, Dis_info *info) 14299 { 14300 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14301 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14302 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14303 14304 const char *rd = GPR(rd_value, info); 14305 const char *rs = GPR(rs_value, info); 14306 const char *rt = GPR(rt_value, info); 14307 14308 return img_format("SOV %s, %s, %s", rd, rs, rt); 14309 } 14310 14311 14312 /* 14313 * 14314 * 14315 * 3 2 1 14316 * 10987654321098765432109876543210 14317 * 001000 01001001101 14318 * rt ----- 14319 * rs ----- 14320 * rd ----- 14321 */ 14322 static char *SPECIAL2(uint64 instruction, Dis_info *info) 14323 { 14324 uint64 op_value = extract_op_25_to_3(instruction); 14325 14326 14327 return img_format("SPECIAL2 0x%" PRIx64, op_value); 14328 } 14329 14330 14331 /* 14332 * 14333 * 14334 * 3 2 1 14335 * 10987654321098765432109876543210 14336 * 001000 01001001101 14337 * rt ----- 14338 * rs ----- 14339 * rd ----- 14340 */ 14341 static char *SQRT_D(uint64 instruction, Dis_info *info) 14342 { 14343 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 14344 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 14345 14346 const char *ft = FPR(ft_value, info); 14347 const char *fs = FPR(fs_value, info); 14348 14349 return img_format("SQRT.D %s, %s", ft, fs); 14350 } 14351 14352 14353 /* 14354 * 14355 * 14356 * 3 2 1 14357 * 10987654321098765432109876543210 14358 * 001000 01001001101 14359 * rt ----- 14360 * rs ----- 14361 * rd ----- 14362 */ 14363 static char *SQRT_S(uint64 instruction, Dis_info *info) 14364 { 14365 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 14366 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 14367 14368 const char *ft = FPR(ft_value, info); 14369 const char *fs = FPR(fs_value, info); 14370 14371 return img_format("SQRT.S %s, %s", ft, fs); 14372 } 14373 14374 14375 /* 14376 * SRA rd, rt, sa - Shift Word Right Arithmetic 14377 * 14378 * 3 2 1 14379 * 10987654321098765432109876543210 14380 * 00000000000 000011 14381 * rt ----- 14382 * rd ----- 14383 * sa ----- 14384 */ 14385 static char *SRA(uint64 instruction, Dis_info *info) 14386 { 14387 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14388 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14389 uint64 shift_value = extract_shift_4_3_2_1_0(instruction); 14390 14391 const char *rt = GPR(rt_value, info); 14392 const char *rs = GPR(rs_value, info); 14393 14394 return img_format("SRA %s, %s, 0x%" PRIx64, rt, rs, shift_value); 14395 } 14396 14397 14398 /* 14399 * SRAV rd, rt, rs - Shift Word Right Arithmetic Variable 14400 * 14401 * 3 2 1 14402 * 10987654321098765432109876543210 14403 * 001000 00000000111 14404 * rs ----- 14405 * rt ----- 14406 * rd ----- 14407 */ 14408 static char *SRAV(uint64 instruction, Dis_info *info) 14409 { 14410 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14411 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14412 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14413 14414 const char *rd = GPR(rd_value, info); 14415 const char *rs = GPR(rs_value, info); 14416 const char *rt = GPR(rt_value, info); 14417 14418 return img_format("SRAV %s, %s, %s", rd, rs, rt); 14419 } 14420 14421 14422 /* 14423 * 14424 * 14425 * 3 2 1 14426 * 10987654321098765432109876543210 14427 * 001000 00000000111 14428 * rs ----- 14429 * rt ----- 14430 * rd ----- 14431 */ 14432 static char *SRL_16_(uint64 instruction, Dis_info *info) 14433 { 14434 uint64 rt3_value = extract_rt3_9_8_7(instruction); 14435 uint64 rs3_value = extract_rs3_6_5_4(instruction); 14436 uint64 shift3_value = extract_shift3_2_1_0(instruction); 14437 14438 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 14439 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 14440 uint64 shift3 = encode_shift3_from_shift(shift3_value); 14441 14442 return img_format("SRL %s, %s, 0x%" PRIx64, rt3, rs3, shift3); 14443 } 14444 14445 14446 /* 14447 * 14448 * 14449 * 3 2 1 14450 * 10987654321098765432109876543210 14451 * 001000 01001001101 14452 * rt ----- 14453 * rs ----- 14454 * rd ----- 14455 */ 14456 static char *SRL_32_(uint64 instruction, Dis_info *info) 14457 { 14458 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14459 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14460 uint64 shift_value = extract_shift_4_3_2_1_0(instruction); 14461 14462 const char *rt = GPR(rt_value, info); 14463 const char *rs = GPR(rs_value, info); 14464 14465 return img_format("SRL %s, %s, 0x%" PRIx64, rt, rs, shift_value); 14466 } 14467 14468 14469 /* 14470 * 14471 * 14472 * 3 2 1 14473 * 10987654321098765432109876543210 14474 * 001000 01001001101 14475 * rt ----- 14476 * rs ----- 14477 * rd ----- 14478 */ 14479 static char *SRLV(uint64 instruction, Dis_info *info) 14480 { 14481 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14482 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14483 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14484 14485 const char *rd = GPR(rd_value, info); 14486 const char *rs = GPR(rs_value, info); 14487 const char *rt = GPR(rt_value, info); 14488 14489 return img_format("SRLV %s, %s, %s", rd, rs, rt); 14490 } 14491 14492 14493 /* 14494 * 14495 * 14496 * 3 2 1 14497 * 10987654321098765432109876543210 14498 * 001000 01001001101 14499 * rt ----- 14500 * rs ----- 14501 * rd ----- 14502 */ 14503 static char *SUB(uint64 instruction, Dis_info *info) 14504 { 14505 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14506 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14507 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14508 14509 const char *rd = GPR(rd_value, info); 14510 const char *rs = GPR(rs_value, info); 14511 const char *rt = GPR(rt_value, info); 14512 14513 return img_format("SUB %s, %s, %s", rd, rs, rt); 14514 } 14515 14516 14517 /* 14518 * 14519 * 14520 * 3 2 1 14521 * 10987654321098765432109876543210 14522 * 001000 01001001101 14523 * rt ----- 14524 * rs ----- 14525 * rd ----- 14526 */ 14527 static char *SUB_D(uint64 instruction, Dis_info *info) 14528 { 14529 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 14530 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 14531 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 14532 14533 const char *fd = FPR(fd_value, info); 14534 const char *fs = FPR(fs_value, info); 14535 const char *ft = FPR(ft_value, info); 14536 14537 return img_format("SUB.D %s, %s, %s", fd, fs, ft); 14538 } 14539 14540 14541 /* 14542 * 14543 * 14544 * 3 2 1 14545 * 10987654321098765432109876543210 14546 * 001000 01001001101 14547 * rt ----- 14548 * rs ----- 14549 * rd ----- 14550 */ 14551 static char *SUB_S(uint64 instruction, Dis_info *info) 14552 { 14553 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 14554 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 14555 uint64 fd_value = extract_fd_15_14_13_12_11(instruction); 14556 14557 const char *fd = FPR(fd_value, info); 14558 const char *fs = FPR(fs_value, info); 14559 const char *ft = FPR(ft_value, info); 14560 14561 return img_format("SUB.S %s, %s, %s", fd, fs, ft); 14562 } 14563 14564 14565 /* 14566 * 14567 * 14568 * 3 2 1 14569 * 10987654321098765432109876543210 14570 * 001000 01001001101 14571 * rt ----- 14572 * rs ----- 14573 * rd ----- 14574 */ 14575 static char *SUBQ_PH(uint64 instruction, Dis_info *info) 14576 { 14577 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14578 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14579 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14580 14581 const char *rd = GPR(rd_value, info); 14582 const char *rs = GPR(rs_value, info); 14583 const char *rt = GPR(rt_value, info); 14584 14585 return img_format("SUBQ.PH %s, %s, %s", rd, rs, rt); 14586 } 14587 14588 14589 /* 14590 * [DSP] SUBQ.S.PH rd, rt, rs - Subtract fractional halfword vectors and shift 14591 * right to halve results 14592 * 14593 * 3 2 1 14594 * 10987654321098765432109876543210 14595 * 001000 01001001101 14596 * rt ----- 14597 * rs ----- 14598 * rd ----- 14599 */ 14600 static char *SUBQ_S_PH(uint64 instruction, Dis_info *info) 14601 { 14602 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14603 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14604 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14605 14606 const char *rd = GPR(rd_value, info); 14607 const char *rs = GPR(rs_value, info); 14608 const char *rt = GPR(rt_value, info); 14609 14610 return img_format("SUBQ_S.PH %s, %s, %s", rd, rs, rt); 14611 } 14612 14613 14614 /* 14615 * [DSP] SUBQ.S.W rd, rt, rs - Subtract fractional halfword vectors and shift 14616 * right to halve results 14617 * 14618 * 3 2 1 14619 * 10987654321098765432109876543210 14620 * 001000 01001001101 14621 * rt ----- 14622 * rs ----- 14623 * rd ----- 14624 */ 14625 static char *SUBQ_S_W(uint64 instruction, Dis_info *info) 14626 { 14627 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14628 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14629 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14630 14631 const char *rd = GPR(rd_value, info); 14632 const char *rs = GPR(rs_value, info); 14633 const char *rt = GPR(rt_value, info); 14634 14635 return img_format("SUBQ_S.W %s, %s, %s", rd, rs, rt); 14636 } 14637 14638 14639 /* 14640 * [DSP] SUBQH.PH rd, rt, rs - Subtract fractional halfword vectors and shift 14641 * right to halve results 14642 * 14643 * 3 2 1 14644 * 10987654321098765432109876543210 14645 * 001000 01001001101 14646 * rt ----- 14647 * rs ----- 14648 * rd ----- 14649 */ 14650 static char *SUBQH_PH(uint64 instruction, Dis_info *info) 14651 { 14652 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14653 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14654 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14655 14656 const char *rd = GPR(rd_value, info); 14657 const char *rs = GPR(rs_value, info); 14658 const char *rt = GPR(rt_value, info); 14659 14660 return img_format("SUBQH.PH %s, %s, %s", rd, rs, rt); 14661 } 14662 14663 14664 /* 14665 * [DSP] SUBQH_R.PH rd, rt, rs - Subtract fractional halfword vectors and shift 14666 * right to halve results 14667 * 14668 * 3 2 1 14669 * 10987654321098765432109876543210 14670 * 001000 01001001101 14671 * rt ----- 14672 * rs ----- 14673 * rd ----- 14674 */ 14675 static char *SUBQH_R_PH(uint64 instruction, Dis_info *info) 14676 { 14677 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14678 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14679 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14680 14681 const char *rd = GPR(rd_value, info); 14682 const char *rs = GPR(rs_value, info); 14683 const char *rt = GPR(rt_value, info); 14684 14685 return img_format("SUBQH_R.PH %s, %s, %s", rd, rs, rt); 14686 } 14687 14688 14689 /* 14690 * [DSP] SUBQH_R.W rd, rt, rs - Subtract fractional halfword vectors and shift 14691 * right to halve results with rounding 14692 * 14693 * 3 2 1 14694 * 10987654321098765432109876543210 14695 * 001000 11001001101 14696 * rt ----- 14697 * rs ----- 14698 * rd ----- 14699 */ 14700 static char *SUBQH_R_W(uint64 instruction, Dis_info *info) 14701 { 14702 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14703 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14704 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14705 14706 const char *rd = GPR(rd_value, info); 14707 const char *rs = GPR(rs_value, info); 14708 const char *rt = GPR(rt_value, info); 14709 14710 return img_format("SUBQH_R.W %s, %s, %s", rd, rs, rt); 14711 } 14712 14713 14714 /* 14715 * [DSP] SUBQH.W rd, rs, rt - Subtract fractional words and shift right to 14716 * halve results 14717 * 14718 * 3 2 1 14719 * 10987654321098765432109876543210 14720 * 001000 01010001101 14721 * rt ----- 14722 * rs ----- 14723 * rd ----- 14724 */ 14725 static char *SUBQH_W(uint64 instruction, Dis_info *info) 14726 { 14727 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14728 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14729 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14730 14731 const char *rd = GPR(rd_value, info); 14732 const char *rs = GPR(rs_value, info); 14733 const char *rt = GPR(rt_value, info); 14734 14735 return img_format("SUBQH.W %s, %s, %s", rd, rs, rt); 14736 } 14737 14738 14739 /* 14740 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 14741 * 14742 * 3 2 1 14743 * 10987654321098765432109876543210 14744 * 001000 00010001101 14745 * rt ----- 14746 * rs ----- 14747 * rd ----- 14748 */ 14749 static char *SUBU_16_(uint64 instruction, Dis_info *info) 14750 { 14751 uint64 rt3_value = extract_rt3_9_8_7(instruction); 14752 uint64 rs3_value = extract_rs3_6_5_4(instruction); 14753 uint64 rd3_value = extract_rd3_3_2_1(instruction); 14754 14755 const char *rd3 = GPR(decode_gpr_gpr3(rd3_value, info), info); 14756 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 14757 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 14758 14759 return img_format("SUBU %s, %s, %s", rd3, rs3, rt3); 14760 } 14761 14762 14763 /* 14764 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 14765 * 14766 * 3 2 1 14767 * 10987654321098765432109876543210 14768 * 001000 00010001101 14769 * rt ----- 14770 * rs ----- 14771 * rd ----- 14772 */ 14773 static char *SUBU_32_(uint64 instruction, Dis_info *info) 14774 { 14775 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14776 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14777 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14778 14779 const char *rd = GPR(rd_value, info); 14780 const char *rs = GPR(rs_value, info); 14781 const char *rt = GPR(rt_value, info); 14782 14783 return img_format("SUBU %s, %s, %s", rd, rs, rt); 14784 } 14785 14786 14787 /* 14788 * [DSP] SUBU.PH rd, rs, rt - Subtract unsigned unsigned halfwords 14789 * 14790 * 3 2 1 14791 * 10987654321098765432109876543210 14792 * 001000 01100001101 14793 * rt ----- 14794 * rs ----- 14795 * rd ----- 14796 */ 14797 static char *SUBU_PH(uint64 instruction, Dis_info *info) 14798 { 14799 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14800 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14801 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14802 14803 const char *rd = GPR(rd_value, info); 14804 const char *rs = GPR(rs_value, info); 14805 const char *rt = GPR(rt_value, info); 14806 14807 return img_format("SUBU.PH %s, %s, %s", rd, rs, rt); 14808 } 14809 14810 14811 /* 14812 * [DSP] SUBU.QB rd, rs, rt - Subtract unsigned quad byte vectors 14813 * 14814 * 3 2 1 14815 * 10987654321098765432109876543210 14816 * 001000 01011001101 14817 * rt ----- 14818 * rs ----- 14819 * rd ----- 14820 */ 14821 static char *SUBU_QB(uint64 instruction, Dis_info *info) 14822 { 14823 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14824 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14825 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14826 14827 const char *rd = GPR(rd_value, info); 14828 const char *rs = GPR(rs_value, info); 14829 const char *rt = GPR(rt_value, info); 14830 14831 return img_format("SUBU.QB %s, %s, %s", rd, rs, rt); 14832 } 14833 14834 14835 /* 14836 * [DSP] SUBU_S.PH rd, rs, rt - Subtract unsigned unsigned halfwords with 14837 * 8-bit saturation 14838 * 14839 * 3 2 1 14840 * 10987654321098765432109876543210 14841 * 001000 11100001101 14842 * rt ----- 14843 * rs ----- 14844 * rd ----- 14845 */ 14846 static char *SUBU_S_PH(uint64 instruction, Dis_info *info) 14847 { 14848 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14849 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14850 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14851 14852 const char *rd = GPR(rd_value, info); 14853 const char *rs = GPR(rs_value, info); 14854 const char *rt = GPR(rt_value, info); 14855 14856 return img_format("SUBU_S.PH %s, %s, %s", rd, rs, rt); 14857 } 14858 14859 14860 /* 14861 * [DSP] SUBU_S.QB rd, rs, rt - Subtract unsigned quad byte vectors with 14862 * 8-bit saturation 14863 * 14864 * 3 2 1 14865 * 10987654321098765432109876543210 14866 * 001000 11011001101 14867 * rt ----- 14868 * rs ----- 14869 * rd ----- 14870 */ 14871 static char *SUBU_S_QB(uint64 instruction, Dis_info *info) 14872 { 14873 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14874 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14875 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14876 14877 const char *rd = GPR(rd_value, info); 14878 const char *rs = GPR(rs_value, info); 14879 const char *rt = GPR(rt_value, info); 14880 14881 return img_format("SUBU_S.QB %s, %s, %s", rd, rs, rt); 14882 } 14883 14884 14885 /* 14886 * [DSP] SUBUH.QB rd, rs, rt - Subtract unsigned bytes and right shift 14887 * to halve results 14888 * 14889 * 3 2 1 14890 * 10987654321098765432109876543210 14891 * 001000 01101001101 14892 * rt ----- 14893 * rs ----- 14894 * rd ----- 14895 */ 14896 static char *SUBUH_QB(uint64 instruction, Dis_info *info) 14897 { 14898 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14899 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14900 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14901 14902 const char *rd = GPR(rd_value, info); 14903 const char *rs = GPR(rs_value, info); 14904 const char *rt = GPR(rt_value, info); 14905 14906 return img_format("SUBUH.QB %s, %s, %s", rd, rs, rt); 14907 } 14908 14909 14910 /* 14911 * [DSP] SUBUH_R.QB rd, rs, rt - Subtract unsigned bytes and right shift 14912 * to halve results with rounding 14913 * 14914 * 3 2 1 14915 * 10987654321098765432109876543210 14916 * 001000 11101001101 14917 * rt ----- 14918 * rs ----- 14919 * rd ----- 14920 */ 14921 static char *SUBUH_R_QB(uint64 instruction, Dis_info *info) 14922 { 14923 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 14924 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 14925 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 14926 14927 const char *rd = GPR(rd_value, info); 14928 const char *rs = GPR(rs_value, info); 14929 const char *rt = GPR(rt_value, info); 14930 14931 return img_format("SUBUH_R.QB %s, %s, %s", rd, rs, rt); 14932 } 14933 14934 14935 /* 14936 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 14937 * 14938 * 3 2 1 14939 * 10987654321098765432109876543210 14940 * 001000 00010001101 14941 * rt ----- 14942 * rs ----- 14943 * rd ----- 14944 */ 14945 static char *SW_16_(uint64 instruction, Dis_info *info) 14946 { 14947 uint64 rtz3_value = extract_rtz3_9_8_7(instruction); 14948 uint64 rs3_value = extract_rs3_6_5_4(instruction); 14949 uint64 u_value = extract_u_3_2_1_0__s2(instruction); 14950 14951 const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info); 14952 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 14953 14954 return img_format("SW %s, 0x%" PRIx64 "(%s)", rtz3, u_value, rs3); 14955 } 14956 14957 14958 /* 14959 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 14960 * 14961 * 3 2 1 14962 * 10987654321098765432109876543210 14963 * 001000 00010001101 14964 * rt ----- 14965 * rs ----- 14966 * rd ----- 14967 */ 14968 static char *SW_4X4_(uint64 instruction, Dis_info *info) 14969 { 14970 uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction); 14971 uint64 rs4_value = extract_rs4_4_2_1_0(instruction); 14972 uint64 u_value = extract_u_3_8__s2(instruction); 14973 14974 const char *rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value, info), info); 14975 const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info); 14976 14977 return img_format("SW %s, 0x%" PRIx64 "(%s)", rtz4, u_value, rs4); 14978 } 14979 14980 14981 /* 14982 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 14983 * 14984 * 3 2 1 14985 * 10987654321098765432109876543210 14986 * 001000 00010001101 14987 * rt ----- 14988 * rs ----- 14989 * rd ----- 14990 */ 14991 static char *SW_GP16_(uint64 instruction, Dis_info *info) 14992 { 14993 uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction); 14994 uint64 rtz3_value = extract_rtz3_9_8_7(instruction); 14995 14996 const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info); 14997 14998 return img_format("SW %s, 0x%" PRIx64 "($%d)", rtz3, u_value, 28); 14999 } 15000 15001 15002 /* 15003 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15004 * 15005 * 3 2 1 15006 * 10987654321098765432109876543210 15007 * 001000 00010001101 15008 * rt ----- 15009 * rs ----- 15010 * rd ----- 15011 */ 15012 static char *SW_GP_(uint64 instruction, Dis_info *info) 15013 { 15014 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15015 uint64 u_value = extract_u_20_to_2__s2(instruction); 15016 15017 const char *rt = GPR(rt_value, info); 15018 15019 return img_format("SW %s, 0x%" PRIx64 "($%d)", rt, u_value, 28); 15020 } 15021 15022 15023 /* 15024 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15025 * 15026 * 3 2 1 15027 * 10987654321098765432109876543210 15028 * 001000 00010001101 15029 * rt ----- 15030 * rs ----- 15031 * rd ----- 15032 */ 15033 static char *SW_S9_(uint64 instruction, Dis_info *info) 15034 { 15035 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15036 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 15037 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15038 15039 const char *rt = GPR(rt_value, info); 15040 const char *rs = GPR(rs_value, info); 15041 15042 return img_format("SW %s, %" PRId64 "(%s)", rt, s_value, rs); 15043 } 15044 15045 15046 /* 15047 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15048 * 15049 * 3 2 1 15050 * 10987654321098765432109876543210 15051 * 001000 00010001101 15052 * rt ----- 15053 * rs ----- 15054 * rd ----- 15055 */ 15056 static char *SW_SP_(uint64 instruction, Dis_info *info) 15057 { 15058 uint64 rt_value = extract_rt_9_8_7_6_5(instruction); 15059 uint64 u_value = extract_u_4_3_2_1_0__s2(instruction); 15060 15061 const char *rt = GPR(rt_value, info); 15062 15063 return img_format("SW %s, 0x%" PRIx64 "($%d)", rt, u_value, 29); 15064 } 15065 15066 15067 /* 15068 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15069 * 15070 * 3 2 1 15071 * 10987654321098765432109876543210 15072 * 001000 00010001101 15073 * rt ----- 15074 * rs ----- 15075 * rd ----- 15076 */ 15077 static char *SW_U12_(uint64 instruction, Dis_info *info) 15078 { 15079 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15080 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15081 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 15082 15083 const char *rt = GPR(rt_value, info); 15084 const char *rs = GPR(rs_value, info); 15085 15086 return img_format("SW %s, 0x%" PRIx64 "(%s)", rt, u_value, rs); 15087 } 15088 15089 15090 /* 15091 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15092 * 15093 * 3 2 1 15094 * 10987654321098765432109876543210 15095 * 001000 00010001101 15096 * rt ----- 15097 * rs ----- 15098 * rd ----- 15099 */ 15100 static char *SWC1_GP_(uint64 instruction, Dis_info *info) 15101 { 15102 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 15103 uint64 u_value = extract_u_17_to_2__s2(instruction); 15104 15105 const char *ft = FPR(ft_value, info); 15106 15107 return img_format("SWC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28); 15108 } 15109 15110 15111 /* 15112 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15113 * 15114 * 3 2 1 15115 * 10987654321098765432109876543210 15116 * 001000 00010001101 15117 * rt ----- 15118 * rs ----- 15119 * rd ----- 15120 */ 15121 static char *SWC1_S9_(uint64 instruction, Dis_info *info) 15122 { 15123 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 15124 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15125 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 15126 15127 const char *ft = FPR(ft_value, info); 15128 const char *rs = GPR(rs_value, info); 15129 15130 return img_format("SWC1 %s, %" PRId64 "(%s)", ft, s_value, rs); 15131 } 15132 15133 15134 /* 15135 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15136 * 15137 * 3 2 1 15138 * 10987654321098765432109876543210 15139 * 001000 00010001101 15140 * rt ----- 15141 * rs ----- 15142 * rd ----- 15143 */ 15144 static char *SWC1_U12_(uint64 instruction, Dis_info *info) 15145 { 15146 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 15147 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15148 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 15149 15150 const char *ft = FPR(ft_value, info); 15151 const char *rs = GPR(rs_value, info); 15152 15153 return img_format("SWC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs); 15154 } 15155 15156 15157 /* 15158 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15159 * 15160 * 3 2 1 15161 * 10987654321098765432109876543210 15162 * 001000 00010001101 15163 * rt ----- 15164 * rs ----- 15165 * rd ----- 15166 */ 15167 static char *SWC1X(uint64 instruction, Dis_info *info) 15168 { 15169 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15170 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15171 uint64 ft_value = extract_ft_15_14_13_12_11(instruction); 15172 15173 const char *ft = FPR(ft_value, info); 15174 const char *rs = GPR(rs_value, info); 15175 const char *rt = GPR(rt_value, info); 15176 15177 return img_format("SWC1X %s, %s(%s)", ft, rs, rt); 15178 } 15179 15180 15181 /* 15182 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15183 * 15184 * 3 2 1 15185 * 10987654321098765432109876543210 15186 * 001000 00010001101 15187 * rt ----- 15188 * rs ----- 15189 * rd ----- 15190 */ 15191 static char *SWC1XS(uint64 instruction, Dis_info *info) 15192 { 15193 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15194 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15195 uint64 ft_value = extract_ft_15_14_13_12_11(instruction); 15196 15197 const char *ft = FPR(ft_value, info); 15198 const char *rs = GPR(rs_value, info); 15199 const char *rt = GPR(rt_value, info); 15200 15201 return img_format("SWC1XS %s, %s(%s)", ft, rs, rt); 15202 } 15203 15204 15205 /* 15206 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15207 * 15208 * 3 2 1 15209 * 10987654321098765432109876543210 15210 * 001000 00010001101 15211 * rt ----- 15212 * rs ----- 15213 * rd ----- 15214 */ 15215 static char *SWC2(uint64 instruction, Dis_info *info) 15216 { 15217 uint64 cs_value = extract_cs_25_24_23_22_21(instruction); 15218 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15219 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 15220 15221 const char *rs = GPR(rs_value, info); 15222 15223 return img_format("SWC2 CP%" PRIu64 ", %" PRId64 "(%s)", 15224 cs_value, s_value, rs); 15225 } 15226 15227 15228 /* 15229 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15230 * 15231 * 3 2 1 15232 * 10987654321098765432109876543210 15233 * 001000 00010001101 15234 * rt ----- 15235 * rs ----- 15236 * rd ----- 15237 */ 15238 static char *SWE(uint64 instruction, Dis_info *info) 15239 { 15240 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15241 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15242 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 15243 15244 const char *rt = GPR(rt_value, info); 15245 const char *rs = GPR(rs_value, info); 15246 15247 return img_format("SWE %s, %" PRId64 "(%s)", rt, s_value, rs); 15248 } 15249 15250 15251 /* 15252 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15253 * 15254 * 3 2 1 15255 * 10987654321098765432109876543210 15256 * 001000 00010001101 15257 * rt ----- 15258 * rs ----- 15259 * rd ----- 15260 */ 15261 static char *SWM(uint64 instruction, Dis_info *info) 15262 { 15263 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15264 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15265 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 15266 uint64 count3_value = extract_count3_14_13_12(instruction); 15267 15268 const char *rt = GPR(rt_value, info); 15269 const char *rs = GPR(rs_value, info); 15270 uint64 count3 = encode_count3_from_count(count3_value); 15271 15272 return img_format("SWM %s, %" PRId64 "(%s), 0x%" PRIx64, 15273 rt, s_value, rs, count3); 15274 } 15275 15276 15277 /* 15278 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15279 * 15280 * 3 2 1 15281 * 10987654321098765432109876543210 15282 * 001000 00010001101 15283 * rt ----- 15284 * rs ----- 15285 * rd ----- 15286 */ 15287 static char *SWPC_48_(uint64 instruction, Dis_info *info) 15288 { 15289 uint64 rt_value = extract_rt_41_40_39_38_37(instruction); 15290 int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction); 15291 15292 const char *rt = GPR(rt_value, info); 15293 g_autofree char *s = ADDRESS(s_value, 6, info); 15294 15295 return img_format("SWPC %s, %s", rt, s); 15296 } 15297 15298 15299 /* 15300 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15301 * 15302 * 3 2 1 15303 * 10987654321098765432109876543210 15304 * 001000 00010001101 15305 * rt ----- 15306 * rs ----- 15307 * rd ----- 15308 */ 15309 static char *SWX(uint64 instruction, Dis_info *info) 15310 { 15311 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15312 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15313 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 15314 15315 const char *rd = GPR(rd_value, info); 15316 const char *rs = GPR(rs_value, info); 15317 const char *rt = GPR(rt_value, info); 15318 15319 return img_format("SWX %s, %s(%s)", rd, rs, rt); 15320 } 15321 15322 15323 /* 15324 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15325 * 15326 * 3 2 1 15327 * 10987654321098765432109876543210 15328 * 001000 00010001101 15329 * rt ----- 15330 * rs ----- 15331 * rd ----- 15332 */ 15333 static char *SWXS(uint64 instruction, Dis_info *info) 15334 { 15335 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15336 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15337 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 15338 15339 const char *rd = GPR(rd_value, info); 15340 const char *rs = GPR(rs_value, info); 15341 const char *rt = GPR(rt_value, info); 15342 15343 return img_format("SWXS %s, %s(%s)", rd, rs, rt); 15344 } 15345 15346 15347 /* 15348 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15349 * 15350 * 3 2 1 15351 * 10987654321098765432109876543210 15352 * 001000 00010001101 15353 * rt ----- 15354 * rs ----- 15355 * rd ----- 15356 */ 15357 static char *SYNC(uint64 instruction, Dis_info *info) 15358 { 15359 uint64 stype_value = extract_stype_20_19_18_17_16(instruction); 15360 15361 15362 return img_format("SYNC 0x%" PRIx64, stype_value); 15363 } 15364 15365 15366 /* 15367 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15368 * 15369 * 3 2 1 15370 * 10987654321098765432109876543210 15371 * 001000 00010001101 15372 * rt ----- 15373 * rs ----- 15374 * rd ----- 15375 */ 15376 static char *SYNCI(uint64 instruction, Dis_info *info) 15377 { 15378 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15379 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 15380 15381 const char *rs = GPR(rs_value, info); 15382 15383 return img_format("SYNCI %" PRId64 "(%s)", s_value, rs); 15384 } 15385 15386 15387 /* 15388 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15389 * 15390 * 3 2 1 15391 * 10987654321098765432109876543210 15392 * 001000 00010001101 15393 * rt ----- 15394 * rs ----- 15395 * rd ----- 15396 */ 15397 static char *SYNCIE(uint64 instruction, Dis_info *info) 15398 { 15399 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15400 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 15401 15402 const char *rs = GPR(rs_value, info); 15403 15404 return img_format("SYNCIE %" PRId64 "(%s)", s_value, rs); 15405 } 15406 15407 15408 /* 15409 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15410 * 15411 * 3 2 1 15412 * 10987654321098765432109876543210 15413 * 001000 00010001101 15414 * rt ----- 15415 * rs ----- 15416 * rd ----- 15417 */ 15418 static char *SYSCALL_16_(uint64 instruction, Dis_info *info) 15419 { 15420 uint64 code_value = extract_code_1_0(instruction); 15421 15422 15423 return img_format("SYSCALL 0x%" PRIx64, code_value); 15424 } 15425 15426 15427 /* 15428 * SYSCALL code - System Call. Cause a System Call Exception 15429 * 15430 * 3 2 1 15431 * 10987654321098765432109876543210 15432 * 00000000000010 15433 * code ------------------ 15434 */ 15435 static char *SYSCALL_32_(uint64 instruction, Dis_info *info) 15436 { 15437 uint64 code_value = extract_code_17_to_0(instruction); 15438 15439 15440 return img_format("SYSCALL 0x%" PRIx64, code_value); 15441 } 15442 15443 15444 /* 15445 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15446 * 15447 * 3 2 1 15448 * 10987654321098765432109876543210 15449 * 001000 00010001101 15450 * rt ----- 15451 * rs ----- 15452 * rd ----- 15453 */ 15454 static char *TEQ(uint64 instruction, Dis_info *info) 15455 { 15456 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15457 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15458 15459 const char *rs = GPR(rs_value, info); 15460 const char *rt = GPR(rt_value, info); 15461 15462 return img_format("TEQ %s, %s", rs, rt); 15463 } 15464 15465 15466 /* 15467 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15468 * 15469 * 3 2 1 15470 * 10987654321098765432109876543210 15471 * 001000 00010001101 15472 * rt ----- 15473 * rs ----- 15474 * rd ----- 15475 */ 15476 static char *TLBGINV(uint64 instruction, Dis_info *info) 15477 { 15478 (void)instruction; 15479 15480 return g_strdup("TLBGINV "); 15481 } 15482 15483 15484 /* 15485 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15486 * 15487 * 3 2 1 15488 * 10987654321098765432109876543210 15489 * 001000 00010001101 15490 * rt ----- 15491 * rs ----- 15492 * rd ----- 15493 */ 15494 static char *TLBGINVF(uint64 instruction, Dis_info *info) 15495 { 15496 (void)instruction; 15497 15498 return g_strdup("TLBGINVF "); 15499 } 15500 15501 15502 /* 15503 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15504 * 15505 * 3 2 1 15506 * 10987654321098765432109876543210 15507 * 001000 00010001101 15508 * rt ----- 15509 * rs ----- 15510 * rd ----- 15511 */ 15512 static char *TLBGP(uint64 instruction, Dis_info *info) 15513 { 15514 (void)instruction; 15515 15516 return g_strdup("TLBGP "); 15517 } 15518 15519 15520 /* 15521 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15522 * 15523 * 3 2 1 15524 * 10987654321098765432109876543210 15525 * 001000 00010001101 15526 * rt ----- 15527 * rs ----- 15528 * rd ----- 15529 */ 15530 static char *TLBGR(uint64 instruction, Dis_info *info) 15531 { 15532 (void)instruction; 15533 15534 return g_strdup("TLBGR "); 15535 } 15536 15537 15538 /* 15539 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15540 * 15541 * 3 2 1 15542 * 10987654321098765432109876543210 15543 * 001000 00010001101 15544 * rt ----- 15545 * rs ----- 15546 * rd ----- 15547 */ 15548 static char *TLBGWI(uint64 instruction, Dis_info *info) 15549 { 15550 (void)instruction; 15551 15552 return g_strdup("TLBGWI "); 15553 } 15554 15555 15556 /* 15557 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15558 * 15559 * 3 2 1 15560 * 10987654321098765432109876543210 15561 * 001000 00010001101 15562 * rt ----- 15563 * rs ----- 15564 * rd ----- 15565 */ 15566 static char *TLBGWR(uint64 instruction, Dis_info *info) 15567 { 15568 (void)instruction; 15569 15570 return g_strdup("TLBGWR "); 15571 } 15572 15573 15574 /* 15575 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15576 * 15577 * 3 2 1 15578 * 10987654321098765432109876543210 15579 * 001000 00010001101 15580 * rt ----- 15581 * rs ----- 15582 * rd ----- 15583 */ 15584 static char *TLBINV(uint64 instruction, Dis_info *info) 15585 { 15586 (void)instruction; 15587 15588 return g_strdup("TLBINV "); 15589 } 15590 15591 15592 /* 15593 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15594 * 15595 * 3 2 1 15596 * 10987654321098765432109876543210 15597 * 001000 00010001101 15598 * rt ----- 15599 * rs ----- 15600 * rd ----- 15601 */ 15602 static char *TLBINVF(uint64 instruction, Dis_info *info) 15603 { 15604 (void)instruction; 15605 15606 return g_strdup("TLBINVF "); 15607 } 15608 15609 15610 /* 15611 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15612 * 15613 * 3 2 1 15614 * 10987654321098765432109876543210 15615 * 001000 00010001101 15616 * rt ----- 15617 * rs ----- 15618 * rd ----- 15619 */ 15620 static char *TLBP(uint64 instruction, Dis_info *info) 15621 { 15622 (void)instruction; 15623 15624 return g_strdup("TLBP "); 15625 } 15626 15627 15628 /* 15629 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15630 * 15631 * 3 2 1 15632 * 10987654321098765432109876543210 15633 * 001000 00010001101 15634 * rt ----- 15635 * rs ----- 15636 * rd ----- 15637 */ 15638 static char *TLBR(uint64 instruction, Dis_info *info) 15639 { 15640 (void)instruction; 15641 15642 return g_strdup("TLBR "); 15643 } 15644 15645 15646 /* 15647 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15648 * 15649 * 3 2 1 15650 * 10987654321098765432109876543210 15651 * 001000 00010001101 15652 * rt ----- 15653 * rs ----- 15654 * rd ----- 15655 */ 15656 static char *TLBWI(uint64 instruction, Dis_info *info) 15657 { 15658 (void)instruction; 15659 15660 return g_strdup("TLBWI "); 15661 } 15662 15663 15664 /* 15665 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15666 * 15667 * 3 2 1 15668 * 10987654321098765432109876543210 15669 * 001000 00010001101 15670 * rt ----- 15671 * rs ----- 15672 * rd ----- 15673 */ 15674 static char *TLBWR(uint64 instruction, Dis_info *info) 15675 { 15676 (void)instruction; 15677 15678 return g_strdup("TLBWR "); 15679 } 15680 15681 15682 /* 15683 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15684 * 15685 * 3 2 1 15686 * 10987654321098765432109876543210 15687 * 001000 00010001101 15688 * rt ----- 15689 * rs ----- 15690 * rd ----- 15691 */ 15692 static char *TNE(uint64 instruction, Dis_info *info) 15693 { 15694 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15695 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15696 15697 const char *rs = GPR(rs_value, info); 15698 const char *rt = GPR(rt_value, info); 15699 15700 return img_format("TNE %s, %s", rs, rt); 15701 } 15702 15703 15704 /* 15705 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15706 * 15707 * 3 2 1 15708 * 10987654321098765432109876543210 15709 * 001000 00010001101 15710 * rt ----- 15711 * rs ----- 15712 * rd ----- 15713 */ 15714 static char *TRUNC_L_D(uint64 instruction, Dis_info *info) 15715 { 15716 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 15717 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 15718 15719 const char *ft = FPR(ft_value, info); 15720 const char *fs = FPR(fs_value, info); 15721 15722 return img_format("TRUNC.L.D %s, %s", ft, fs); 15723 } 15724 15725 15726 /* 15727 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15728 * 15729 * 3 2 1 15730 * 10987654321098765432109876543210 15731 * 001000 00010001101 15732 * rt ----- 15733 * rs ----- 15734 * rd ----- 15735 */ 15736 static char *TRUNC_L_S(uint64 instruction, Dis_info *info) 15737 { 15738 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 15739 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 15740 15741 const char *ft = FPR(ft_value, info); 15742 const char *fs = FPR(fs_value, info); 15743 15744 return img_format("TRUNC.L.S %s, %s", ft, fs); 15745 } 15746 15747 15748 /* 15749 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15750 * 15751 * 3 2 1 15752 * 10987654321098765432109876543210 15753 * 001000 00010001101 15754 * rt ----- 15755 * rs ----- 15756 * rd ----- 15757 */ 15758 static char *TRUNC_W_D(uint64 instruction, Dis_info *info) 15759 { 15760 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 15761 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 15762 15763 const char *ft = FPR(ft_value, info); 15764 const char *fs = FPR(fs_value, info); 15765 15766 return img_format("TRUNC.W.D %s, %s", ft, fs); 15767 } 15768 15769 15770 /* 15771 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15772 * 15773 * 3 2 1 15774 * 10987654321098765432109876543210 15775 * 001000 00010001101 15776 * rt ----- 15777 * rs ----- 15778 * rd ----- 15779 */ 15780 static char *TRUNC_W_S(uint64 instruction, Dis_info *info) 15781 { 15782 uint64 ft_value = extract_ft_25_24_23_22_21(instruction); 15783 uint64 fs_value = extract_fs_20_19_18_17_16(instruction); 15784 15785 const char *ft = FPR(ft_value, info); 15786 const char *fs = FPR(fs_value, info); 15787 15788 return img_format("TRUNC.W.S %s, %s", ft, fs); 15789 } 15790 15791 15792 /* 15793 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15794 * 15795 * 3 2 1 15796 * 10987654321098765432109876543210 15797 * 001000 00010001101 15798 * rt ----- 15799 * rs ----- 15800 * rd ----- 15801 */ 15802 static char *UALDM(uint64 instruction, Dis_info *info) 15803 { 15804 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15805 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15806 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 15807 uint64 count3_value = extract_count3_14_13_12(instruction); 15808 15809 const char *rt = GPR(rt_value, info); 15810 const char *rs = GPR(rs_value, info); 15811 uint64 count3 = encode_count3_from_count(count3_value); 15812 15813 return img_format("UALDM %s, %" PRId64 "(%s), 0x%" PRIx64, 15814 rt, s_value, rs, count3); 15815 } 15816 15817 15818 /* 15819 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15820 * 15821 * 3 2 1 15822 * 10987654321098765432109876543210 15823 * 001000 00010001101 15824 * rt ----- 15825 * rs ----- 15826 * rd ----- 15827 */ 15828 static char *UALH(uint64 instruction, Dis_info *info) 15829 { 15830 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15831 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15832 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 15833 15834 const char *rt = GPR(rt_value, info); 15835 const char *rs = GPR(rs_value, info); 15836 15837 return img_format("UALH %s, %" PRId64 "(%s)", rt, s_value, rs); 15838 } 15839 15840 15841 /* 15842 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15843 * 15844 * 3 2 1 15845 * 10987654321098765432109876543210 15846 * 001000 00010001101 15847 * rt ----- 15848 * rs ----- 15849 * rd ----- 15850 */ 15851 static char *UALWM(uint64 instruction, Dis_info *info) 15852 { 15853 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15854 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15855 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 15856 uint64 count3_value = extract_count3_14_13_12(instruction); 15857 15858 const char *rt = GPR(rt_value, info); 15859 const char *rs = GPR(rs_value, info); 15860 uint64 count3 = encode_count3_from_count(count3_value); 15861 15862 return img_format("UALWM %s, %" PRId64 "(%s), 0x%" PRIx64, 15863 rt, s_value, rs, count3); 15864 } 15865 15866 15867 /* 15868 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15869 * 15870 * 3 2 1 15871 * 10987654321098765432109876543210 15872 * 001000 00010001101 15873 * rt ----- 15874 * rs ----- 15875 * rd ----- 15876 */ 15877 static char *UASDM(uint64 instruction, Dis_info *info) 15878 { 15879 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15880 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15881 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 15882 uint64 count3_value = extract_count3_14_13_12(instruction); 15883 15884 const char *rt = GPR(rt_value, info); 15885 const char *rs = GPR(rs_value, info); 15886 uint64 count3 = encode_count3_from_count(count3_value); 15887 15888 return img_format("UASDM %s, %" PRId64 "(%s), 0x%" PRIx64, 15889 rt, s_value, rs, count3); 15890 } 15891 15892 15893 /* 15894 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15895 * 15896 * 3 2 1 15897 * 10987654321098765432109876543210 15898 * 001000 00010001101 15899 * rt ----- 15900 * rs ----- 15901 * rd ----- 15902 */ 15903 static char *UASH(uint64 instruction, Dis_info *info) 15904 { 15905 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15906 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15907 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 15908 15909 const char *rt = GPR(rt_value, info); 15910 const char *rs = GPR(rs_value, info); 15911 15912 return img_format("UASH %s, %" PRId64 "(%s)", rt, s_value, rs); 15913 } 15914 15915 15916 /* 15917 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15918 * 15919 * 3 2 1 15920 * 10987654321098765432109876543210 15921 * 001000 00010001101 15922 * rt ----- 15923 * rs ----- 15924 * rd ----- 15925 */ 15926 static char *UASWM(uint64 instruction, Dis_info *info) 15927 { 15928 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15929 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 15930 int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction); 15931 uint64 count3_value = extract_count3_14_13_12(instruction); 15932 15933 const char *rt = GPR(rt_value, info); 15934 const char *rs = GPR(rs_value, info); 15935 uint64 count3 = encode_count3_from_count(count3_value); 15936 15937 return img_format("UASWM %s, %" PRId64 "(%s), 0x%" PRIx64, 15938 rt, s_value, rs, count3); 15939 } 15940 15941 15942 /* 15943 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 15944 * 15945 * 3 2 1 15946 * 10987654321098765432109876543210 15947 * 001000 00010001101 15948 * rt ----- 15949 * rs ----- 15950 * rd ----- 15951 */ 15952 static char *UDI(uint64 instruction, Dis_info *info) 15953 { 15954 uint64 op_value = extract_op_25_to_3(instruction); 15955 15956 15957 return img_format("UDI 0x%" PRIx64, op_value); 15958 } 15959 15960 15961 /* 15962 * WAIT code - Enter Wait State 15963 * 15964 * 3 2 1 15965 * 10987654321098765432109876543210 15966 * 001000 1100001101111111 15967 * code ---------- 15968 */ 15969 static char *WAIT(uint64 instruction, Dis_info *info) 15970 { 15971 uint64 code_value = extract_code_25_24_23_22_21_20_19_18_17_16(instruction); 15972 15973 15974 return img_format("WAIT 0x%" PRIx64, code_value); 15975 } 15976 15977 15978 /* 15979 * [DSP] WRDSP rt, mask - Write selected fields from a GPR to the DSPControl 15980 * register 15981 * 15982 * 3 2 1 15983 * 10987654321098765432109876543210 15984 * 001000 01011001111111 15985 * rt ----- 15986 * mask ------- 15987 */ 15988 static char *WRDSP(uint64 instruction, Dis_info *info) 15989 { 15990 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 15991 uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction); 15992 15993 const char *rt = GPR(rt_value, info); 15994 15995 return img_format("WRDSP %s, 0x%" PRIx64, rt, mask_value); 15996 } 15997 15998 15999 /* 16000 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 16001 * 16002 * 3 2 1 16003 * 10987654321098765432109876543210 16004 * 001000 00010001101 16005 * rt ----- 16006 * rs ----- 16007 * rd ----- 16008 */ 16009 static char *WRPGPR(uint64 instruction, Dis_info *info) 16010 { 16011 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 16012 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 16013 16014 const char *rt = GPR(rt_value, info); 16015 const char *rs = GPR(rs_value, info); 16016 16017 return img_format("WRPGPR %s, %s", rt, rs); 16018 } 16019 16020 16021 /* 16022 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 16023 * 16024 * 3 2 1 16025 * 10987654321098765432109876543210 16026 * 001000 00010001101 16027 * rt ----- 16028 * rs ----- 16029 * rd ----- 16030 */ 16031 static char *XOR_16_(uint64 instruction, Dis_info *info) 16032 { 16033 uint64 rt3_value = extract_rt3_9_8_7(instruction); 16034 uint64 rs3_value = extract_rs3_6_5_4(instruction); 16035 16036 const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info); 16037 const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info); 16038 16039 return img_format("XOR %s, %s", rs3, rt3); 16040 } 16041 16042 16043 /* 16044 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 16045 * 16046 * 3 2 1 16047 * 10987654321098765432109876543210 16048 * 001000 00010001101 16049 * rt ----- 16050 * rs ----- 16051 * rd ----- 16052 */ 16053 static char *XOR_32_(uint64 instruction, Dis_info *info) 16054 { 16055 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 16056 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 16057 uint64 rd_value = extract_rd_15_14_13_12_11(instruction); 16058 16059 const char *rd = GPR(rd_value, info); 16060 const char *rs = GPR(rs_value, info); 16061 const char *rt = GPR(rt_value, info); 16062 16063 return img_format("XOR %s, %s, %s", rd, rs, rt); 16064 } 16065 16066 16067 /* 16068 * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results 16069 * 16070 * 3 2 1 16071 * 10987654321098765432109876543210 16072 * 001000 00010001101 16073 * rt ----- 16074 * rs ----- 16075 * rd ----- 16076 */ 16077 static char *XORI(uint64 instruction, Dis_info *info) 16078 { 16079 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 16080 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 16081 uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction); 16082 16083 const char *rt = GPR(rt_value, info); 16084 const char *rs = GPR(rs_value, info); 16085 16086 return img_format("XORI %s, %s, 0x%" PRIx64, rt, rs, u_value); 16087 } 16088 16089 16090 /* 16091 * YIELD rt, rs - 16092 * 16093 * 3 2 1 16094 * 10987654321098765432109876543210 16095 * 001000 00010001101 16096 * rt ----- 16097 * rs ----- 16098 */ 16099 static char *YIELD(uint64 instruction, Dis_info *info) 16100 { 16101 uint64 rt_value = extract_rt_25_24_23_22_21(instruction); 16102 uint64 rs_value = extract_rs_20_19_18_17_16(instruction); 16103 16104 const char *rt = GPR(rt_value, info); 16105 const char *rs = GPR(rs_value, info); 16106 16107 return img_format("YIELD %s, %s", rt, rs); 16108 } 16109 16110 16111 16112 /* 16113 * nanoMIPS instruction pool organization 16114 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16115 * 16116 * 16117 * ┌─ P.ADDIU ─── P.RI ─── P.SYSCALL 16118 * │ 16119 * │ ┌─ P.TRAP 16120 * │ │ 16121 * │ ┌─ _POOL32A0_0 ─┼─ P.CMOVE 16122 * │ │ │ 16123 * │ │ └─ P.SLTU 16124 * │ ┌─ _POOL32A0 ─┤ 16125 * │ │ │ 16126 * │ │ │ 16127 * │ │ └─ _POOL32A0_1 ─── CRC32 16128 * │ │ 16129 * ├─ P32A ─┤ 16130 * │ │ ┌─ PP.LSX 16131 * │ │ ┌─ P.LSX ─────┤ 16132 * │ │ │ └─ PP.LSXS 16133 * │ └─ _POOL32A7 ─┤ 16134 * │ │ ┌─ POOL32Axf_4 16135 * │ └─ POOL32Axf ─┤ 16136 * │ └─ POOL32Axf_5 16137 * │ 16138 * ├─ PBAL 16139 * │ 16140 * ├─ P.GP.W ┌─ PP.LSX 16141 * ┌─ P32 ─┤ │ 16142 * │ ├─ P.GP.BH ─┴─ PP.LSXS 16143 * │ │ 16144 * │ ├─ P.J ─────── PP.BALRSC 16145 * │ │ 16146 * │ ├─ P48I 16147 * │ │ ┌─ P.SR 16148 * │ │ │ 16149 * │ │ ├─ P.SHIFT 16150 * │ │ │ 16151 * │ ├─ P.U12 ───┼─ P.ROTX 16152 * │ │ │ 16153 * │ │ ├─ P.INS 16154 * │ │ │ 16155 * │ │ └─ P.EXT 16156 * │ │ 16157 * │ ├─ P.LS.U12 ── P.PREF.U12 16158 * │ │ 16159 * │ ├─ P.BR1 ───── P.BR3A 16160 * │ │ 16161 * │ │ ┌─ P.LS.S0 ─── P16.SYSCALL 16162 * │ │ │ 16163 * │ │ │ ┌─ P.LL 16164 * │ │ ├─ P.LS.S1 ─┤ 16165 * │ │ │ └─ P.SC 16166 * │ │ │ 16167 * │ │ │ ┌─ P.PREFE 16168 * MAJOR ─┤ ├─ P.LS.S9 ─┤ │ 16169 * │ │ ├─ P.LS.E0 ─┼─ P.LLE 16170 * │ │ │ │ 16171 * │ │ │ └─ P.SCE 16172 * │ │ │ 16173 * │ │ ├─ P.LS.WM 16174 * │ │ │ 16175 * │ │ └─ P.LS.UAWM 16176 * │ │ 16177 * │ │ 16178 * │ ├─ P.BR2 16179 * │ │ 16180 * │ ├─ P.BRI 16181 * │ │ 16182 * │ └─ P.LUI 16183 * │ 16184 * │ 16185 * │ ┌─ P16.MV ──── P16.RI ─── P16.SYSCALL 16186 * │ │ 16187 * │ ├─ P16.SR 16188 * │ │ 16189 * │ ├─ P16.SHIFT 16190 * │ │ 16191 * │ ├─ P16.4x4 16192 * │ │ 16193 * │ ├─ P16C ────── POOL16C_0 ── POOL16C_00 16194 * │ │ 16195 * └─ P16 ─┼─ P16.LB 16196 * │ 16197 * ├─ P16.A1 16198 * │ 16199 * ├─ P16.LH 16200 * │ 16201 * ├─ P16.A2 ──── P.ADDIU[RS5] 16202 * │ 16203 * ├─ P16.ADDU 16204 * │ 16205 * └─ P16.BR ──┬─ P16.JRC 16206 * │ 16207 * └─ P16.BR1 16208 * 16209 * 16210 * (FP, DPS, and some minor instruction pools are omitted from the diagram) 16211 * 16212 */ 16213 16214 static const Pool P_SYSCALL[2] = { 16215 { instruction , 0 , 0 , 32, 16216 0xfffc0000, 0x00080000, &SYSCALL_32_ , 0, 16217 0x0 }, /* SYSCALL[32] */ 16218 { instruction , 0 , 0 , 32, 16219 0xfffc0000, 0x000c0000, &HYPCALL , 0, 16220 CP0_ | VZ_ }, /* HYPCALL */ 16221 }; 16222 16223 16224 static const Pool P_RI[4] = { 16225 { instruction , 0 , 0 , 32, 16226 0xfff80000, 0x00000000, &SIGRIE , 0, 16227 0x0 }, /* SIGRIE */ 16228 { pool , P_SYSCALL , 2 , 32, 16229 0xfff80000, 0x00080000, 0 , 0, 16230 0x0 }, /* P.SYSCALL */ 16231 { instruction , 0 , 0 , 32, 16232 0xfff80000, 0x00100000, &BREAK_32_ , 0, 16233 0x0 }, /* BREAK[32] */ 16234 { instruction , 0 , 0 , 32, 16235 0xfff80000, 0x00180000, &SDBBP_32_ , 0, 16236 EJTAG_ }, /* SDBBP[32] */ 16237 }; 16238 16239 16240 static const Pool P_ADDIU[2] = { 16241 { pool , P_RI , 4 , 32, 16242 0xffe00000, 0x00000000, 0 , 0, 16243 0x0 }, /* P.RI */ 16244 { instruction , 0 , 0 , 32, 16245 0xfc000000, 0x00000000, &ADDIU_32_ , &ADDIU_32__cond , 16246 0x0 }, /* ADDIU[32] */ 16247 }; 16248 16249 16250 static const Pool P_TRAP[2] = { 16251 { instruction , 0 , 0 , 32, 16252 0xfc0007ff, 0x20000000, &TEQ , 0, 16253 XMMS_ }, /* TEQ */ 16254 { instruction , 0 , 0 , 32, 16255 0xfc0007ff, 0x20000400, &TNE , 0, 16256 XMMS_ }, /* TNE */ 16257 }; 16258 16259 16260 static const Pool P_CMOVE[2] = { 16261 { instruction , 0 , 0 , 32, 16262 0xfc0007ff, 0x20000210, &MOVZ , 0, 16263 0x0 }, /* MOVZ */ 16264 { instruction , 0 , 0 , 32, 16265 0xfc0007ff, 0x20000610, &MOVN , 0, 16266 0x0 }, /* MOVN */ 16267 }; 16268 16269 16270 static const Pool P_D_MT_VPE[2] = { 16271 { instruction , 0 , 0 , 32, 16272 0xfc1f3fff, 0x20010ab0, &DMT , 0, 16273 MT_ }, /* DMT */ 16274 { instruction , 0 , 0 , 32, 16275 0xfc1f3fff, 0x20000ab0, &DVPE , 0, 16276 MT_ }, /* DVPE */ 16277 }; 16278 16279 16280 static const Pool P_E_MT_VPE[2] = { 16281 { instruction , 0 , 0 , 32, 16282 0xfc1f3fff, 0x20010eb0, &EMT , 0, 16283 MT_ }, /* EMT */ 16284 { instruction , 0 , 0 , 32, 16285 0xfc1f3fff, 0x20000eb0, &EVPE , 0, 16286 MT_ }, /* EVPE */ 16287 }; 16288 16289 16290 static const Pool _P_MT_VPE[2] = { 16291 { pool , P_D_MT_VPE , 2 , 32, 16292 0xfc003fff, 0x20000ab0, 0 , 0, 16293 0x0 }, /* P.D_MT_VPE */ 16294 { pool , P_E_MT_VPE , 2 , 32, 16295 0xfc003fff, 0x20000eb0, 0 , 0, 16296 0x0 }, /* P.E_MT_VPE */ 16297 }; 16298 16299 16300 static const Pool P_MT_VPE[8] = { 16301 { reserved_block , 0 , 0 , 32, 16302 0xfc003bff, 0x200002b0, 0 , 0, 16303 0x0 }, /* P.MT_VPE~*(0) */ 16304 { pool , _P_MT_VPE , 2 , 32, 16305 0xfc003bff, 0x20000ab0, 0 , 0, 16306 0x0 }, /* _P.MT_VPE */ 16307 { reserved_block , 0 , 0 , 32, 16308 0xfc003bff, 0x200012b0, 0 , 0, 16309 0x0 }, /* P.MT_VPE~*(2) */ 16310 { reserved_block , 0 , 0 , 32, 16311 0xfc003bff, 0x20001ab0, 0 , 0, 16312 0x0 }, /* P.MT_VPE~*(3) */ 16313 { reserved_block , 0 , 0 , 32, 16314 0xfc003bff, 0x200022b0, 0 , 0, 16315 0x0 }, /* P.MT_VPE~*(4) */ 16316 { reserved_block , 0 , 0 , 32, 16317 0xfc003bff, 0x20002ab0, 0 , 0, 16318 0x0 }, /* P.MT_VPE~*(5) */ 16319 { reserved_block , 0 , 0 , 32, 16320 0xfc003bff, 0x200032b0, 0 , 0, 16321 0x0 }, /* P.MT_VPE~*(6) */ 16322 { reserved_block , 0 , 0 , 32, 16323 0xfc003bff, 0x20003ab0, 0 , 0, 16324 0x0 }, /* P.MT_VPE~*(7) */ 16325 }; 16326 16327 16328 static const Pool P_DVP[2] = { 16329 { instruction , 0 , 0 , 32, 16330 0xfc00ffff, 0x20000390, &DVP , 0, 16331 0x0 }, /* DVP */ 16332 { instruction , 0 , 0 , 32, 16333 0xfc00ffff, 0x20000790, &EVP , 0, 16334 0x0 }, /* EVP */ 16335 }; 16336 16337 16338 static const Pool P_SLTU[2] = { 16339 { pool , P_DVP , 2 , 32, 16340 0xfc00fbff, 0x20000390, 0 , 0, 16341 0x0 }, /* P.DVP */ 16342 { instruction , 0 , 0 , 32, 16343 0xfc0003ff, 0x20000390, &SLTU , &SLTU_cond , 16344 0x0 }, /* SLTU */ 16345 }; 16346 16347 16348 static const Pool _POOL32A0[128] = { 16349 { pool , P_TRAP , 2 , 32, 16350 0xfc0003ff, 0x20000000, 0 , 0, 16351 0x0 }, /* P.TRAP */ 16352 { instruction , 0 , 0 , 32, 16353 0xfc0003ff, 0x20000008, &SEB , 0, 16354 XMMS_ }, /* SEB */ 16355 { instruction , 0 , 0 , 32, 16356 0xfc0003ff, 0x20000010, &SLLV , 0, 16357 0x0 }, /* SLLV */ 16358 { instruction , 0 , 0 , 32, 16359 0xfc0003ff, 0x20000018, &MUL_32_ , 0, 16360 0x0 }, /* MUL[32] */ 16361 { reserved_block , 0 , 0 , 32, 16362 0xfc0003ff, 0x20000020, 0 , 0, 16363 0x0 }, /* _POOL32A0~*(4) */ 16364 { reserved_block , 0 , 0 , 32, 16365 0xfc0003ff, 0x20000028, 0 , 0, 16366 0x0 }, /* _POOL32A0~*(5) */ 16367 { instruction , 0 , 0 , 32, 16368 0xfc0003ff, 0x20000030, &MFC0 , 0, 16369 0x0 }, /* MFC0 */ 16370 { instruction , 0 , 0 , 32, 16371 0xfc0003ff, 0x20000038, &MFHC0 , 0, 16372 CP0_ | MVH_ }, /* MFHC0 */ 16373 { reserved_block , 0 , 0 , 32, 16374 0xfc0003ff, 0x20000040, 0 , 0, 16375 0x0 }, /* _POOL32A0~*(8) */ 16376 { instruction , 0 , 0 , 32, 16377 0xfc0003ff, 0x20000048, &SEH , 0, 16378 0x0 }, /* SEH */ 16379 { instruction , 0 , 0 , 32, 16380 0xfc0003ff, 0x20000050, &SRLV , 0, 16381 0x0 }, /* SRLV */ 16382 { instruction , 0 , 0 , 32, 16383 0xfc0003ff, 0x20000058, &MUH , 0, 16384 0x0 }, /* MUH */ 16385 { reserved_block , 0 , 0 , 32, 16386 0xfc0003ff, 0x20000060, 0 , 0, 16387 0x0 }, /* _POOL32A0~*(12) */ 16388 { reserved_block , 0 , 0 , 32, 16389 0xfc0003ff, 0x20000068, 0 , 0, 16390 0x0 }, /* _POOL32A0~*(13) */ 16391 { instruction , 0 , 0 , 32, 16392 0xfc0003ff, 0x20000070, &MTC0 , 0, 16393 CP0_ }, /* MTC0 */ 16394 { instruction , 0 , 0 , 32, 16395 0xfc0003ff, 0x20000078, &MTHC0 , 0, 16396 CP0_ | MVH_ }, /* MTHC0 */ 16397 { reserved_block , 0 , 0 , 32, 16398 0xfc0003ff, 0x20000080, 0 , 0, 16399 0x0 }, /* _POOL32A0~*(16) */ 16400 { reserved_block , 0 , 0 , 32, 16401 0xfc0003ff, 0x20000088, 0 , 0, 16402 0x0 }, /* _POOL32A0~*(17) */ 16403 { instruction , 0 , 0 , 32, 16404 0xfc0003ff, 0x20000090, &SRAV , 0, 16405 0x0 }, /* SRAV */ 16406 { instruction , 0 , 0 , 32, 16407 0xfc0003ff, 0x20000098, &MULU , 0, 16408 0x0 }, /* MULU */ 16409 { reserved_block , 0 , 0 , 32, 16410 0xfc0003ff, 0x200000a0, 0 , 0, 16411 0x0 }, /* _POOL32A0~*(20) */ 16412 { reserved_block , 0 , 0 , 32, 16413 0xfc0003ff, 0x200000a8, 0 , 0, 16414 0x0 }, /* _POOL32A0~*(21) */ 16415 { instruction , 0 , 0 , 32, 16416 0xfc0003ff, 0x200000b0, &MFGC0 , 0, 16417 CP0_ | VZ_ }, /* MFGC0 */ 16418 { instruction , 0 , 0 , 32, 16419 0xfc0003ff, 0x200000b8, &MFHGC0 , 0, 16420 CP0_ | VZ_ | MVH_ }, /* MFHGC0 */ 16421 { reserved_block , 0 , 0 , 32, 16422 0xfc0003ff, 0x200000c0, 0 , 0, 16423 0x0 }, /* _POOL32A0~*(24) */ 16424 { reserved_block , 0 , 0 , 32, 16425 0xfc0003ff, 0x200000c8, 0 , 0, 16426 0x0 }, /* _POOL32A0~*(25) */ 16427 { instruction , 0 , 0 , 32, 16428 0xfc0003ff, 0x200000d0, &ROTRV , 0, 16429 0x0 }, /* ROTRV */ 16430 { instruction , 0 , 0 , 32, 16431 0xfc0003ff, 0x200000d8, &MUHU , 0, 16432 0x0 }, /* MUHU */ 16433 { reserved_block , 0 , 0 , 32, 16434 0xfc0003ff, 0x200000e0, 0 , 0, 16435 0x0 }, /* _POOL32A0~*(28) */ 16436 { reserved_block , 0 , 0 , 32, 16437 0xfc0003ff, 0x200000e8, 0 , 0, 16438 0x0 }, /* _POOL32A0~*(29) */ 16439 { instruction , 0 , 0 , 32, 16440 0xfc0003ff, 0x200000f0, &MTGC0 , 0, 16441 CP0_ | VZ_ }, /* MTGC0 */ 16442 { instruction , 0 , 0 , 32, 16443 0xfc0003ff, 0x200000f8, &MTHGC0 , 0, 16444 CP0_ | VZ_ | MVH_ }, /* MTHGC0 */ 16445 { reserved_block , 0 , 0 , 32, 16446 0xfc0003ff, 0x20000100, 0 , 0, 16447 0x0 }, /* _POOL32A0~*(32) */ 16448 { reserved_block , 0 , 0 , 32, 16449 0xfc0003ff, 0x20000108, 0 , 0, 16450 0x0 }, /* _POOL32A0~*(33) */ 16451 { instruction , 0 , 0 , 32, 16452 0xfc0003ff, 0x20000110, &ADD , 0, 16453 XMMS_ }, /* ADD */ 16454 { instruction , 0 , 0 , 32, 16455 0xfc0003ff, 0x20000118, &DIV , 0, 16456 0x0 }, /* DIV */ 16457 { reserved_block , 0 , 0 , 32, 16458 0xfc0003ff, 0x20000120, 0 , 0, 16459 0x0 }, /* _POOL32A0~*(36) */ 16460 { reserved_block , 0 , 0 , 32, 16461 0xfc0003ff, 0x20000128, 0 , 0, 16462 0x0 }, /* _POOL32A0~*(37) */ 16463 { instruction , 0 , 0 , 32, 16464 0xfc0003ff, 0x20000130, &DMFC0 , 0, 16465 CP0_ | MIPS64_ }, /* DMFC0 */ 16466 { reserved_block , 0 , 0 , 32, 16467 0xfc0003ff, 0x20000138, 0 , 0, 16468 0x0 }, /* _POOL32A0~*(39) */ 16469 { reserved_block , 0 , 0 , 32, 16470 0xfc0003ff, 0x20000140, 0 , 0, 16471 0x0 }, /* _POOL32A0~*(40) */ 16472 { reserved_block , 0 , 0 , 32, 16473 0xfc0003ff, 0x20000148, 0 , 0, 16474 0x0 }, /* _POOL32A0~*(41) */ 16475 { instruction , 0 , 0 , 32, 16476 0xfc0003ff, 0x20000150, &ADDU_32_ , 0, 16477 0x0 }, /* ADDU[32] */ 16478 { instruction , 0 , 0 , 32, 16479 0xfc0003ff, 0x20000158, &MOD , 0, 16480 0x0 }, /* MOD */ 16481 { reserved_block , 0 , 0 , 32, 16482 0xfc0003ff, 0x20000160, 0 , 0, 16483 0x0 }, /* _POOL32A0~*(44) */ 16484 { reserved_block , 0 , 0 , 32, 16485 0xfc0003ff, 0x20000168, 0 , 0, 16486 0x0 }, /* _POOL32A0~*(45) */ 16487 { instruction , 0 , 0 , 32, 16488 0xfc0003ff, 0x20000170, &DMTC0 , 0, 16489 CP0_ | MIPS64_ }, /* DMTC0 */ 16490 { reserved_block , 0 , 0 , 32, 16491 0xfc0003ff, 0x20000178, 0 , 0, 16492 0x0 }, /* _POOL32A0~*(47) */ 16493 { reserved_block , 0 , 0 , 32, 16494 0xfc0003ff, 0x20000180, 0 , 0, 16495 0x0 }, /* _POOL32A0~*(48) */ 16496 { reserved_block , 0 , 0 , 32, 16497 0xfc0003ff, 0x20000188, 0 , 0, 16498 0x0 }, /* _POOL32A0~*(49) */ 16499 { instruction , 0 , 0 , 32, 16500 0xfc0003ff, 0x20000190, &SUB , 0, 16501 XMMS_ }, /* SUB */ 16502 { instruction , 0 , 0 , 32, 16503 0xfc0003ff, 0x20000198, &DIVU , 0, 16504 0x0 }, /* DIVU */ 16505 { reserved_block , 0 , 0 , 32, 16506 0xfc0003ff, 0x200001a0, 0 , 0, 16507 0x0 }, /* _POOL32A0~*(52) */ 16508 { reserved_block , 0 , 0 , 32, 16509 0xfc0003ff, 0x200001a8, 0 , 0, 16510 0x0 }, /* _POOL32A0~*(53) */ 16511 { instruction , 0 , 0 , 32, 16512 0xfc0003ff, 0x200001b0, &DMFGC0 , 0, 16513 CP0_ | MIPS64_ | VZ_}, /* DMFGC0 */ 16514 { reserved_block , 0 , 0 , 32, 16515 0xfc0003ff, 0x200001b8, 0 , 0, 16516 0x0 }, /* _POOL32A0~*(55) */ 16517 { instruction , 0 , 0 , 32, 16518 0xfc0003ff, 0x200001c0, &RDHWR , 0, 16519 XMMS_ }, /* RDHWR */ 16520 { reserved_block , 0 , 0 , 32, 16521 0xfc0003ff, 0x200001c8, 0 , 0, 16522 0x0 }, /* _POOL32A0~*(57) */ 16523 { instruction , 0 , 0 , 32, 16524 0xfc0003ff, 0x200001d0, &SUBU_32_ , 0, 16525 0x0 }, /* SUBU[32] */ 16526 { instruction , 0 , 0 , 32, 16527 0xfc0003ff, 0x200001d8, &MODU , 0, 16528 0x0 }, /* MODU */ 16529 { reserved_block , 0 , 0 , 32, 16530 0xfc0003ff, 0x200001e0, 0 , 0, 16531 0x0 }, /* _POOL32A0~*(60) */ 16532 { reserved_block , 0 , 0 , 32, 16533 0xfc0003ff, 0x200001e8, 0 , 0, 16534 0x0 }, /* _POOL32A0~*(61) */ 16535 { instruction , 0 , 0 , 32, 16536 0xfc0003ff, 0x200001f0, &DMTGC0 , 0, 16537 CP0_ | MIPS64_ | VZ_}, /* DMTGC0 */ 16538 { reserved_block , 0 , 0 , 32, 16539 0xfc0003ff, 0x200001f8, 0 , 0, 16540 0x0 }, /* _POOL32A0~*(63) */ 16541 { reserved_block , 0 , 0 , 32, 16542 0xfc0003ff, 0x20000200, 0 , 0, 16543 0x0 }, /* _POOL32A0~*(64) */ 16544 { reserved_block , 0 , 0 , 32, 16545 0xfc0003ff, 0x20000208, 0 , 0, 16546 0x0 }, /* _POOL32A0~*(65) */ 16547 { pool , P_CMOVE , 2 , 32, 16548 0xfc0003ff, 0x20000210, 0 , 0, 16549 0x0 }, /* P.CMOVE */ 16550 { reserved_block , 0 , 0 , 32, 16551 0xfc0003ff, 0x20000218, 0 , 0, 16552 0x0 }, /* _POOL32A0~*(67) */ 16553 { reserved_block , 0 , 0 , 32, 16554 0xfc0003ff, 0x20000220, 0 , 0, 16555 0x0 }, /* _POOL32A0~*(68) */ 16556 { instruction , 0 , 0 , 32, 16557 0xfc0003ff, 0x20000228, &FORK , 0, 16558 MT_ }, /* FORK */ 16559 { instruction , 0 , 0 , 32, 16560 0xfc0003ff, 0x20000230, &MFTR , 0, 16561 MT_ }, /* MFTR */ 16562 { instruction , 0 , 0 , 32, 16563 0xfc0003ff, 0x20000238, &MFHTR , 0, 16564 MT_ }, /* MFHTR */ 16565 { reserved_block , 0 , 0 , 32, 16566 0xfc0003ff, 0x20000240, 0 , 0, 16567 0x0 }, /* _POOL32A0~*(72) */ 16568 { reserved_block , 0 , 0 , 32, 16569 0xfc0003ff, 0x20000248, 0 , 0, 16570 0x0 }, /* _POOL32A0~*(73) */ 16571 { instruction , 0 , 0 , 32, 16572 0xfc0003ff, 0x20000250, &AND_32_ , 0, 16573 0x0 }, /* AND[32] */ 16574 { reserved_block , 0 , 0 , 32, 16575 0xfc0003ff, 0x20000258, 0 , 0, 16576 0x0 }, /* _POOL32A0~*(75) */ 16577 { reserved_block , 0 , 0 , 32, 16578 0xfc0003ff, 0x20000260, 0 , 0, 16579 0x0 }, /* _POOL32A0~*(76) */ 16580 { instruction , 0 , 0 , 32, 16581 0xfc0003ff, 0x20000268, &YIELD , 0, 16582 MT_ }, /* YIELD */ 16583 { instruction , 0 , 0 , 32, 16584 0xfc0003ff, 0x20000270, &MTTR , 0, 16585 MT_ }, /* MTTR */ 16586 { instruction , 0 , 0 , 32, 16587 0xfc0003ff, 0x20000278, &MTHTR , 0, 16588 MT_ }, /* MTHTR */ 16589 { reserved_block , 0 , 0 , 32, 16590 0xfc0003ff, 0x20000280, 0 , 0, 16591 0x0 }, /* _POOL32A0~*(80) */ 16592 { reserved_block , 0 , 0 , 32, 16593 0xfc0003ff, 0x20000288, 0 , 0, 16594 0x0 }, /* _POOL32A0~*(81) */ 16595 { instruction , 0 , 0 , 32, 16596 0xfc0003ff, 0x20000290, &OR_32_ , 0, 16597 0x0 }, /* OR[32] */ 16598 { reserved_block , 0 , 0 , 32, 16599 0xfc0003ff, 0x20000298, 0 , 0, 16600 0x0 }, /* _POOL32A0~*(83) */ 16601 { reserved_block , 0 , 0 , 32, 16602 0xfc0003ff, 0x200002a0, 0 , 0, 16603 0x0 }, /* _POOL32A0~*(84) */ 16604 { reserved_block , 0 , 0 , 32, 16605 0xfc0003ff, 0x200002a8, 0 , 0, 16606 0x0 }, /* _POOL32A0~*(85) */ 16607 { pool , P_MT_VPE , 8 , 32, 16608 0xfc0003ff, 0x200002b0, 0 , 0, 16609 0x0 }, /* P.MT_VPE */ 16610 { reserved_block , 0 , 0 , 32, 16611 0xfc0003ff, 0x200002b8, 0 , 0, 16612 0x0 }, /* _POOL32A0~*(87) */ 16613 { reserved_block , 0 , 0 , 32, 16614 0xfc0003ff, 0x200002c0, 0 , 0, 16615 0x0 }, /* _POOL32A0~*(88) */ 16616 { reserved_block , 0 , 0 , 32, 16617 0xfc0003ff, 0x200002c8, 0 , 0, 16618 0x0 }, /* _POOL32A0~*(89) */ 16619 { instruction , 0 , 0 , 32, 16620 0xfc0003ff, 0x200002d0, &NOR , 0, 16621 0x0 }, /* NOR */ 16622 { reserved_block , 0 , 0 , 32, 16623 0xfc0003ff, 0x200002d8, 0 , 0, 16624 0x0 }, /* _POOL32A0~*(91) */ 16625 { reserved_block , 0 , 0 , 32, 16626 0xfc0003ff, 0x200002e0, 0 , 0, 16627 0x0 }, /* _POOL32A0~*(92) */ 16628 { reserved_block , 0 , 0 , 32, 16629 0xfc0003ff, 0x200002e8, 0 , 0, 16630 0x0 }, /* _POOL32A0~*(93) */ 16631 { reserved_block , 0 , 0 , 32, 16632 0xfc0003ff, 0x200002f0, 0 , 0, 16633 0x0 }, /* _POOL32A0~*(94) */ 16634 { reserved_block , 0 , 0 , 32, 16635 0xfc0003ff, 0x200002f8, 0 , 0, 16636 0x0 }, /* _POOL32A0~*(95) */ 16637 { reserved_block , 0 , 0 , 32, 16638 0xfc0003ff, 0x20000300, 0 , 0, 16639 0x0 }, /* _POOL32A0~*(96) */ 16640 { reserved_block , 0 , 0 , 32, 16641 0xfc0003ff, 0x20000308, 0 , 0, 16642 0x0 }, /* _POOL32A0~*(97) */ 16643 { instruction , 0 , 0 , 32, 16644 0xfc0003ff, 0x20000310, &XOR_32_ , 0, 16645 0x0 }, /* XOR[32] */ 16646 { reserved_block , 0 , 0 , 32, 16647 0xfc0003ff, 0x20000318, 0 , 0, 16648 0x0 }, /* _POOL32A0~*(99) */ 16649 { reserved_block , 0 , 0 , 32, 16650 0xfc0003ff, 0x20000320, 0 , 0, 16651 0x0 }, /* _POOL32A0~*(100) */ 16652 { reserved_block , 0 , 0 , 32, 16653 0xfc0003ff, 0x20000328, 0 , 0, 16654 0x0 }, /* _POOL32A0~*(101) */ 16655 { reserved_block , 0 , 0 , 32, 16656 0xfc0003ff, 0x20000330, 0 , 0, 16657 0x0 }, /* _POOL32A0~*(102) */ 16658 { reserved_block , 0 , 0 , 32, 16659 0xfc0003ff, 0x20000338, 0 , 0, 16660 0x0 }, /* _POOL32A0~*(103) */ 16661 { reserved_block , 0 , 0 , 32, 16662 0xfc0003ff, 0x20000340, 0 , 0, 16663 0x0 }, /* _POOL32A0~*(104) */ 16664 { reserved_block , 0 , 0 , 32, 16665 0xfc0003ff, 0x20000348, 0 , 0, 16666 0x0 }, /* _POOL32A0~*(105) */ 16667 { instruction , 0 , 0 , 32, 16668 0xfc0003ff, 0x20000350, &SLT , 0, 16669 0x0 }, /* SLT */ 16670 { reserved_block , 0 , 0 , 32, 16671 0xfc0003ff, 0x20000358, 0 , 0, 16672 0x0 }, /* _POOL32A0~*(107) */ 16673 { reserved_block , 0 , 0 , 32, 16674 0xfc0003ff, 0x20000360, 0 , 0, 16675 0x0 }, /* _POOL32A0~*(108) */ 16676 { reserved_block , 0 , 0 , 32, 16677 0xfc0003ff, 0x20000368, 0 , 0, 16678 0x0 }, /* _POOL32A0~*(109) */ 16679 { reserved_block , 0 , 0 , 32, 16680 0xfc0003ff, 0x20000370, 0 , 0, 16681 0x0 }, /* _POOL32A0~*(110) */ 16682 { reserved_block , 0 , 0 , 32, 16683 0xfc0003ff, 0x20000378, 0 , 0, 16684 0x0 }, /* _POOL32A0~*(111) */ 16685 { reserved_block , 0 , 0 , 32, 16686 0xfc0003ff, 0x20000380, 0 , 0, 16687 0x0 }, /* _POOL32A0~*(112) */ 16688 { reserved_block , 0 , 0 , 32, 16689 0xfc0003ff, 0x20000388, 0 , 0, 16690 0x0 }, /* _POOL32A0~*(113) */ 16691 { pool , P_SLTU , 2 , 32, 16692 0xfc0003ff, 0x20000390, 0 , 0, 16693 0x0 }, /* P.SLTU */ 16694 { reserved_block , 0 , 0 , 32, 16695 0xfc0003ff, 0x20000398, 0 , 0, 16696 0x0 }, /* _POOL32A0~*(115) */ 16697 { reserved_block , 0 , 0 , 32, 16698 0xfc0003ff, 0x200003a0, 0 , 0, 16699 0x0 }, /* _POOL32A0~*(116) */ 16700 { reserved_block , 0 , 0 , 32, 16701 0xfc0003ff, 0x200003a8, 0 , 0, 16702 0x0 }, /* _POOL32A0~*(117) */ 16703 { reserved_block , 0 , 0 , 32, 16704 0xfc0003ff, 0x200003b0, 0 , 0, 16705 0x0 }, /* _POOL32A0~*(118) */ 16706 { reserved_block , 0 , 0 , 32, 16707 0xfc0003ff, 0x200003b8, 0 , 0, 16708 0x0 }, /* _POOL32A0~*(119) */ 16709 { reserved_block , 0 , 0 , 32, 16710 0xfc0003ff, 0x200003c0, 0 , 0, 16711 0x0 }, /* _POOL32A0~*(120) */ 16712 { reserved_block , 0 , 0 , 32, 16713 0xfc0003ff, 0x200003c8, 0 , 0, 16714 0x0 }, /* _POOL32A0~*(121) */ 16715 { instruction , 0 , 0 , 32, 16716 0xfc0003ff, 0x200003d0, &SOV , 0, 16717 0x0 }, /* SOV */ 16718 { reserved_block , 0 , 0 , 32, 16719 0xfc0003ff, 0x200003d8, 0 , 0, 16720 0x0 }, /* _POOL32A0~*(123) */ 16721 { reserved_block , 0 , 0 , 32, 16722 0xfc0003ff, 0x200003e0, 0 , 0, 16723 0x0 }, /* _POOL32A0~*(124) */ 16724 { reserved_block , 0 , 0 , 32, 16725 0xfc0003ff, 0x200003e8, 0 , 0, 16726 0x0 }, /* _POOL32A0~*(125) */ 16727 { reserved_block , 0 , 0 , 32, 16728 0xfc0003ff, 0x200003f0, 0 , 0, 16729 0x0 }, /* _POOL32A0~*(126) */ 16730 { reserved_block , 0 , 0 , 32, 16731 0xfc0003ff, 0x200003f8, 0 , 0, 16732 0x0 }, /* _POOL32A0~*(127) */ 16733 }; 16734 16735 16736 static const Pool ADDQ__S__PH[2] = { 16737 { instruction , 0 , 0 , 32, 16738 0xfc0007ff, 0x2000000d, &ADDQ_PH , 0, 16739 DSP_ }, /* ADDQ.PH */ 16740 { instruction , 0 , 0 , 32, 16741 0xfc0007ff, 0x2000040d, &ADDQ_S_PH , 0, 16742 DSP_ }, /* ADDQ_S.PH */ 16743 }; 16744 16745 16746 static const Pool MUL__S__PH[2] = { 16747 { instruction , 0 , 0 , 32, 16748 0xfc0007ff, 0x2000002d, &MUL_PH , 0, 16749 DSP_ }, /* MUL.PH */ 16750 { instruction , 0 , 0 , 32, 16751 0xfc0007ff, 0x2000042d, &MUL_S_PH , 0, 16752 DSP_ }, /* MUL_S.PH */ 16753 }; 16754 16755 16756 static const Pool ADDQH__R__PH[2] = { 16757 { instruction , 0 , 0 , 32, 16758 0xfc0007ff, 0x2000004d, &ADDQH_PH , 0, 16759 DSP_ }, /* ADDQH.PH */ 16760 { instruction , 0 , 0 , 32, 16761 0xfc0007ff, 0x2000044d, &ADDQH_R_PH , 0, 16762 DSP_ }, /* ADDQH_R.PH */ 16763 }; 16764 16765 16766 static const Pool ADDQH__R__W[2] = { 16767 { instruction , 0 , 0 , 32, 16768 0xfc0007ff, 0x2000008d, &ADDQH_W , 0, 16769 DSP_ }, /* ADDQH.W */ 16770 { instruction , 0 , 0 , 32, 16771 0xfc0007ff, 0x2000048d, &ADDQH_R_W , 0, 16772 DSP_ }, /* ADDQH_R.W */ 16773 }; 16774 16775 16776 static const Pool ADDU__S__QB[2] = { 16777 { instruction , 0 , 0 , 32, 16778 0xfc0007ff, 0x200000cd, &ADDU_QB , 0, 16779 DSP_ }, /* ADDU.QB */ 16780 { instruction , 0 , 0 , 32, 16781 0xfc0007ff, 0x200004cd, &ADDU_S_QB , 0, 16782 DSP_ }, /* ADDU_S.QB */ 16783 }; 16784 16785 16786 static const Pool ADDU__S__PH[2] = { 16787 { instruction , 0 , 0 , 32, 16788 0xfc0007ff, 0x2000010d, &ADDU_PH , 0, 16789 DSP_ }, /* ADDU.PH */ 16790 { instruction , 0 , 0 , 32, 16791 0xfc0007ff, 0x2000050d, &ADDU_S_PH , 0, 16792 DSP_ }, /* ADDU_S.PH */ 16793 }; 16794 16795 16796 static const Pool ADDUH__R__QB[2] = { 16797 { instruction , 0 , 0 , 32, 16798 0xfc0007ff, 0x2000014d, &ADDUH_QB , 0, 16799 DSP_ }, /* ADDUH.QB */ 16800 { instruction , 0 , 0 , 32, 16801 0xfc0007ff, 0x2000054d, &ADDUH_R_QB , 0, 16802 DSP_ }, /* ADDUH_R.QB */ 16803 }; 16804 16805 16806 static const Pool SHRAV__R__PH[2] = { 16807 { instruction , 0 , 0 , 32, 16808 0xfc0007ff, 0x2000018d, &SHRAV_PH , 0, 16809 DSP_ }, /* SHRAV.PH */ 16810 { instruction , 0 , 0 , 32, 16811 0xfc0007ff, 0x2000058d, &SHRAV_R_PH , 0, 16812 DSP_ }, /* SHRAV_R.PH */ 16813 }; 16814 16815 16816 static const Pool SHRAV__R__QB[2] = { 16817 { instruction , 0 , 0 , 32, 16818 0xfc0007ff, 0x200001cd, &SHRAV_QB , 0, 16819 DSP_ }, /* SHRAV.QB */ 16820 { instruction , 0 , 0 , 32, 16821 0xfc0007ff, 0x200005cd, &SHRAV_R_QB , 0, 16822 DSP_ }, /* SHRAV_R.QB */ 16823 }; 16824 16825 16826 static const Pool SUBQ__S__PH[2] = { 16827 { instruction , 0 , 0 , 32, 16828 0xfc0007ff, 0x2000020d, &SUBQ_PH , 0, 16829 DSP_ }, /* SUBQ.PH */ 16830 { instruction , 0 , 0 , 32, 16831 0xfc0007ff, 0x2000060d, &SUBQ_S_PH , 0, 16832 DSP_ }, /* SUBQ_S.PH */ 16833 }; 16834 16835 16836 static const Pool SUBQH__R__PH[2] = { 16837 { instruction , 0 , 0 , 32, 16838 0xfc0007ff, 0x2000024d, &SUBQH_PH , 0, 16839 DSP_ }, /* SUBQH.PH */ 16840 { instruction , 0 , 0 , 32, 16841 0xfc0007ff, 0x2000064d, &SUBQH_R_PH , 0, 16842 DSP_ }, /* SUBQH_R.PH */ 16843 }; 16844 16845 16846 static const Pool SUBQH__R__W[2] = { 16847 { instruction , 0 , 0 , 32, 16848 0xfc0007ff, 0x2000028d, &SUBQH_W , 0, 16849 DSP_ }, /* SUBQH.W */ 16850 { instruction , 0 , 0 , 32, 16851 0xfc0007ff, 0x2000068d, &SUBQH_R_W , 0, 16852 DSP_ }, /* SUBQH_R.W */ 16853 }; 16854 16855 16856 static const Pool SUBU__S__QB[2] = { 16857 { instruction , 0 , 0 , 32, 16858 0xfc0007ff, 0x200002cd, &SUBU_QB , 0, 16859 DSP_ }, /* SUBU.QB */ 16860 { instruction , 0 , 0 , 32, 16861 0xfc0007ff, 0x200006cd, &SUBU_S_QB , 0, 16862 DSP_ }, /* SUBU_S.QB */ 16863 }; 16864 16865 16866 static const Pool SUBU__S__PH[2] = { 16867 { instruction , 0 , 0 , 32, 16868 0xfc0007ff, 0x2000030d, &SUBU_PH , 0, 16869 DSP_ }, /* SUBU.PH */ 16870 { instruction , 0 , 0 , 32, 16871 0xfc0007ff, 0x2000070d, &SUBU_S_PH , 0, 16872 DSP_ }, /* SUBU_S.PH */ 16873 }; 16874 16875 16876 static const Pool SHRA__R__PH[2] = { 16877 { instruction , 0 , 0 , 32, 16878 0xfc0007ff, 0x20000335, &SHRA_PH , 0, 16879 DSP_ }, /* SHRA.PH */ 16880 { instruction , 0 , 0 , 32, 16881 0xfc0007ff, 0x20000735, &SHRA_R_PH , 0, 16882 DSP_ }, /* SHRA_R.PH */ 16883 }; 16884 16885 16886 static const Pool SUBUH__R__QB[2] = { 16887 { instruction , 0 , 0 , 32, 16888 0xfc0007ff, 0x2000034d, &SUBUH_QB , 0, 16889 DSP_ }, /* SUBUH.QB */ 16890 { instruction , 0 , 0 , 32, 16891 0xfc0007ff, 0x2000074d, &SUBUH_R_QB , 0, 16892 DSP_ }, /* SUBUH_R.QB */ 16893 }; 16894 16895 16896 static const Pool SHLLV__S__PH[2] = { 16897 { instruction , 0 , 0 , 32, 16898 0xfc0007ff, 0x2000038d, &SHLLV_PH , 0, 16899 DSP_ }, /* SHLLV.PH */ 16900 { instruction , 0 , 0 , 32, 16901 0xfc0007ff, 0x2000078d, &SHLLV_S_PH , 0, 16902 DSP_ }, /* SHLLV_S.PH */ 16903 }; 16904 16905 16906 static const Pool SHLL__S__PH[4] = { 16907 { instruction , 0 , 0 , 32, 16908 0xfc000fff, 0x200003b5, &SHLL_PH , 0, 16909 DSP_ }, /* SHLL.PH */ 16910 { reserved_block , 0 , 0 , 32, 16911 0xfc000fff, 0x200007b5, 0 , 0, 16912 0x0 }, /* SHLL[_S].PH~*(1) */ 16913 { instruction , 0 , 0 , 32, 16914 0xfc000fff, 0x20000bb5, &SHLL_S_PH , 0, 16915 DSP_ }, /* SHLL_S.PH */ 16916 { reserved_block , 0 , 0 , 32, 16917 0xfc000fff, 0x20000fb5, 0 , 0, 16918 0x0 }, /* SHLL[_S].PH~*(3) */ 16919 }; 16920 16921 16922 static const Pool PRECR_SRA__R__PH_W[2] = { 16923 { instruction , 0 , 0 , 32, 16924 0xfc0007ff, 0x200003cd, &PRECR_SRA_PH_W , 0, 16925 DSP_ }, /* PRECR_SRA.PH.W */ 16926 { instruction , 0 , 0 , 32, 16927 0xfc0007ff, 0x200007cd, &PRECR_SRA_R_PH_W , 0, 16928 DSP_ }, /* PRECR_SRA_R.PH.W */ 16929 }; 16930 16931 16932 static const Pool _POOL32A5[128] = { 16933 { instruction , 0 , 0 , 32, 16934 0xfc0003ff, 0x20000005, &CMP_EQ_PH , 0, 16935 DSP_ }, /* CMP.EQ.PH */ 16936 { pool , ADDQ__S__PH , 2 , 32, 16937 0xfc0003ff, 0x2000000d, 0 , 0, 16938 0x0 }, /* ADDQ[_S].PH */ 16939 { reserved_block , 0 , 0 , 32, 16940 0xfc0003ff, 0x20000015, 0 , 0, 16941 0x0 }, /* _POOL32A5~*(2) */ 16942 { instruction , 0 , 0 , 32, 16943 0xfc0003ff, 0x2000001d, &SHILO , 0, 16944 DSP_ }, /* SHILO */ 16945 { instruction , 0 , 0 , 32, 16946 0xfc0003ff, 0x20000025, &MULEQ_S_W_PHL , 0, 16947 DSP_ }, /* MULEQ_S.W.PHL */ 16948 { pool , MUL__S__PH , 2 , 32, 16949 0xfc0003ff, 0x2000002d, 0 , 0, 16950 0x0 }, /* MUL[_S].PH */ 16951 { reserved_block , 0 , 0 , 32, 16952 0xfc0003ff, 0x20000035, 0 , 0, 16953 0x0 }, /* _POOL32A5~*(6) */ 16954 { instruction , 0 , 0 , 32, 16955 0xfc0003ff, 0x2000003d, &REPL_PH , 0, 16956 DSP_ }, /* REPL.PH */ 16957 { instruction , 0 , 0 , 32, 16958 0xfc0003ff, 0x20000045, &CMP_LT_PH , 0, 16959 DSP_ }, /* CMP.LT.PH */ 16960 { pool , ADDQH__R__PH , 2 , 32, 16961 0xfc0003ff, 0x2000004d, 0 , 0, 16962 0x0 }, /* ADDQH[_R].PH */ 16963 { reserved_block , 0 , 0 , 32, 16964 0xfc0003ff, 0x20000055, 0 , 0, 16965 0x0 }, /* _POOL32A5~*(10) */ 16966 { reserved_block , 0 , 0 , 32, 16967 0xfc0003ff, 0x2000005d, 0 , 0, 16968 0x0 }, /* _POOL32A5~*(11) */ 16969 { instruction , 0 , 0 , 32, 16970 0xfc0003ff, 0x20000065, &MULEQ_S_W_PHR , 0, 16971 DSP_ }, /* MULEQ_S.W.PHR */ 16972 { instruction , 0 , 0 , 32, 16973 0xfc0003ff, 0x2000006d, &PRECR_QB_PH , 0, 16974 DSP_ }, /* PRECR.QB.PH */ 16975 { reserved_block , 0 , 0 , 32, 16976 0xfc0003ff, 0x20000075, 0 , 0, 16977 0x0 }, /* _POOL32A5~*(14) */ 16978 { reserved_block , 0 , 0 , 32, 16979 0xfc0003ff, 0x2000007d, 0 , 0, 16980 0x0 }, /* _POOL32A5~*(15) */ 16981 { instruction , 0 , 0 , 32, 16982 0xfc0003ff, 0x20000085, &CMP_LE_PH , 0, 16983 DSP_ }, /* CMP.LE.PH */ 16984 { pool , ADDQH__R__W , 2 , 32, 16985 0xfc0003ff, 0x2000008d, 0 , 0, 16986 0x0 }, /* ADDQH[_R].W */ 16987 { instruction , 0 , 0 , 32, 16988 0xfc0003ff, 0x20000095, &MULEU_S_PH_QBL , 0, 16989 DSP_ }, /* MULEU_S.PH.QBL */ 16990 { reserved_block , 0 , 0 , 32, 16991 0xfc0003ff, 0x2000009d, 0 , 0, 16992 0x0 }, /* _POOL32A5~*(19) */ 16993 { reserved_block , 0 , 0 , 32, 16994 0xfc0003ff, 0x200000a5, 0 , 0, 16995 0x0 }, /* _POOL32A5~*(20) */ 16996 { instruction , 0 , 0 , 32, 16997 0xfc0003ff, 0x200000ad, &PRECRQ_QB_PH , 0, 16998 DSP_ }, /* PRECRQ.QB.PH */ 16999 { reserved_block , 0 , 0 , 32, 17000 0xfc0003ff, 0x200000b5, 0 , 0, 17001 0x0 }, /* _POOL32A5~*(22) */ 17002 { reserved_block , 0 , 0 , 32, 17003 0xfc0003ff, 0x200000bd, 0 , 0, 17004 0x0 }, /* _POOL32A5~*(23) */ 17005 { instruction , 0 , 0 , 32, 17006 0xfc0003ff, 0x200000c5, &CMPGU_EQ_QB , 0, 17007 DSP_ }, /* CMPGU.EQ.QB */ 17008 { pool , ADDU__S__QB , 2 , 32, 17009 0xfc0003ff, 0x200000cd, 0 , 0, 17010 0x0 }, /* ADDU[_S].QB */ 17011 { instruction , 0 , 0 , 32, 17012 0xfc0003ff, 0x200000d5, &MULEU_S_PH_QBR , 0, 17013 DSP_ }, /* MULEU_S.PH.QBR */ 17014 { reserved_block , 0 , 0 , 32, 17015 0xfc0003ff, 0x200000dd, 0 , 0, 17016 0x0 }, /* _POOL32A5~*(27) */ 17017 { reserved_block , 0 , 0 , 32, 17018 0xfc0003ff, 0x200000e5, 0 , 0, 17019 0x0 }, /* _POOL32A5~*(28) */ 17020 { instruction , 0 , 0 , 32, 17021 0xfc0003ff, 0x200000ed, &PRECRQ_PH_W , 0, 17022 DSP_ }, /* PRECRQ.PH.W */ 17023 { reserved_block , 0 , 0 , 32, 17024 0xfc0003ff, 0x200000f5, 0 , 0, 17025 0x0 }, /* _POOL32A5~*(30) */ 17026 { reserved_block , 0 , 0 , 32, 17027 0xfc0003ff, 0x200000fd, 0 , 0, 17028 0x0 }, /* _POOL32A5~*(31) */ 17029 { instruction , 0 , 0 , 32, 17030 0xfc0003ff, 0x20000105, &CMPGU_LT_QB , 0, 17031 DSP_ }, /* CMPGU.LT.QB */ 17032 { pool , ADDU__S__PH , 2 , 32, 17033 0xfc0003ff, 0x2000010d, 0 , 0, 17034 0x0 }, /* ADDU[_S].PH */ 17035 { instruction , 0 , 0 , 32, 17036 0xfc0003ff, 0x20000115, &MULQ_RS_PH , 0, 17037 DSP_ }, /* MULQ_RS.PH */ 17038 { reserved_block , 0 , 0 , 32, 17039 0xfc0003ff, 0x2000011d, 0 , 0, 17040 0x0 }, /* _POOL32A5~*(35) */ 17041 { reserved_block , 0 , 0 , 32, 17042 0xfc0003ff, 0x20000125, 0 , 0, 17043 0x0 }, /* _POOL32A5~*(36) */ 17044 { instruction , 0 , 0 , 32, 17045 0xfc0003ff, 0x2000012d, &PRECRQ_RS_PH_W , 0, 17046 DSP_ }, /* PRECRQ_RS.PH.W */ 17047 { reserved_block , 0 , 0 , 32, 17048 0xfc0003ff, 0x20000135, 0 , 0, 17049 0x0 }, /* _POOL32A5~*(38) */ 17050 { reserved_block , 0 , 0 , 32, 17051 0xfc0003ff, 0x2000013d, 0 , 0, 17052 0x0 }, /* _POOL32A5~*(39) */ 17053 { instruction , 0 , 0 , 32, 17054 0xfc0003ff, 0x20000145, &CMPGU_LE_QB , 0, 17055 DSP_ }, /* CMPGU.LE.QB */ 17056 { pool , ADDUH__R__QB , 2 , 32, 17057 0xfc0003ff, 0x2000014d, 0 , 0, 17058 0x0 }, /* ADDUH[_R].QB */ 17059 { instruction , 0 , 0 , 32, 17060 0xfc0003ff, 0x20000155, &MULQ_S_PH , 0, 17061 DSP_ }, /* MULQ_S.PH */ 17062 { reserved_block , 0 , 0 , 32, 17063 0xfc0003ff, 0x2000015d, 0 , 0, 17064 0x0 }, /* _POOL32A5~*(43) */ 17065 { reserved_block , 0 , 0 , 32, 17066 0xfc0003ff, 0x20000165, 0 , 0, 17067 0x0 }, /* _POOL32A5~*(44) */ 17068 { instruction , 0 , 0 , 32, 17069 0xfc0003ff, 0x2000016d, &PRECRQU_S_QB_PH , 0, 17070 DSP_ }, /* PRECRQU_S.QB.PH */ 17071 { reserved_block , 0 , 0 , 32, 17072 0xfc0003ff, 0x20000175, 0 , 0, 17073 0x0 }, /* _POOL32A5~*(46) */ 17074 { reserved_block , 0 , 0 , 32, 17075 0xfc0003ff, 0x2000017d, 0 , 0, 17076 0x0 }, /* _POOL32A5~*(47) */ 17077 { instruction , 0 , 0 , 32, 17078 0xfc0003ff, 0x20000185, &CMPGDU_EQ_QB , 0, 17079 DSP_ }, /* CMPGDU.EQ.QB */ 17080 { pool , SHRAV__R__PH , 2 , 32, 17081 0xfc0003ff, 0x2000018d, 0 , 0, 17082 0x0 }, /* SHRAV[_R].PH */ 17083 { instruction , 0 , 0 , 32, 17084 0xfc0003ff, 0x20000195, &MULQ_RS_W , 0, 17085 DSP_ }, /* MULQ_RS.W */ 17086 { reserved_block , 0 , 0 , 32, 17087 0xfc0003ff, 0x2000019d, 0 , 0, 17088 0x0 }, /* _POOL32A5~*(51) */ 17089 { reserved_block , 0 , 0 , 32, 17090 0xfc0003ff, 0x200001a5, 0 , 0, 17091 0x0 }, /* _POOL32A5~*(52) */ 17092 { instruction , 0 , 0 , 32, 17093 0xfc0003ff, 0x200001ad, &PACKRL_PH , 0, 17094 DSP_ }, /* PACKRL.PH */ 17095 { reserved_block , 0 , 0 , 32, 17096 0xfc0003ff, 0x200001b5, 0 , 0, 17097 0x0 }, /* _POOL32A5~*(54) */ 17098 { reserved_block , 0 , 0 , 32, 17099 0xfc0003ff, 0x200001bd, 0 , 0, 17100 0x0 }, /* _POOL32A5~*(55) */ 17101 { instruction , 0 , 0 , 32, 17102 0xfc0003ff, 0x200001c5, &CMPGDU_LT_QB , 0, 17103 DSP_ }, /* CMPGDU.LT.QB */ 17104 { pool , SHRAV__R__QB , 2 , 32, 17105 0xfc0003ff, 0x200001cd, 0 , 0, 17106 0x0 }, /* SHRAV[_R].QB */ 17107 { instruction , 0 , 0 , 32, 17108 0xfc0003ff, 0x200001d5, &MULQ_S_W , 0, 17109 DSP_ }, /* MULQ_S.W */ 17110 { reserved_block , 0 , 0 , 32, 17111 0xfc0003ff, 0x200001dd, 0 , 0, 17112 0x0 }, /* _POOL32A5~*(59) */ 17113 { reserved_block , 0 , 0 , 32, 17114 0xfc0003ff, 0x200001e5, 0 , 0, 17115 0x0 }, /* _POOL32A5~*(60) */ 17116 { instruction , 0 , 0 , 32, 17117 0xfc0003ff, 0x200001ed, &PICK_QB , 0, 17118 DSP_ }, /* PICK.QB */ 17119 { reserved_block , 0 , 0 , 32, 17120 0xfc0003ff, 0x200001f5, 0 , 0, 17121 0x0 }, /* _POOL32A5~*(62) */ 17122 { reserved_block , 0 , 0 , 32, 17123 0xfc0003ff, 0x200001fd, 0 , 0, 17124 0x0 }, /* _POOL32A5~*(63) */ 17125 { instruction , 0 , 0 , 32, 17126 0xfc0003ff, 0x20000205, &CMPGDU_LE_QB , 0, 17127 DSP_ }, /* CMPGDU.LE.QB */ 17128 { pool , SUBQ__S__PH , 2 , 32, 17129 0xfc0003ff, 0x2000020d, 0 , 0, 17130 0x0 }, /* SUBQ[_S].PH */ 17131 { instruction , 0 , 0 , 32, 17132 0xfc0003ff, 0x20000215, &APPEND , 0, 17133 DSP_ }, /* APPEND */ 17134 { reserved_block , 0 , 0 , 32, 17135 0xfc0003ff, 0x2000021d, 0 , 0, 17136 0x0 }, /* _POOL32A5~*(67) */ 17137 { reserved_block , 0 , 0 , 32, 17138 0xfc0003ff, 0x20000225, 0 , 0, 17139 0x0 }, /* _POOL32A5~*(68) */ 17140 { instruction , 0 , 0 , 32, 17141 0xfc0003ff, 0x2000022d, &PICK_PH , 0, 17142 DSP_ }, /* PICK.PH */ 17143 { reserved_block , 0 , 0 , 32, 17144 0xfc0003ff, 0x20000235, 0 , 0, 17145 0x0 }, /* _POOL32A5~*(70) */ 17146 { reserved_block , 0 , 0 , 32, 17147 0xfc0003ff, 0x2000023d, 0 , 0, 17148 0x0 }, /* _POOL32A5~*(71) */ 17149 { instruction , 0 , 0 , 32, 17150 0xfc0003ff, 0x20000245, &CMPU_EQ_QB , 0, 17151 DSP_ }, /* CMPU.EQ.QB */ 17152 { pool , SUBQH__R__PH , 2 , 32, 17153 0xfc0003ff, 0x2000024d, 0 , 0, 17154 0x0 }, /* SUBQH[_R].PH */ 17155 { instruction , 0 , 0 , 32, 17156 0xfc0003ff, 0x20000255, &PREPEND , 0, 17157 DSP_ }, /* PREPEND */ 17158 { reserved_block , 0 , 0 , 32, 17159 0xfc0003ff, 0x2000025d, 0 , 0, 17160 0x0 }, /* _POOL32A5~*(75) */ 17161 { reserved_block , 0 , 0 , 32, 17162 0xfc0003ff, 0x20000265, 0 , 0, 17163 0x0 }, /* _POOL32A5~*(76) */ 17164 { reserved_block , 0 , 0 , 32, 17165 0xfc0003ff, 0x2000026d, 0 , 0, 17166 0x0 }, /* _POOL32A5~*(77) */ 17167 { reserved_block , 0 , 0 , 32, 17168 0xfc0003ff, 0x20000275, 0 , 0, 17169 0x0 }, /* _POOL32A5~*(78) */ 17170 { reserved_block , 0 , 0 , 32, 17171 0xfc0003ff, 0x2000027d, 0 , 0, 17172 0x0 }, /* _POOL32A5~*(79) */ 17173 { instruction , 0 , 0 , 32, 17174 0xfc0003ff, 0x20000285, &CMPU_LT_QB , 0, 17175 DSP_ }, /* CMPU.LT.QB */ 17176 { pool , SUBQH__R__W , 2 , 32, 17177 0xfc0003ff, 0x2000028d, 0 , 0, 17178 0x0 }, /* SUBQH[_R].W */ 17179 { instruction , 0 , 0 , 32, 17180 0xfc0003ff, 0x20000295, &MODSUB , 0, 17181 DSP_ }, /* MODSUB */ 17182 { reserved_block , 0 , 0 , 32, 17183 0xfc0003ff, 0x2000029d, 0 , 0, 17184 0x0 }, /* _POOL32A5~*(83) */ 17185 { reserved_block , 0 , 0 , 32, 17186 0xfc0003ff, 0x200002a5, 0 , 0, 17187 0x0 }, /* _POOL32A5~*(84) */ 17188 { reserved_block , 0 , 0 , 32, 17189 0xfc0003ff, 0x200002ad, 0 , 0, 17190 0x0 }, /* _POOL32A5~*(85) */ 17191 { reserved_block , 0 , 0 , 32, 17192 0xfc0003ff, 0x200002b5, 0 , 0, 17193 0x0 }, /* _POOL32A5~*(86) */ 17194 { reserved_block , 0 , 0 , 32, 17195 0xfc0003ff, 0x200002bd, 0 , 0, 17196 0x0 }, /* _POOL32A5~*(87) */ 17197 { instruction , 0 , 0 , 32, 17198 0xfc0003ff, 0x200002c5, &CMPU_LE_QB , 0, 17199 DSP_ }, /* CMPU.LE.QB */ 17200 { pool , SUBU__S__QB , 2 , 32, 17201 0xfc0003ff, 0x200002cd, 0 , 0, 17202 0x0 }, /* SUBU[_S].QB */ 17203 { instruction , 0 , 0 , 32, 17204 0xfc0003ff, 0x200002d5, &SHRAV_R_W , 0, 17205 DSP_ }, /* SHRAV_R.W */ 17206 { reserved_block , 0 , 0 , 32, 17207 0xfc0003ff, 0x200002dd, 0 , 0, 17208 0x0 }, /* _POOL32A5~*(91) */ 17209 { reserved_block , 0 , 0 , 32, 17210 0xfc0003ff, 0x200002e5, 0 , 0, 17211 0x0 }, /* _POOL32A5~*(92) */ 17212 { reserved_block , 0 , 0 , 32, 17213 0xfc0003ff, 0x200002ed, 0 , 0, 17214 0x0 }, /* _POOL32A5~*(93) */ 17215 { instruction , 0 , 0 , 32, 17216 0xfc0003ff, 0x200002f5, &SHRA_R_W , 0, 17217 DSP_ }, /* SHRA_R.W */ 17218 { reserved_block , 0 , 0 , 32, 17219 0xfc0003ff, 0x200002fd, 0 , 0, 17220 0x0 }, /* _POOL32A5~*(95) */ 17221 { instruction , 0 , 0 , 32, 17222 0xfc0003ff, 0x20000305, &ADDQ_S_W , 0, 17223 DSP_ }, /* ADDQ_S.W */ 17224 { pool , SUBU__S__PH , 2 , 32, 17225 0xfc0003ff, 0x2000030d, 0 , 0, 17226 0x0 }, /* SUBU[_S].PH */ 17227 { instruction , 0 , 0 , 32, 17228 0xfc0003ff, 0x20000315, &SHRLV_PH , 0, 17229 DSP_ }, /* SHRLV.PH */ 17230 { reserved_block , 0 , 0 , 32, 17231 0xfc0003ff, 0x2000031d, 0 , 0, 17232 0x0 }, /* _POOL32A5~*(99) */ 17233 { reserved_block , 0 , 0 , 32, 17234 0xfc0003ff, 0x20000325, 0 , 0, 17235 0x0 }, /* _POOL32A5~*(100) */ 17236 { reserved_block , 0 , 0 , 32, 17237 0xfc0003ff, 0x2000032d, 0 , 0, 17238 0x0 }, /* _POOL32A5~*(101) */ 17239 { pool , SHRA__R__PH , 2 , 32, 17240 0xfc0003ff, 0x20000335, 0 , 0, 17241 0x0 }, /* SHRA[_R].PH */ 17242 { reserved_block , 0 , 0 , 32, 17243 0xfc0003ff, 0x2000033d, 0 , 0, 17244 0x0 }, /* _POOL32A5~*(103) */ 17245 { instruction , 0 , 0 , 32, 17246 0xfc0003ff, 0x20000345, &SUBQ_S_W , 0, 17247 DSP_ }, /* SUBQ_S.W */ 17248 { pool , SUBUH__R__QB , 2 , 32, 17249 0xfc0003ff, 0x2000034d, 0 , 0, 17250 0x0 }, /* SUBUH[_R].QB */ 17251 { instruction , 0 , 0 , 32, 17252 0xfc0003ff, 0x20000355, &SHRLV_QB , 0, 17253 DSP_ }, /* SHRLV.QB */ 17254 { reserved_block , 0 , 0 , 32, 17255 0xfc0003ff, 0x2000035d, 0 , 0, 17256 0x0 }, /* _POOL32A5~*(107) */ 17257 { reserved_block , 0 , 0 , 32, 17258 0xfc0003ff, 0x20000365, 0 , 0, 17259 0x0 }, /* _POOL32A5~*(108) */ 17260 { reserved_block , 0 , 0 , 32, 17261 0xfc0003ff, 0x2000036d, 0 , 0, 17262 0x0 }, /* _POOL32A5~*(109) */ 17263 { reserved_block , 0 , 0 , 32, 17264 0xfc0003ff, 0x20000375, 0 , 0, 17265 0x0 }, /* _POOL32A5~*(110) */ 17266 { reserved_block , 0 , 0 , 32, 17267 0xfc0003ff, 0x2000037d, 0 , 0, 17268 0x0 }, /* _POOL32A5~*(111) */ 17269 { instruction , 0 , 0 , 32, 17270 0xfc0003ff, 0x20000385, &ADDSC , 0, 17271 DSP_ }, /* ADDSC */ 17272 { pool , SHLLV__S__PH , 2 , 32, 17273 0xfc0003ff, 0x2000038d, 0 , 0, 17274 0x0 }, /* SHLLV[_S].PH */ 17275 { instruction , 0 , 0 , 32, 17276 0xfc0003ff, 0x20000395, &SHLLV_QB , 0, 17277 DSP_ }, /* SHLLV.QB */ 17278 { reserved_block , 0 , 0 , 32, 17279 0xfc0003ff, 0x2000039d, 0 , 0, 17280 0x0 }, /* _POOL32A5~*(115) */ 17281 { reserved_block , 0 , 0 , 32, 17282 0xfc0003ff, 0x200003a5, 0 , 0, 17283 0x0 }, /* _POOL32A5~*(116) */ 17284 { reserved_block , 0 , 0 , 32, 17285 0xfc0003ff, 0x200003ad, 0 , 0, 17286 0x0 }, /* _POOL32A5~*(117) */ 17287 { pool , SHLL__S__PH , 4 , 32, 17288 0xfc0003ff, 0x200003b5, 0 , 0, 17289 0x0 }, /* SHLL[_S].PH */ 17290 { reserved_block , 0 , 0 , 32, 17291 0xfc0003ff, 0x200003bd, 0 , 0, 17292 0x0 }, /* _POOL32A5~*(119) */ 17293 { instruction , 0 , 0 , 32, 17294 0xfc0003ff, 0x200003c5, &ADDWC , 0, 17295 DSP_ }, /* ADDWC */ 17296 { pool , PRECR_SRA__R__PH_W , 2 , 32, 17297 0xfc0003ff, 0x200003cd, 0 , 0, 17298 0x0 }, /* PRECR_SRA[_R].PH.W */ 17299 { instruction , 0 , 0 , 32, 17300 0xfc0003ff, 0x200003d5, &SHLLV_S_W , 0, 17301 DSP_ }, /* SHLLV_S.W */ 17302 { reserved_block , 0 , 0 , 32, 17303 0xfc0003ff, 0x200003dd, 0 , 0, 17304 0x0 }, /* _POOL32A5~*(123) */ 17305 { reserved_block , 0 , 0 , 32, 17306 0xfc0003ff, 0x200003e5, 0 , 0, 17307 0x0 }, /* _POOL32A5~*(124) */ 17308 { reserved_block , 0 , 0 , 32, 17309 0xfc0003ff, 0x200003ed, 0 , 0, 17310 0x0 }, /* _POOL32A5~*(125) */ 17311 { instruction , 0 , 0 , 32, 17312 0xfc0003ff, 0x200003f5, &SHLL_S_W , 0, 17313 DSP_ }, /* SHLL_S.W */ 17314 { reserved_block , 0 , 0 , 32, 17315 0xfc0003ff, 0x200003fd, 0 , 0, 17316 0x0 }, /* _POOL32A5~*(127) */ 17317 }; 17318 17319 17320 static const Pool PP_LSX[16] = { 17321 { instruction , 0 , 0 , 32, 17322 0xfc0007ff, 0x20000007, &LBX , 0, 17323 0x0 }, /* LBX */ 17324 { instruction , 0 , 0 , 32, 17325 0xfc0007ff, 0x20000087, &SBX , 0, 17326 XMMS_ }, /* SBX */ 17327 { instruction , 0 , 0 , 32, 17328 0xfc0007ff, 0x20000107, &LBUX , 0, 17329 0x0 }, /* LBUX */ 17330 { reserved_block , 0 , 0 , 32, 17331 0xfc0007ff, 0x20000187, 0 , 0, 17332 0x0 }, /* PP.LSX~*(3) */ 17333 { instruction , 0 , 0 , 32, 17334 0xfc0007ff, 0x20000207, &LHX , 0, 17335 0x0 }, /* LHX */ 17336 { instruction , 0 , 0 , 32, 17337 0xfc0007ff, 0x20000287, &SHX , 0, 17338 XMMS_ }, /* SHX */ 17339 { instruction , 0 , 0 , 32, 17340 0xfc0007ff, 0x20000307, &LHUX , 0, 17341 0x0 }, /* LHUX */ 17342 { instruction , 0 , 0 , 32, 17343 0xfc0007ff, 0x20000387, &LWUX , 0, 17344 MIPS64_ }, /* LWUX */ 17345 { instruction , 0 , 0 , 32, 17346 0xfc0007ff, 0x20000407, &LWX , 0, 17347 0x0 }, /* LWX */ 17348 { instruction , 0 , 0 , 32, 17349 0xfc0007ff, 0x20000487, &SWX , 0, 17350 XMMS_ }, /* SWX */ 17351 { instruction , 0 , 0 , 32, 17352 0xfc0007ff, 0x20000507, &LWC1X , 0, 17353 CP1_ }, /* LWC1X */ 17354 { instruction , 0 , 0 , 32, 17355 0xfc0007ff, 0x20000587, &SWC1X , 0, 17356 CP1_ }, /* SWC1X */ 17357 { instruction , 0 , 0 , 32, 17358 0xfc0007ff, 0x20000607, &LDX , 0, 17359 MIPS64_ }, /* LDX */ 17360 { instruction , 0 , 0 , 32, 17361 0xfc0007ff, 0x20000687, &SDX , 0, 17362 MIPS64_ }, /* SDX */ 17363 { instruction , 0 , 0 , 32, 17364 0xfc0007ff, 0x20000707, &LDC1X , 0, 17365 CP1_ }, /* LDC1X */ 17366 { instruction , 0 , 0 , 32, 17367 0xfc0007ff, 0x20000787, &SDC1X , 0, 17368 CP1_ }, /* SDC1X */ 17369 }; 17370 17371 17372 static const Pool PP_LSXS[16] = { 17373 { reserved_block , 0 , 0 , 32, 17374 0xfc0007ff, 0x20000047, 0 , 0, 17375 0x0 }, /* PP.LSXS~*(0) */ 17376 { reserved_block , 0 , 0 , 32, 17377 0xfc0007ff, 0x200000c7, 0 , 0, 17378 0x0 }, /* PP.LSXS~*(1) */ 17379 { reserved_block , 0 , 0 , 32, 17380 0xfc0007ff, 0x20000147, 0 , 0, 17381 0x0 }, /* PP.LSXS~*(2) */ 17382 { reserved_block , 0 , 0 , 32, 17383 0xfc0007ff, 0x200001c7, 0 , 0, 17384 0x0 }, /* PP.LSXS~*(3) */ 17385 { instruction , 0 , 0 , 32, 17386 0xfc0007ff, 0x20000247, &LHXS , 0, 17387 0x0 }, /* LHXS */ 17388 { instruction , 0 , 0 , 32, 17389 0xfc0007ff, 0x200002c7, &SHXS , 0, 17390 XMMS_ }, /* SHXS */ 17391 { instruction , 0 , 0 , 32, 17392 0xfc0007ff, 0x20000347, &LHUXS , 0, 17393 0x0 }, /* LHUXS */ 17394 { instruction , 0 , 0 , 32, 17395 0xfc0007ff, 0x200003c7, &LWUXS , 0, 17396 MIPS64_ }, /* LWUXS */ 17397 { instruction , 0 , 0 , 32, 17398 0xfc0007ff, 0x20000447, &LWXS_32_ , 0, 17399 0x0 }, /* LWXS[32] */ 17400 { instruction , 0 , 0 , 32, 17401 0xfc0007ff, 0x200004c7, &SWXS , 0, 17402 XMMS_ }, /* SWXS */ 17403 { instruction , 0 , 0 , 32, 17404 0xfc0007ff, 0x20000547, &LWC1XS , 0, 17405 CP1_ }, /* LWC1XS */ 17406 { instruction , 0 , 0 , 32, 17407 0xfc0007ff, 0x200005c7, &SWC1XS , 0, 17408 CP1_ }, /* SWC1XS */ 17409 { instruction , 0 , 0 , 32, 17410 0xfc0007ff, 0x20000647, &LDXS , 0, 17411 MIPS64_ }, /* LDXS */ 17412 { instruction , 0 , 0 , 32, 17413 0xfc0007ff, 0x200006c7, &SDXS , 0, 17414 MIPS64_ }, /* SDXS */ 17415 { instruction , 0 , 0 , 32, 17416 0xfc0007ff, 0x20000747, &LDC1XS , 0, 17417 CP1_ }, /* LDC1XS */ 17418 { instruction , 0 , 0 , 32, 17419 0xfc0007ff, 0x200007c7, &SDC1XS , 0, 17420 CP1_ }, /* SDC1XS */ 17421 }; 17422 17423 17424 static const Pool P_LSX[2] = { 17425 { pool , PP_LSX , 16 , 32, 17426 0xfc00007f, 0x20000007, 0 , 0, 17427 0x0 }, /* PP.LSX */ 17428 { pool , PP_LSXS , 16 , 32, 17429 0xfc00007f, 0x20000047, 0 , 0, 17430 0x0 }, /* PP.LSXS */ 17431 }; 17432 17433 17434 static const Pool POOL32Axf_1_0[4] = { 17435 { instruction , 0 , 0 , 32, 17436 0xfc003fff, 0x2000007f, &MFHI_DSP_ , 0, 17437 DSP_ }, /* MFHI[DSP] */ 17438 { instruction , 0 , 0 , 32, 17439 0xfc003fff, 0x2000107f, &MFLO_DSP_ , 0, 17440 DSP_ }, /* MFLO[DSP] */ 17441 { instruction , 0 , 0 , 32, 17442 0xfc003fff, 0x2000207f, &MTHI_DSP_ , 0, 17443 DSP_ }, /* MTHI[DSP] */ 17444 { instruction , 0 , 0 , 32, 17445 0xfc003fff, 0x2000307f, &MTLO_DSP_ , 0, 17446 DSP_ }, /* MTLO[DSP] */ 17447 }; 17448 17449 17450 static const Pool POOL32Axf_1_1[4] = { 17451 { instruction , 0 , 0 , 32, 17452 0xfc003fff, 0x2000027f, &MTHLIP , 0, 17453 DSP_ }, /* MTHLIP */ 17454 { instruction , 0 , 0 , 32, 17455 0xfc003fff, 0x2000127f, &SHILOV , 0, 17456 DSP_ }, /* SHILOV */ 17457 { reserved_block , 0 , 0 , 32, 17458 0xfc003fff, 0x2000227f, 0 , 0, 17459 0x0 }, /* POOL32Axf_1_1~*(2) */ 17460 { reserved_block , 0 , 0 , 32, 17461 0xfc003fff, 0x2000327f, 0 , 0, 17462 0x0 }, /* POOL32Axf_1_1~*(3) */ 17463 }; 17464 17465 17466 static const Pool POOL32Axf_1_3[4] = { 17467 { instruction , 0 , 0 , 32, 17468 0xfc003fff, 0x2000067f, &RDDSP , 0, 17469 DSP_ }, /* RDDSP */ 17470 { instruction , 0 , 0 , 32, 17471 0xfc003fff, 0x2000167f, &WRDSP , 0, 17472 DSP_ }, /* WRDSP */ 17473 { instruction , 0 , 0 , 32, 17474 0xfc003fff, 0x2000267f, &EXTP , 0, 17475 DSP_ }, /* EXTP */ 17476 { instruction , 0 , 0 , 32, 17477 0xfc003fff, 0x2000367f, &EXTPDP , 0, 17478 DSP_ }, /* EXTPDP */ 17479 }; 17480 17481 17482 static const Pool POOL32Axf_1_4[2] = { 17483 { instruction , 0 , 0 , 32, 17484 0xfc001fff, 0x2000087f, &SHLL_QB , 0, 17485 DSP_ }, /* SHLL.QB */ 17486 { instruction , 0 , 0 , 32, 17487 0xfc001fff, 0x2000187f, &SHRL_QB , 0, 17488 DSP_ }, /* SHRL.QB */ 17489 }; 17490 17491 17492 static const Pool MAQ_S_A__W_PHR[2] = { 17493 { instruction , 0 , 0 , 32, 17494 0xfc003fff, 0x20000a7f, &MAQ_S_W_PHR , 0, 17495 DSP_ }, /* MAQ_S.W.PHR */ 17496 { instruction , 0 , 0 , 32, 17497 0xfc003fff, 0x20002a7f, &MAQ_SA_W_PHR , 0, 17498 DSP_ }, /* MAQ_SA.W.PHR */ 17499 }; 17500 17501 17502 static const Pool MAQ_S_A__W_PHL[2] = { 17503 { instruction , 0 , 0 , 32, 17504 0xfc003fff, 0x20001a7f, &MAQ_S_W_PHL , 0, 17505 DSP_ }, /* MAQ_S.W.PHL */ 17506 { instruction , 0 , 0 , 32, 17507 0xfc003fff, 0x20003a7f, &MAQ_SA_W_PHL , 0, 17508 DSP_ }, /* MAQ_SA.W.PHL */ 17509 }; 17510 17511 17512 static const Pool POOL32Axf_1_5[2] = { 17513 { pool , MAQ_S_A__W_PHR , 2 , 32, 17514 0xfc001fff, 0x20000a7f, 0 , 0, 17515 0x0 }, /* MAQ_S[A].W.PHR */ 17516 { pool , MAQ_S_A__W_PHL , 2 , 32, 17517 0xfc001fff, 0x20001a7f, 0 , 0, 17518 0x0 }, /* MAQ_S[A].W.PHL */ 17519 }; 17520 17521 17522 static const Pool POOL32Axf_1_7[4] = { 17523 { instruction , 0 , 0 , 32, 17524 0xfc003fff, 0x20000e7f, &EXTR_W , 0, 17525 DSP_ }, /* EXTR.W */ 17526 { instruction , 0 , 0 , 32, 17527 0xfc003fff, 0x20001e7f, &EXTR_R_W , 0, 17528 DSP_ }, /* EXTR_R.W */ 17529 { instruction , 0 , 0 , 32, 17530 0xfc003fff, 0x20002e7f, &EXTR_RS_W , 0, 17531 DSP_ }, /* EXTR_RS.W */ 17532 { instruction , 0 , 0 , 32, 17533 0xfc003fff, 0x20003e7f, &EXTR_S_H , 0, 17534 DSP_ }, /* EXTR_S.H */ 17535 }; 17536 17537 17538 static const Pool POOL32Axf_1[8] = { 17539 { pool , POOL32Axf_1_0 , 4 , 32, 17540 0xfc000fff, 0x2000007f, 0 , 0, 17541 0x0 }, /* POOL32Axf_1_0 */ 17542 { pool , POOL32Axf_1_1 , 4 , 32, 17543 0xfc000fff, 0x2000027f, 0 , 0, 17544 0x0 }, /* POOL32Axf_1_1 */ 17545 { reserved_block , 0 , 0 , 32, 17546 0xfc000fff, 0x2000047f, 0 , 0, 17547 0x0 }, /* POOL32Axf_1~*(2) */ 17548 { pool , POOL32Axf_1_3 , 4 , 32, 17549 0xfc000fff, 0x2000067f, 0 , 0, 17550 0x0 }, /* POOL32Axf_1_3 */ 17551 { pool , POOL32Axf_1_4 , 2 , 32, 17552 0xfc000fff, 0x2000087f, 0 , 0, 17553 0x0 }, /* POOL32Axf_1_4 */ 17554 { pool , POOL32Axf_1_5 , 2 , 32, 17555 0xfc000fff, 0x20000a7f, 0 , 0, 17556 0x0 }, /* POOL32Axf_1_5 */ 17557 { reserved_block , 0 , 0 , 32, 17558 0xfc000fff, 0x20000c7f, 0 , 0, 17559 0x0 }, /* POOL32Axf_1~*(6) */ 17560 { pool , POOL32Axf_1_7 , 4 , 32, 17561 0xfc000fff, 0x20000e7f, 0 , 0, 17562 0x0 }, /* POOL32Axf_1_7 */ 17563 }; 17564 17565 17566 static const Pool POOL32Axf_2_DSP__0_7[8] = { 17567 { instruction , 0 , 0 , 32, 17568 0xfc003fff, 0x200000bf, &DPA_W_PH , 0, 17569 DSP_ }, /* DPA.W.PH */ 17570 { instruction , 0 , 0 , 32, 17571 0xfc003fff, 0x200002bf, &DPAQ_S_W_PH , 0, 17572 DSP_ }, /* DPAQ_S.W.PH */ 17573 { instruction , 0 , 0 , 32, 17574 0xfc003fff, 0x200004bf, &DPS_W_PH , 0, 17575 DSP_ }, /* DPS.W.PH */ 17576 { instruction , 0 , 0 , 32, 17577 0xfc003fff, 0x200006bf, &DPSQ_S_W_PH , 0, 17578 DSP_ }, /* DPSQ_S.W.PH */ 17579 { reserved_block , 0 , 0 , 32, 17580 0xfc003fff, 0x200008bf, 0 , 0, 17581 0x0 }, /* POOL32Axf_2(DSP)_0_7~*(4) */ 17582 { instruction , 0 , 0 , 32, 17583 0xfc003fff, 0x20000abf, &MADD_DSP_ , 0, 17584 DSP_ }, /* MADD[DSP] */ 17585 { instruction , 0 , 0 , 32, 17586 0xfc003fff, 0x20000cbf, &MULT_DSP_ , 0, 17587 DSP_ }, /* MULT[DSP] */ 17588 { instruction , 0 , 0 , 32, 17589 0xfc003fff, 0x20000ebf, &EXTRV_W , 0, 17590 DSP_ }, /* EXTRV.W */ 17591 }; 17592 17593 17594 static const Pool POOL32Axf_2_DSP__8_15[8] = { 17595 { instruction , 0 , 0 , 32, 17596 0xfc003fff, 0x200010bf, &DPAX_W_PH , 0, 17597 DSP_ }, /* DPAX.W.PH */ 17598 { instruction , 0 , 0 , 32, 17599 0xfc003fff, 0x200012bf, &DPAQ_SA_L_W , 0, 17600 DSP_ }, /* DPAQ_SA.L.W */ 17601 { instruction , 0 , 0 , 32, 17602 0xfc003fff, 0x200014bf, &DPSX_W_PH , 0, 17603 DSP_ }, /* DPSX.W.PH */ 17604 { instruction , 0 , 0 , 32, 17605 0xfc003fff, 0x200016bf, &DPSQ_SA_L_W , 0, 17606 DSP_ }, /* DPSQ_SA.L.W */ 17607 { reserved_block , 0 , 0 , 32, 17608 0xfc003fff, 0x200018bf, 0 , 0, 17609 0x0 }, /* POOL32Axf_2(DSP)_8_15~*(4) */ 17610 { instruction , 0 , 0 , 32, 17611 0xfc003fff, 0x20001abf, &MADDU_DSP_ , 0, 17612 DSP_ }, /* MADDU[DSP] */ 17613 { instruction , 0 , 0 , 32, 17614 0xfc003fff, 0x20001cbf, &MULTU_DSP_ , 0, 17615 DSP_ }, /* MULTU[DSP] */ 17616 { instruction , 0 , 0 , 32, 17617 0xfc003fff, 0x20001ebf, &EXTRV_R_W , 0, 17618 DSP_ }, /* EXTRV_R.W */ 17619 }; 17620 17621 17622 static const Pool POOL32Axf_2_DSP__16_23[8] = { 17623 { instruction , 0 , 0 , 32, 17624 0xfc003fff, 0x200020bf, &DPAU_H_QBL , 0, 17625 DSP_ }, /* DPAU.H.QBL */ 17626 { instruction , 0 , 0 , 32, 17627 0xfc003fff, 0x200022bf, &DPAQX_S_W_PH , 0, 17628 DSP_ }, /* DPAQX_S.W.PH */ 17629 { instruction , 0 , 0 , 32, 17630 0xfc003fff, 0x200024bf, &DPSU_H_QBL , 0, 17631 DSP_ }, /* DPSU.H.QBL */ 17632 { instruction , 0 , 0 , 32, 17633 0xfc003fff, 0x200026bf, &DPSQX_S_W_PH , 0, 17634 DSP_ }, /* DPSQX_S.W.PH */ 17635 { instruction , 0 , 0 , 32, 17636 0xfc003fff, 0x200028bf, &EXTPV , 0, 17637 DSP_ }, /* EXTPV */ 17638 { instruction , 0 , 0 , 32, 17639 0xfc003fff, 0x20002abf, &MSUB_DSP_ , 0, 17640 DSP_ }, /* MSUB[DSP] */ 17641 { instruction , 0 , 0 , 32, 17642 0xfc003fff, 0x20002cbf, &MULSA_W_PH , 0, 17643 DSP_ }, /* MULSA.W.PH */ 17644 { instruction , 0 , 0 , 32, 17645 0xfc003fff, 0x20002ebf, &EXTRV_RS_W , 0, 17646 DSP_ }, /* EXTRV_RS.W */ 17647 }; 17648 17649 17650 static const Pool POOL32Axf_2_DSP__24_31[8] = { 17651 { instruction , 0 , 0 , 32, 17652 0xfc003fff, 0x200030bf, &DPAU_H_QBR , 0, 17653 DSP_ }, /* DPAU.H.QBR */ 17654 { instruction , 0 , 0 , 32, 17655 0xfc003fff, 0x200032bf, &DPAQX_SA_W_PH , 0, 17656 DSP_ }, /* DPAQX_SA.W.PH */ 17657 { instruction , 0 , 0 , 32, 17658 0xfc003fff, 0x200034bf, &DPSU_H_QBR , 0, 17659 DSP_ }, /* DPSU.H.QBR */ 17660 { instruction , 0 , 0 , 32, 17661 0xfc003fff, 0x200036bf, &DPSQX_SA_W_PH , 0, 17662 DSP_ }, /* DPSQX_SA.W.PH */ 17663 { instruction , 0 , 0 , 32, 17664 0xfc003fff, 0x200038bf, &EXTPDPV , 0, 17665 DSP_ }, /* EXTPDPV */ 17666 { instruction , 0 , 0 , 32, 17667 0xfc003fff, 0x20003abf, &MSUBU_DSP_ , 0, 17668 DSP_ }, /* MSUBU[DSP] */ 17669 { instruction , 0 , 0 , 32, 17670 0xfc003fff, 0x20003cbf, &MULSAQ_S_W_PH , 0, 17671 DSP_ }, /* MULSAQ_S.W.PH */ 17672 { instruction , 0 , 0 , 32, 17673 0xfc003fff, 0x20003ebf, &EXTRV_S_H , 0, 17674 DSP_ }, /* EXTRV_S.H */ 17675 }; 17676 17677 17678 static const Pool POOL32Axf_2[4] = { 17679 { pool , POOL32Axf_2_DSP__0_7, 8 , 32, 17680 0xfc0031ff, 0x200000bf, 0 , 0, 17681 0x0 }, /* POOL32Axf_2(DSP)_0_7 */ 17682 { pool , POOL32Axf_2_DSP__8_15, 8 , 32, 17683 0xfc0031ff, 0x200010bf, 0 , 0, 17684 0x0 }, /* POOL32Axf_2(DSP)_8_15 */ 17685 { pool , POOL32Axf_2_DSP__16_23, 8 , 32, 17686 0xfc0031ff, 0x200020bf, 0 , 0, 17687 0x0 }, /* POOL32Axf_2(DSP)_16_23 */ 17688 { pool , POOL32Axf_2_DSP__24_31, 8 , 32, 17689 0xfc0031ff, 0x200030bf, 0 , 0, 17690 0x0 }, /* POOL32Axf_2(DSP)_24_31 */ 17691 }; 17692 17693 17694 static const Pool POOL32Axf_4[128] = { 17695 { instruction , 0 , 0 , 32, 17696 0xfc00ffff, 0x2000013f, &ABSQ_S_QB , 0, 17697 DSP_ }, /* ABSQ_S.QB */ 17698 { instruction , 0 , 0 , 32, 17699 0xfc00ffff, 0x2000033f, &REPLV_PH , 0, 17700 DSP_ }, /* REPLV.PH */ 17701 { reserved_block , 0 , 0 , 32, 17702 0xfc00ffff, 0x2000053f, 0 , 0, 17703 0x0 }, /* POOL32Axf_4~*(2) */ 17704 { reserved_block , 0 , 0 , 32, 17705 0xfc00ffff, 0x2000073f, 0 , 0, 17706 0x0 }, /* POOL32Axf_4~*(3) */ 17707 { reserved_block , 0 , 0 , 32, 17708 0xfc00ffff, 0x2000093f, 0 , 0, 17709 0x0 }, /* POOL32Axf_4~*(4) */ 17710 { reserved_block , 0 , 0 , 32, 17711 0xfc00ffff, 0x20000b3f, 0 , 0, 17712 0x0 }, /* POOL32Axf_4~*(5) */ 17713 { reserved_block , 0 , 0 , 32, 17714 0xfc00ffff, 0x20000d3f, 0 , 0, 17715 0x0 }, /* POOL32Axf_4~*(6) */ 17716 { reserved_block , 0 , 0 , 32, 17717 0xfc00ffff, 0x20000f3f, 0 , 0, 17718 0x0 }, /* POOL32Axf_4~*(7) */ 17719 { instruction , 0 , 0 , 32, 17720 0xfc00ffff, 0x2000113f, &ABSQ_S_PH , 0, 17721 DSP_ }, /* ABSQ_S.PH */ 17722 { instruction , 0 , 0 , 32, 17723 0xfc00ffff, 0x2000133f, &REPLV_QB , 0, 17724 DSP_ }, /* REPLV.QB */ 17725 { reserved_block , 0 , 0 , 32, 17726 0xfc00ffff, 0x2000153f, 0 , 0, 17727 0x0 }, /* POOL32Axf_4~*(10) */ 17728 { reserved_block , 0 , 0 , 32, 17729 0xfc00ffff, 0x2000173f, 0 , 0, 17730 0x0 }, /* POOL32Axf_4~*(11) */ 17731 { reserved_block , 0 , 0 , 32, 17732 0xfc00ffff, 0x2000193f, 0 , 0, 17733 0x0 }, /* POOL32Axf_4~*(12) */ 17734 { reserved_block , 0 , 0 , 32, 17735 0xfc00ffff, 0x20001b3f, 0 , 0, 17736 0x0 }, /* POOL32Axf_4~*(13) */ 17737 { reserved_block , 0 , 0 , 32, 17738 0xfc00ffff, 0x20001d3f, 0 , 0, 17739 0x0 }, /* POOL32Axf_4~*(14) */ 17740 { reserved_block , 0 , 0 , 32, 17741 0xfc00ffff, 0x20001f3f, 0 , 0, 17742 0x0 }, /* POOL32Axf_4~*(15) */ 17743 { instruction , 0 , 0 , 32, 17744 0xfc00ffff, 0x2000213f, &ABSQ_S_W , 0, 17745 DSP_ }, /* ABSQ_S.W */ 17746 { reserved_block , 0 , 0 , 32, 17747 0xfc00ffff, 0x2000233f, 0 , 0, 17748 0x0 }, /* POOL32Axf_4~*(17) */ 17749 { reserved_block , 0 , 0 , 32, 17750 0xfc00ffff, 0x2000253f, 0 , 0, 17751 0x0 }, /* POOL32Axf_4~*(18) */ 17752 { reserved_block , 0 , 0 , 32, 17753 0xfc00ffff, 0x2000273f, 0 , 0, 17754 0x0 }, /* POOL32Axf_4~*(19) */ 17755 { reserved_block , 0 , 0 , 32, 17756 0xfc00ffff, 0x2000293f, 0 , 0, 17757 0x0 }, /* POOL32Axf_4~*(20) */ 17758 { reserved_block , 0 , 0 , 32, 17759 0xfc00ffff, 0x20002b3f, 0 , 0, 17760 0x0 }, /* POOL32Axf_4~*(21) */ 17761 { reserved_block , 0 , 0 , 32, 17762 0xfc00ffff, 0x20002d3f, 0 , 0, 17763 0x0 }, /* POOL32Axf_4~*(22) */ 17764 { reserved_block , 0 , 0 , 32, 17765 0xfc00ffff, 0x20002f3f, 0 , 0, 17766 0x0 }, /* POOL32Axf_4~*(23) */ 17767 { reserved_block , 0 , 0 , 32, 17768 0xfc00ffff, 0x2000313f, 0 , 0, 17769 0x0 }, /* POOL32Axf_4~*(24) */ 17770 { reserved_block , 0 , 0 , 32, 17771 0xfc00ffff, 0x2000333f, 0 , 0, 17772 0x0 }, /* POOL32Axf_4~*(25) */ 17773 { reserved_block , 0 , 0 , 32, 17774 0xfc00ffff, 0x2000353f, 0 , 0, 17775 0x0 }, /* POOL32Axf_4~*(26) */ 17776 { reserved_block , 0 , 0 , 32, 17777 0xfc00ffff, 0x2000373f, 0 , 0, 17778 0x0 }, /* POOL32Axf_4~*(27) */ 17779 { reserved_block , 0 , 0 , 32, 17780 0xfc00ffff, 0x2000393f, 0 , 0, 17781 0x0 }, /* POOL32Axf_4~*(28) */ 17782 { reserved_block , 0 , 0 , 32, 17783 0xfc00ffff, 0x20003b3f, 0 , 0, 17784 0x0 }, /* POOL32Axf_4~*(29) */ 17785 { reserved_block , 0 , 0 , 32, 17786 0xfc00ffff, 0x20003d3f, 0 , 0, 17787 0x0 }, /* POOL32Axf_4~*(30) */ 17788 { reserved_block , 0 , 0 , 32, 17789 0xfc00ffff, 0x20003f3f, 0 , 0, 17790 0x0 }, /* POOL32Axf_4~*(31) */ 17791 { instruction , 0 , 0 , 32, 17792 0xfc00ffff, 0x2000413f, &INSV , 0, 17793 DSP_ }, /* INSV */ 17794 { reserved_block , 0 , 0 , 32, 17795 0xfc00ffff, 0x2000433f, 0 , 0, 17796 0x0 }, /* POOL32Axf_4~*(33) */ 17797 { reserved_block , 0 , 0 , 32, 17798 0xfc00ffff, 0x2000453f, 0 , 0, 17799 0x0 }, /* POOL32Axf_4~*(34) */ 17800 { reserved_block , 0 , 0 , 32, 17801 0xfc00ffff, 0x2000473f, 0 , 0, 17802 0x0 }, /* POOL32Axf_4~*(35) */ 17803 { reserved_block , 0 , 0 , 32, 17804 0xfc00ffff, 0x2000493f, 0 , 0, 17805 0x0 }, /* POOL32Axf_4~*(36) */ 17806 { instruction , 0 , 0 , 32, 17807 0xfc00ffff, 0x20004b3f, &CLO , 0, 17808 XMMS_ }, /* CLO */ 17809 { instruction , 0 , 0 , 32, 17810 0xfc00ffff, 0x20004d3f, &MFC2 , 0, 17811 CP2_ }, /* MFC2 */ 17812 { reserved_block , 0 , 0 , 32, 17813 0xfc00ffff, 0x20004f3f, 0 , 0, 17814 0x0 }, /* POOL32Axf_4~*(39) */ 17815 { instruction , 0 , 0 , 32, 17816 0xfc00ffff, 0x2000513f, &PRECEQ_W_PHL , 0, 17817 DSP_ }, /* PRECEQ.W.PHL */ 17818 { reserved_block , 0 , 0 , 32, 17819 0xfc00ffff, 0x2000533f, 0 , 0, 17820 0x0 }, /* POOL32Axf_4~*(41) */ 17821 { reserved_block , 0 , 0 , 32, 17822 0xfc00ffff, 0x2000553f, 0 , 0, 17823 0x0 }, /* POOL32Axf_4~*(42) */ 17824 { reserved_block , 0 , 0 , 32, 17825 0xfc00ffff, 0x2000573f, 0 , 0, 17826 0x0 }, /* POOL32Axf_4~*(43) */ 17827 { reserved_block , 0 , 0 , 32, 17828 0xfc00ffff, 0x2000593f, 0 , 0, 17829 0x0 }, /* POOL32Axf_4~*(44) */ 17830 { instruction , 0 , 0 , 32, 17831 0xfc00ffff, 0x20005b3f, &CLZ , 0, 17832 XMMS_ }, /* CLZ */ 17833 { instruction , 0 , 0 , 32, 17834 0xfc00ffff, 0x20005d3f, &MTC2 , 0, 17835 CP2_ }, /* MTC2 */ 17836 { reserved_block , 0 , 0 , 32, 17837 0xfc00ffff, 0x20005f3f, 0 , 0, 17838 0x0 }, /* POOL32Axf_4~*(47) */ 17839 { instruction , 0 , 0 , 32, 17840 0xfc00ffff, 0x2000613f, &PRECEQ_W_PHR , 0, 17841 DSP_ }, /* PRECEQ.W.PHR */ 17842 { reserved_block , 0 , 0 , 32, 17843 0xfc00ffff, 0x2000633f, 0 , 0, 17844 0x0 }, /* POOL32Axf_4~*(49) */ 17845 { reserved_block , 0 , 0 , 32, 17846 0xfc00ffff, 0x2000653f, 0 , 0, 17847 0x0 }, /* POOL32Axf_4~*(50) */ 17848 { reserved_block , 0 , 0 , 32, 17849 0xfc00ffff, 0x2000673f, 0 , 0, 17850 0x0 }, /* POOL32Axf_4~*(51) */ 17851 { reserved_block , 0 , 0 , 32, 17852 0xfc00ffff, 0x2000693f, 0 , 0, 17853 0x0 }, /* POOL32Axf_4~*(52) */ 17854 { reserved_block , 0 , 0 , 32, 17855 0xfc00ffff, 0x20006b3f, 0 , 0, 17856 0x0 }, /* POOL32Axf_4~*(53) */ 17857 { instruction , 0 , 0 , 32, 17858 0xfc00ffff, 0x20006d3f, &DMFC2 , 0, 17859 CP2_ }, /* DMFC2 */ 17860 { reserved_block , 0 , 0 , 32, 17861 0xfc00ffff, 0x20006f3f, 0 , 0, 17862 0x0 }, /* POOL32Axf_4~*(55) */ 17863 { instruction , 0 , 0 , 32, 17864 0xfc00ffff, 0x2000713f, &PRECEQU_PH_QBL , 0, 17865 DSP_ }, /* PRECEQU.PH.QBL */ 17866 { instruction , 0 , 0 , 32, 17867 0xfc00ffff, 0x2000733f, &PRECEQU_PH_QBLA , 0, 17868 DSP_ }, /* PRECEQU.PH.QBLA */ 17869 { reserved_block , 0 , 0 , 32, 17870 0xfc00ffff, 0x2000753f, 0 , 0, 17871 0x0 }, /* POOL32Axf_4~*(58) */ 17872 { reserved_block , 0 , 0 , 32, 17873 0xfc00ffff, 0x2000773f, 0 , 0, 17874 0x0 }, /* POOL32Axf_4~*(59) */ 17875 { reserved_block , 0 , 0 , 32, 17876 0xfc00ffff, 0x2000793f, 0 , 0, 17877 0x0 }, /* POOL32Axf_4~*(60) */ 17878 { reserved_block , 0 , 0 , 32, 17879 0xfc00ffff, 0x20007b3f, 0 , 0, 17880 0x0 }, /* POOL32Axf_4~*(61) */ 17881 { instruction , 0 , 0 , 32, 17882 0xfc00ffff, 0x20007d3f, &DMTC2 , 0, 17883 CP2_ }, /* DMTC2 */ 17884 { reserved_block , 0 , 0 , 32, 17885 0xfc00ffff, 0x20007f3f, 0 , 0, 17886 0x0 }, /* POOL32Axf_4~*(63) */ 17887 { reserved_block , 0 , 0 , 32, 17888 0xfc00ffff, 0x2000813f, 0 , 0, 17889 0x0 }, /* POOL32Axf_4~*(64) */ 17890 { reserved_block , 0 , 0 , 32, 17891 0xfc00ffff, 0x2000833f, 0 , 0, 17892 0x0 }, /* POOL32Axf_4~*(65) */ 17893 { reserved_block , 0 , 0 , 32, 17894 0xfc00ffff, 0x2000853f, 0 , 0, 17895 0x0 }, /* POOL32Axf_4~*(66) */ 17896 { reserved_block , 0 , 0 , 32, 17897 0xfc00ffff, 0x2000873f, 0 , 0, 17898 0x0 }, /* POOL32Axf_4~*(67) */ 17899 { reserved_block , 0 , 0 , 32, 17900 0xfc00ffff, 0x2000893f, 0 , 0, 17901 0x0 }, /* POOL32Axf_4~*(68) */ 17902 { reserved_block , 0 , 0 , 32, 17903 0xfc00ffff, 0x20008b3f, 0 , 0, 17904 0x0 }, /* POOL32Axf_4~*(69) */ 17905 { instruction , 0 , 0 , 32, 17906 0xfc00ffff, 0x20008d3f, &MFHC2 , 0, 17907 CP2_ }, /* MFHC2 */ 17908 { reserved_block , 0 , 0 , 32, 17909 0xfc00ffff, 0x20008f3f, 0 , 0, 17910 0x0 }, /* POOL32Axf_4~*(71) */ 17911 { instruction , 0 , 0 , 32, 17912 0xfc00ffff, 0x2000913f, &PRECEQU_PH_QBR , 0, 17913 DSP_ }, /* PRECEQU.PH.QBR */ 17914 { instruction , 0 , 0 , 32, 17915 0xfc00ffff, 0x2000933f, &PRECEQU_PH_QBRA , 0, 17916 DSP_ }, /* PRECEQU.PH.QBRA */ 17917 { reserved_block , 0 , 0 , 32, 17918 0xfc00ffff, 0x2000953f, 0 , 0, 17919 0x0 }, /* POOL32Axf_4~*(74) */ 17920 { reserved_block , 0 , 0 , 32, 17921 0xfc00ffff, 0x2000973f, 0 , 0, 17922 0x0 }, /* POOL32Axf_4~*(75) */ 17923 { reserved_block , 0 , 0 , 32, 17924 0xfc00ffff, 0x2000993f, 0 , 0, 17925 0x0 }, /* POOL32Axf_4~*(76) */ 17926 { reserved_block , 0 , 0 , 32, 17927 0xfc00ffff, 0x20009b3f, 0 , 0, 17928 0x0 }, /* POOL32Axf_4~*(77) */ 17929 { instruction , 0 , 0 , 32, 17930 0xfc00ffff, 0x20009d3f, &MTHC2 , 0, 17931 CP2_ }, /* MTHC2 */ 17932 { reserved_block , 0 , 0 , 32, 17933 0xfc00ffff, 0x20009f3f, 0 , 0, 17934 0x0 }, /* POOL32Axf_4~*(79) */ 17935 { reserved_block , 0 , 0 , 32, 17936 0xfc00ffff, 0x2000a13f, 0 , 0, 17937 0x0 }, /* POOL32Axf_4~*(80) */ 17938 { reserved_block , 0 , 0 , 32, 17939 0xfc00ffff, 0x2000a33f, 0 , 0, 17940 0x0 }, /* POOL32Axf_4~*(81) */ 17941 { reserved_block , 0 , 0 , 32, 17942 0xfc00ffff, 0x2000a53f, 0 , 0, 17943 0x0 }, /* POOL32Axf_4~*(82) */ 17944 { reserved_block , 0 , 0 , 32, 17945 0xfc00ffff, 0x2000a73f, 0 , 0, 17946 0x0 }, /* POOL32Axf_4~*(83) */ 17947 { reserved_block , 0 , 0 , 32, 17948 0xfc00ffff, 0x2000a93f, 0 , 0, 17949 0x0 }, /* POOL32Axf_4~*(84) */ 17950 { reserved_block , 0 , 0 , 32, 17951 0xfc00ffff, 0x2000ab3f, 0 , 0, 17952 0x0 }, /* POOL32Axf_4~*(85) */ 17953 { reserved_block , 0 , 0 , 32, 17954 0xfc00ffff, 0x2000ad3f, 0 , 0, 17955 0x0 }, /* POOL32Axf_4~*(86) */ 17956 { reserved_block , 0 , 0 , 32, 17957 0xfc00ffff, 0x2000af3f, 0 , 0, 17958 0x0 }, /* POOL32Axf_4~*(87) */ 17959 { instruction , 0 , 0 , 32, 17960 0xfc00ffff, 0x2000b13f, &PRECEU_PH_QBL , 0, 17961 DSP_ }, /* PRECEU.PH.QBL */ 17962 { instruction , 0 , 0 , 32, 17963 0xfc00ffff, 0x2000b33f, &PRECEU_PH_QBLA , 0, 17964 DSP_ }, /* PRECEU.PH.QBLA */ 17965 { reserved_block , 0 , 0 , 32, 17966 0xfc00ffff, 0x2000b53f, 0 , 0, 17967 0x0 }, /* POOL32Axf_4~*(90) */ 17968 { reserved_block , 0 , 0 , 32, 17969 0xfc00ffff, 0x2000b73f, 0 , 0, 17970 0x0 }, /* POOL32Axf_4~*(91) */ 17971 { reserved_block , 0 , 0 , 32, 17972 0xfc00ffff, 0x2000b93f, 0 , 0, 17973 0x0 }, /* POOL32Axf_4~*(92) */ 17974 { reserved_block , 0 , 0 , 32, 17975 0xfc00ffff, 0x2000bb3f, 0 , 0, 17976 0x0 }, /* POOL32Axf_4~*(93) */ 17977 { reserved_block , 0 , 0 , 32, 17978 0xfc00ffff, 0x2000bd3f, 0 , 0, 17979 0x0 }, /* POOL32Axf_4~*(94) */ 17980 { reserved_block , 0 , 0 , 32, 17981 0xfc00ffff, 0x2000bf3f, 0 , 0, 17982 0x0 }, /* POOL32Axf_4~*(95) */ 17983 { reserved_block , 0 , 0 , 32, 17984 0xfc00ffff, 0x2000c13f, 0 , 0, 17985 0x0 }, /* POOL32Axf_4~*(96) */ 17986 { reserved_block , 0 , 0 , 32, 17987 0xfc00ffff, 0x2000c33f, 0 , 0, 17988 0x0 }, /* POOL32Axf_4~*(97) */ 17989 { reserved_block , 0 , 0 , 32, 17990 0xfc00ffff, 0x2000c53f, 0 , 0, 17991 0x0 }, /* POOL32Axf_4~*(98) */ 17992 { reserved_block , 0 , 0 , 32, 17993 0xfc00ffff, 0x2000c73f, 0 , 0, 17994 0x0 }, /* POOL32Axf_4~*(99) */ 17995 { reserved_block , 0 , 0 , 32, 17996 0xfc00ffff, 0x2000c93f, 0 , 0, 17997 0x0 }, /* POOL32Axf_4~*(100) */ 17998 { reserved_block , 0 , 0 , 32, 17999 0xfc00ffff, 0x2000cb3f, 0 , 0, 18000 0x0 }, /* POOL32Axf_4~*(101) */ 18001 { instruction , 0 , 0 , 32, 18002 0xfc00ffff, 0x2000cd3f, &CFC2 , 0, 18003 CP2_ }, /* CFC2 */ 18004 { reserved_block , 0 , 0 , 32, 18005 0xfc00ffff, 0x2000cf3f, 0 , 0, 18006 0x0 }, /* POOL32Axf_4~*(103) */ 18007 { instruction , 0 , 0 , 32, 18008 0xfc00ffff, 0x2000d13f, &PRECEU_PH_QBR , 0, 18009 DSP_ }, /* PRECEU.PH.QBR */ 18010 { instruction , 0 , 0 , 32, 18011 0xfc00ffff, 0x2000d33f, &PRECEU_PH_QBRA , 0, 18012 DSP_ }, /* PRECEU.PH.QBRA */ 18013 { reserved_block , 0 , 0 , 32, 18014 0xfc00ffff, 0x2000d53f, 0 , 0, 18015 0x0 }, /* POOL32Axf_4~*(106) */ 18016 { reserved_block , 0 , 0 , 32, 18017 0xfc00ffff, 0x2000d73f, 0 , 0, 18018 0x0 }, /* POOL32Axf_4~*(107) */ 18019 { reserved_block , 0 , 0 , 32, 18020 0xfc00ffff, 0x2000d93f, 0 , 0, 18021 0x0 }, /* POOL32Axf_4~*(108) */ 18022 { reserved_block , 0 , 0 , 32, 18023 0xfc00ffff, 0x2000db3f, 0 , 0, 18024 0x0 }, /* POOL32Axf_4~*(109) */ 18025 { instruction , 0 , 0 , 32, 18026 0xfc00ffff, 0x2000dd3f, &CTC2 , 0, 18027 CP2_ }, /* CTC2 */ 18028 { reserved_block , 0 , 0 , 32, 18029 0xfc00ffff, 0x2000df3f, 0 , 0, 18030 0x0 }, /* POOL32Axf_4~*(111) */ 18031 { reserved_block , 0 , 0 , 32, 18032 0xfc00ffff, 0x2000e13f, 0 , 0, 18033 0x0 }, /* POOL32Axf_4~*(112) */ 18034 { reserved_block , 0 , 0 , 32, 18035 0xfc00ffff, 0x2000e33f, 0 , 0, 18036 0x0 }, /* POOL32Axf_4~*(113) */ 18037 { reserved_block , 0 , 0 , 32, 18038 0xfc00ffff, 0x2000e53f, 0 , 0, 18039 0x0 }, /* POOL32Axf_4~*(114) */ 18040 { reserved_block , 0 , 0 , 32, 18041 0xfc00ffff, 0x2000e73f, 0 , 0, 18042 0x0 }, /* POOL32Axf_4~*(115) */ 18043 { reserved_block , 0 , 0 , 32, 18044 0xfc00ffff, 0x2000e93f, 0 , 0, 18045 0x0 }, /* POOL32Axf_4~*(116) */ 18046 { reserved_block , 0 , 0 , 32, 18047 0xfc00ffff, 0x2000eb3f, 0 , 0, 18048 0x0 }, /* POOL32Axf_4~*(117) */ 18049 { reserved_block , 0 , 0 , 32, 18050 0xfc00ffff, 0x2000ed3f, 0 , 0, 18051 0x0 }, /* POOL32Axf_4~*(118) */ 18052 { reserved_block , 0 , 0 , 32, 18053 0xfc00ffff, 0x2000ef3f, 0 , 0, 18054 0x0 }, /* POOL32Axf_4~*(119) */ 18055 { instruction , 0 , 0 , 32, 18056 0xfc00ffff, 0x2000f13f, &RADDU_W_QB , 0, 18057 DSP_ }, /* RADDU.W.QB */ 18058 { reserved_block , 0 , 0 , 32, 18059 0xfc00ffff, 0x2000f33f, 0 , 0, 18060 0x0 }, /* POOL32Axf_4~*(121) */ 18061 { reserved_block , 0 , 0 , 32, 18062 0xfc00ffff, 0x2000f53f, 0 , 0, 18063 0x0 }, /* POOL32Axf_4~*(122) */ 18064 { reserved_block , 0 , 0 , 32, 18065 0xfc00ffff, 0x2000f73f, 0 , 0, 18066 0x0 }, /* POOL32Axf_4~*(123) */ 18067 { reserved_block , 0 , 0 , 32, 18068 0xfc00ffff, 0x2000f93f, 0 , 0, 18069 0x0 }, /* POOL32Axf_4~*(124) */ 18070 { reserved_block , 0 , 0 , 32, 18071 0xfc00ffff, 0x2000fb3f, 0 , 0, 18072 0x0 }, /* POOL32Axf_4~*(125) */ 18073 { reserved_block , 0 , 0 , 32, 18074 0xfc00ffff, 0x2000fd3f, 0 , 0, 18075 0x0 }, /* POOL32Axf_4~*(126) */ 18076 { reserved_block , 0 , 0 , 32, 18077 0xfc00ffff, 0x2000ff3f, 0 , 0, 18078 0x0 }, /* POOL32Axf_4~*(127) */ 18079 }; 18080 18081 18082 static const Pool POOL32Axf_5_group0[32] = { 18083 { instruction , 0 , 0 , 32, 18084 0xfc00ffff, 0x2000017f, &TLBGP , 0, 18085 CP0_ | VZ_ | TLB_ }, /* TLBGP */ 18086 { instruction , 0 , 0 , 32, 18087 0xfc00ffff, 0x2000037f, &TLBP , 0, 18088 CP0_ | TLB_ }, /* TLBP */ 18089 { instruction , 0 , 0 , 32, 18090 0xfc00ffff, 0x2000057f, &TLBGINV , 0, 18091 CP0_ | VZ_ | TLB_ | TLBINV_}, /* TLBGINV */ 18092 { instruction , 0 , 0 , 32, 18093 0xfc00ffff, 0x2000077f, &TLBINV , 0, 18094 CP0_ | TLB_ | TLBINV_}, /* TLBINV */ 18095 { reserved_block , 0 , 0 , 32, 18096 0xfc00ffff, 0x2000097f, 0 , 0, 18097 0x0 }, /* POOL32Axf_5_group0~*(4) */ 18098 { reserved_block , 0 , 0 , 32, 18099 0xfc00ffff, 0x20000b7f, 0 , 0, 18100 0x0 }, /* POOL32Axf_5_group0~*(5) */ 18101 { reserved_block , 0 , 0 , 32, 18102 0xfc00ffff, 0x20000d7f, 0 , 0, 18103 0x0 }, /* POOL32Axf_5_group0~*(6) */ 18104 { reserved_block , 0 , 0 , 32, 18105 0xfc00ffff, 0x20000f7f, 0 , 0, 18106 0x0 }, /* POOL32Axf_5_group0~*(7) */ 18107 { instruction , 0 , 0 , 32, 18108 0xfc00ffff, 0x2000117f, &TLBGR , 0, 18109 CP0_ | VZ_ | TLB_ }, /* TLBGR */ 18110 { instruction , 0 , 0 , 32, 18111 0xfc00ffff, 0x2000137f, &TLBR , 0, 18112 CP0_ | TLB_ }, /* TLBR */ 18113 { instruction , 0 , 0 , 32, 18114 0xfc00ffff, 0x2000157f, &TLBGINVF , 0, 18115 CP0_ | VZ_ | TLB_ | TLBINV_}, /* TLBGINVF */ 18116 { instruction , 0 , 0 , 32, 18117 0xfc00ffff, 0x2000177f, &TLBINVF , 0, 18118 CP0_ | TLB_ | TLBINV_}, /* TLBINVF */ 18119 { reserved_block , 0 , 0 , 32, 18120 0xfc00ffff, 0x2000197f, 0 , 0, 18121 0x0 }, /* POOL32Axf_5_group0~*(12) */ 18122 { reserved_block , 0 , 0 , 32, 18123 0xfc00ffff, 0x20001b7f, 0 , 0, 18124 0x0 }, /* POOL32Axf_5_group0~*(13) */ 18125 { reserved_block , 0 , 0 , 32, 18126 0xfc00ffff, 0x20001d7f, 0 , 0, 18127 0x0 }, /* POOL32Axf_5_group0~*(14) */ 18128 { reserved_block , 0 , 0 , 32, 18129 0xfc00ffff, 0x20001f7f, 0 , 0, 18130 0x0 }, /* POOL32Axf_5_group0~*(15) */ 18131 { instruction , 0 , 0 , 32, 18132 0xfc00ffff, 0x2000217f, &TLBGWI , 0, 18133 CP0_ | VZ_ | TLB_ }, /* TLBGWI */ 18134 { instruction , 0 , 0 , 32, 18135 0xfc00ffff, 0x2000237f, &TLBWI , 0, 18136 CP0_ | TLB_ }, /* TLBWI */ 18137 { reserved_block , 0 , 0 , 32, 18138 0xfc00ffff, 0x2000257f, 0 , 0, 18139 0x0 }, /* POOL32Axf_5_group0~*(18) */ 18140 { reserved_block , 0 , 0 , 32, 18141 0xfc00ffff, 0x2000277f, 0 , 0, 18142 0x0 }, /* POOL32Axf_5_group0~*(19) */ 18143 { reserved_block , 0 , 0 , 32, 18144 0xfc00ffff, 0x2000297f, 0 , 0, 18145 0x0 }, /* POOL32Axf_5_group0~*(20) */ 18146 { reserved_block , 0 , 0 , 32, 18147 0xfc00ffff, 0x20002b7f, 0 , 0, 18148 0x0 }, /* POOL32Axf_5_group0~*(21) */ 18149 { reserved_block , 0 , 0 , 32, 18150 0xfc00ffff, 0x20002d7f, 0 , 0, 18151 0x0 }, /* POOL32Axf_5_group0~*(22) */ 18152 { reserved_block , 0 , 0 , 32, 18153 0xfc00ffff, 0x20002f7f, 0 , 0, 18154 0x0 }, /* POOL32Axf_5_group0~*(23) */ 18155 { instruction , 0 , 0 , 32, 18156 0xfc00ffff, 0x2000317f, &TLBGWR , 0, 18157 CP0_ | VZ_ | TLB_ }, /* TLBGWR */ 18158 { instruction , 0 , 0 , 32, 18159 0xfc00ffff, 0x2000337f, &TLBWR , 0, 18160 CP0_ | TLB_ }, /* TLBWR */ 18161 { reserved_block , 0 , 0 , 32, 18162 0xfc00ffff, 0x2000357f, 0 , 0, 18163 0x0 }, /* POOL32Axf_5_group0~*(26) */ 18164 { reserved_block , 0 , 0 , 32, 18165 0xfc00ffff, 0x2000377f, 0 , 0, 18166 0x0 }, /* POOL32Axf_5_group0~*(27) */ 18167 { reserved_block , 0 , 0 , 32, 18168 0xfc00ffff, 0x2000397f, 0 , 0, 18169 0x0 }, /* POOL32Axf_5_group0~*(28) */ 18170 { reserved_block , 0 , 0 , 32, 18171 0xfc00ffff, 0x20003b7f, 0 , 0, 18172 0x0 }, /* POOL32Axf_5_group0~*(29) */ 18173 { reserved_block , 0 , 0 , 32, 18174 0xfc00ffff, 0x20003d7f, 0 , 0, 18175 0x0 }, /* POOL32Axf_5_group0~*(30) */ 18176 { reserved_block , 0 , 0 , 32, 18177 0xfc00ffff, 0x20003f7f, 0 , 0, 18178 0x0 }, /* POOL32Axf_5_group0~*(31) */ 18179 }; 18180 18181 18182 static const Pool POOL32Axf_5_group1[32] = { 18183 { reserved_block , 0 , 0 , 32, 18184 0xfc00ffff, 0x2000417f, 0 , 0, 18185 0x0 }, /* POOL32Axf_5_group1~*(0) */ 18186 { reserved_block , 0 , 0 , 32, 18187 0xfc00ffff, 0x2000437f, 0 , 0, 18188 0x0 }, /* POOL32Axf_5_group1~*(1) */ 18189 { reserved_block , 0 , 0 , 32, 18190 0xfc00ffff, 0x2000457f, 0 , 0, 18191 0x0 }, /* POOL32Axf_5_group1~*(2) */ 18192 { instruction , 0 , 0 , 32, 18193 0xfc00ffff, 0x2000477f, &DI , 0, 18194 0x0 }, /* DI */ 18195 { reserved_block , 0 , 0 , 32, 18196 0xfc00ffff, 0x2000497f, 0 , 0, 18197 0x0 }, /* POOL32Axf_5_group1~*(4) */ 18198 { reserved_block , 0 , 0 , 32, 18199 0xfc00ffff, 0x20004b7f, 0 , 0, 18200 0x0 }, /* POOL32Axf_5_group1~*(5) */ 18201 { reserved_block , 0 , 0 , 32, 18202 0xfc00ffff, 0x20004d7f, 0 , 0, 18203 0x0 }, /* POOL32Axf_5_group1~*(6) */ 18204 { reserved_block , 0 , 0 , 32, 18205 0xfc00ffff, 0x20004f7f, 0 , 0, 18206 0x0 }, /* POOL32Axf_5_group1~*(7) */ 18207 { reserved_block , 0 , 0 , 32, 18208 0xfc00ffff, 0x2000517f, 0 , 0, 18209 0x0 }, /* POOL32Axf_5_group1~*(8) */ 18210 { reserved_block , 0 , 0 , 32, 18211 0xfc00ffff, 0x2000537f, 0 , 0, 18212 0x0 }, /* POOL32Axf_5_group1~*(9) */ 18213 { reserved_block , 0 , 0 , 32, 18214 0xfc00ffff, 0x2000557f, 0 , 0, 18215 0x0 }, /* POOL32Axf_5_group1~*(10) */ 18216 { instruction , 0 , 0 , 32, 18217 0xfc00ffff, 0x2000577f, &EI , 0, 18218 0x0 }, /* EI */ 18219 { reserved_block , 0 , 0 , 32, 18220 0xfc00ffff, 0x2000597f, 0 , 0, 18221 0x0 }, /* POOL32Axf_5_group1~*(12) */ 18222 { reserved_block , 0 , 0 , 32, 18223 0xfc00ffff, 0x20005b7f, 0 , 0, 18224 0x0 }, /* POOL32Axf_5_group1~*(13) */ 18225 { reserved_block , 0 , 0 , 32, 18226 0xfc00ffff, 0x20005d7f, 0 , 0, 18227 0x0 }, /* POOL32Axf_5_group1~*(14) */ 18228 { reserved_block , 0 , 0 , 32, 18229 0xfc00ffff, 0x20005f7f, 0 , 0, 18230 0x0 }, /* POOL32Axf_5_group1~*(15) */ 18231 { reserved_block , 0 , 0 , 32, 18232 0xfc00ffff, 0x2000617f, 0 , 0, 18233 0x0 }, /* POOL32Axf_5_group1~*(16) */ 18234 { reserved_block , 0 , 0 , 32, 18235 0xfc00ffff, 0x2000637f, 0 , 0, 18236 0x0 }, /* POOL32Axf_5_group1~*(17) */ 18237 { reserved_block , 0 , 0 , 32, 18238 0xfc00ffff, 0x2000657f, 0 , 0, 18239 0x0 }, /* POOL32Axf_5_group1~*(18) */ 18240 { reserved_block , 0 , 0 , 32, 18241 0xfc00ffff, 0x2000677f, 0 , 0, 18242 0x0 }, /* POOL32Axf_5_group1~*(19) */ 18243 { reserved_block , 0 , 0 , 32, 18244 0xfc00ffff, 0x2000697f, 0 , 0, 18245 0x0 }, /* POOL32Axf_5_group1~*(20) */ 18246 { reserved_block , 0 , 0 , 32, 18247 0xfc00ffff, 0x20006b7f, 0 , 0, 18248 0x0 }, /* POOL32Axf_5_group1~*(21) */ 18249 { reserved_block , 0 , 0 , 32, 18250 0xfc00ffff, 0x20006d7f, 0 , 0, 18251 0x0 }, /* POOL32Axf_5_group1~*(22) */ 18252 { reserved_block , 0 , 0 , 32, 18253 0xfc00ffff, 0x20006f7f, 0 , 0, 18254 0x0 }, /* POOL32Axf_5_group1~*(23) */ 18255 { reserved_block , 0 , 0 , 32, 18256 0xfc00ffff, 0x2000717f, 0 , 0, 18257 0x0 }, /* POOL32Axf_5_group1~*(24) */ 18258 { reserved_block , 0 , 0 , 32, 18259 0xfc00ffff, 0x2000737f, 0 , 0, 18260 0x0 }, /* POOL32Axf_5_group1~*(25) */ 18261 { reserved_block , 0 , 0 , 32, 18262 0xfc00ffff, 0x2000757f, 0 , 0, 18263 0x0 }, /* POOL32Axf_5_group1~*(26) */ 18264 { reserved_block , 0 , 0 , 32, 18265 0xfc00ffff, 0x2000777f, 0 , 0, 18266 0x0 }, /* POOL32Axf_5_group1~*(27) */ 18267 { reserved_block , 0 , 0 , 32, 18268 0xfc00ffff, 0x2000797f, 0 , 0, 18269 0x0 }, /* POOL32Axf_5_group1~*(28) */ 18270 { reserved_block , 0 , 0 , 32, 18271 0xfc00ffff, 0x20007b7f, 0 , 0, 18272 0x0 }, /* POOL32Axf_5_group1~*(29) */ 18273 { reserved_block , 0 , 0 , 32, 18274 0xfc00ffff, 0x20007d7f, 0 , 0, 18275 0x0 }, /* POOL32Axf_5_group1~*(30) */ 18276 { reserved_block , 0 , 0 , 32, 18277 0xfc00ffff, 0x20007f7f, 0 , 0, 18278 0x0 }, /* POOL32Axf_5_group1~*(31) */ 18279 }; 18280 18281 18282 static const Pool ERETx[2] = { 18283 { instruction , 0 , 0 , 32, 18284 0xfc01ffff, 0x2000f37f, &ERET , 0, 18285 0x0 }, /* ERET */ 18286 { instruction , 0 , 0 , 32, 18287 0xfc01ffff, 0x2001f37f, &ERETNC , 0, 18288 0x0 }, /* ERETNC */ 18289 }; 18290 18291 18292 static const Pool POOL32Axf_5_group3[32] = { 18293 { reserved_block , 0 , 0 , 32, 18294 0xfc00ffff, 0x2000c17f, 0 , 0, 18295 0x0 }, /* POOL32Axf_5_group3~*(0) */ 18296 { instruction , 0 , 0 , 32, 18297 0xfc00ffff, 0x2000c37f, &WAIT , 0, 18298 0x0 }, /* WAIT */ 18299 { reserved_block , 0 , 0 , 32, 18300 0xfc00ffff, 0x2000c57f, 0 , 0, 18301 0x0 }, /* POOL32Axf_5_group3~*(2) */ 18302 { reserved_block , 0 , 0 , 32, 18303 0xfc00ffff, 0x2000c77f, 0 , 0, 18304 0x0 }, /* POOL32Axf_5_group3~*(3) */ 18305 { reserved_block , 0 , 0 , 32, 18306 0xfc00ffff, 0x2000c97f, 0 , 0, 18307 0x0 }, /* POOL32Axf_5_group3~*(4) */ 18308 { reserved_block , 0 , 0 , 32, 18309 0xfc00ffff, 0x2000cb7f, 0 , 0, 18310 0x0 }, /* POOL32Axf_5_group3~*(5) */ 18311 { reserved_block , 0 , 0 , 32, 18312 0xfc00ffff, 0x2000cd7f, 0 , 0, 18313 0x0 }, /* POOL32Axf_5_group3~*(6) */ 18314 { reserved_block , 0 , 0 , 32, 18315 0xfc00ffff, 0x2000cf7f, 0 , 0, 18316 0x0 }, /* POOL32Axf_5_group3~*(7) */ 18317 { reserved_block , 0 , 0 , 32, 18318 0xfc00ffff, 0x2000d17f, 0 , 0, 18319 0x0 }, /* POOL32Axf_5_group3~*(8) */ 18320 { instruction , 0 , 0 , 32, 18321 0xfc00ffff, 0x2000d37f, &IRET , 0, 18322 MCU_ }, /* IRET */ 18323 { reserved_block , 0 , 0 , 32, 18324 0xfc00ffff, 0x2000d57f, 0 , 0, 18325 0x0 }, /* POOL32Axf_5_group3~*(10) */ 18326 { reserved_block , 0 , 0 , 32, 18327 0xfc00ffff, 0x2000d77f, 0 , 0, 18328 0x0 }, /* POOL32Axf_5_group3~*(11) */ 18329 { reserved_block , 0 , 0 , 32, 18330 0xfc00ffff, 0x2000d97f, 0 , 0, 18331 0x0 }, /* POOL32Axf_5_group3~*(12) */ 18332 { reserved_block , 0 , 0 , 32, 18333 0xfc00ffff, 0x2000db7f, 0 , 0, 18334 0x0 }, /* POOL32Axf_5_group3~*(13) */ 18335 { reserved_block , 0 , 0 , 32, 18336 0xfc00ffff, 0x2000dd7f, 0 , 0, 18337 0x0 }, /* POOL32Axf_5_group3~*(14) */ 18338 { reserved_block , 0 , 0 , 32, 18339 0xfc00ffff, 0x2000df7f, 0 , 0, 18340 0x0 }, /* POOL32Axf_5_group3~*(15) */ 18341 { instruction , 0 , 0 , 32, 18342 0xfc00ffff, 0x2000e17f, &RDPGPR , 0, 18343 CP0_ }, /* RDPGPR */ 18344 { instruction , 0 , 0 , 32, 18345 0xfc00ffff, 0x2000e37f, &DERET , 0, 18346 EJTAG_ }, /* DERET */ 18347 { reserved_block , 0 , 0 , 32, 18348 0xfc00ffff, 0x2000e57f, 0 , 0, 18349 0x0 }, /* POOL32Axf_5_group3~*(18) */ 18350 { reserved_block , 0 , 0 , 32, 18351 0xfc00ffff, 0x2000e77f, 0 , 0, 18352 0x0 }, /* POOL32Axf_5_group3~*(19) */ 18353 { reserved_block , 0 , 0 , 32, 18354 0xfc00ffff, 0x2000e97f, 0 , 0, 18355 0x0 }, /* POOL32Axf_5_group3~*(20) */ 18356 { reserved_block , 0 , 0 , 32, 18357 0xfc00ffff, 0x2000eb7f, 0 , 0, 18358 0x0 }, /* POOL32Axf_5_group3~*(21) */ 18359 { reserved_block , 0 , 0 , 32, 18360 0xfc00ffff, 0x2000ed7f, 0 , 0, 18361 0x0 }, /* POOL32Axf_5_group3~*(22) */ 18362 { reserved_block , 0 , 0 , 32, 18363 0xfc00ffff, 0x2000ef7f, 0 , 0, 18364 0x0 }, /* POOL32Axf_5_group3~*(23) */ 18365 { instruction , 0 , 0 , 32, 18366 0xfc00ffff, 0x2000f17f, &WRPGPR , 0, 18367 CP0_ }, /* WRPGPR */ 18368 { pool , ERETx , 2 , 32, 18369 0xfc00ffff, 0x2000f37f, 0 , 0, 18370 0x0 }, /* ERETx */ 18371 { reserved_block , 0 , 0 , 32, 18372 0xfc00ffff, 0x2000f57f, 0 , 0, 18373 0x0 }, /* POOL32Axf_5_group3~*(26) */ 18374 { reserved_block , 0 , 0 , 32, 18375 0xfc00ffff, 0x2000f77f, 0 , 0, 18376 0x0 }, /* POOL32Axf_5_group3~*(27) */ 18377 { reserved_block , 0 , 0 , 32, 18378 0xfc00ffff, 0x2000f97f, 0 , 0, 18379 0x0 }, /* POOL32Axf_5_group3~*(28) */ 18380 { reserved_block , 0 , 0 , 32, 18381 0xfc00ffff, 0x2000fb7f, 0 , 0, 18382 0x0 }, /* POOL32Axf_5_group3~*(29) */ 18383 { reserved_block , 0 , 0 , 32, 18384 0xfc00ffff, 0x2000fd7f, 0 , 0, 18385 0x0 }, /* POOL32Axf_5_group3~*(30) */ 18386 { reserved_block , 0 , 0 , 32, 18387 0xfc00ffff, 0x2000ff7f, 0 , 0, 18388 0x0 }, /* POOL32Axf_5_group3~*(31) */ 18389 }; 18390 18391 18392 static const Pool POOL32Axf_5[4] = { 18393 { pool , POOL32Axf_5_group0 , 32 , 32, 18394 0xfc00c1ff, 0x2000017f, 0 , 0, 18395 0x0 }, /* POOL32Axf_5_group0 */ 18396 { pool , POOL32Axf_5_group1 , 32 , 32, 18397 0xfc00c1ff, 0x2000417f, 0 , 0, 18398 0x0 }, /* POOL32Axf_5_group1 */ 18399 { reserved_block , 0 , 0 , 32, 18400 0xfc00c1ff, 0x2000817f, 0 , 0, 18401 0x0 }, /* POOL32Axf_5~*(2) */ 18402 { pool , POOL32Axf_5_group3 , 32 , 32, 18403 0xfc00c1ff, 0x2000c17f, 0 , 0, 18404 0x0 }, /* POOL32Axf_5_group3 */ 18405 }; 18406 18407 18408 static const Pool SHRA__R__QB[2] = { 18409 { instruction , 0 , 0 , 32, 18410 0xfc001fff, 0x200001ff, &SHRA_QB , 0, 18411 DSP_ }, /* SHRA.QB */ 18412 { instruction , 0 , 0 , 32, 18413 0xfc001fff, 0x200011ff, &SHRA_R_QB , 0, 18414 DSP_ }, /* SHRA_R.QB */ 18415 }; 18416 18417 18418 static const Pool POOL32Axf_7[8] = { 18419 { pool , SHRA__R__QB , 2 , 32, 18420 0xfc000fff, 0x200001ff, 0 , 0, 18421 0x0 }, /* SHRA[_R].QB */ 18422 { instruction , 0 , 0 , 32, 18423 0xfc000fff, 0x200003ff, &SHRL_PH , 0, 18424 DSP_ }, /* SHRL.PH */ 18425 { instruction , 0 , 0 , 32, 18426 0xfc000fff, 0x200005ff, &REPL_QB , 0, 18427 DSP_ }, /* REPL.QB */ 18428 { reserved_block , 0 , 0 , 32, 18429 0xfc000fff, 0x200007ff, 0 , 0, 18430 0x0 }, /* POOL32Axf_7~*(3) */ 18431 { reserved_block , 0 , 0 , 32, 18432 0xfc000fff, 0x200009ff, 0 , 0, 18433 0x0 }, /* POOL32Axf_7~*(4) */ 18434 { reserved_block , 0 , 0 , 32, 18435 0xfc000fff, 0x20000bff, 0 , 0, 18436 0x0 }, /* POOL32Axf_7~*(5) */ 18437 { reserved_block , 0 , 0 , 32, 18438 0xfc000fff, 0x20000dff, 0 , 0, 18439 0x0 }, /* POOL32Axf_7~*(6) */ 18440 { reserved_block , 0 , 0 , 32, 18441 0xfc000fff, 0x20000fff, 0 , 0, 18442 0x0 }, /* POOL32Axf_7~*(7) */ 18443 }; 18444 18445 18446 static const Pool POOL32Axf[8] = { 18447 { reserved_block , 0 , 0 , 32, 18448 0xfc0001ff, 0x2000003f, 0 , 0, 18449 0x0 }, /* POOL32Axf~*(0) */ 18450 { pool , POOL32Axf_1 , 8 , 32, 18451 0xfc0001ff, 0x2000007f, 0 , 0, 18452 0x0 }, /* POOL32Axf_1 */ 18453 { pool , POOL32Axf_2 , 4 , 32, 18454 0xfc0001ff, 0x200000bf, 0 , 0, 18455 0x0 }, /* POOL32Axf_2 */ 18456 { reserved_block , 0 , 0 , 32, 18457 0xfc0001ff, 0x200000ff, 0 , 0, 18458 0x0 }, /* POOL32Axf~*(3) */ 18459 { pool , POOL32Axf_4 , 128 , 32, 18460 0xfc0001ff, 0x2000013f, 0 , 0, 18461 0x0 }, /* POOL32Axf_4 */ 18462 { pool , POOL32Axf_5 , 4 , 32, 18463 0xfc0001ff, 0x2000017f, 0 , 0, 18464 0x0 }, /* POOL32Axf_5 */ 18465 { reserved_block , 0 , 0 , 32, 18466 0xfc0001ff, 0x200001bf, 0 , 0, 18467 0x0 }, /* POOL32Axf~*(6) */ 18468 { pool , POOL32Axf_7 , 8 , 32, 18469 0xfc0001ff, 0x200001ff, 0 , 0, 18470 0x0 }, /* POOL32Axf_7 */ 18471 }; 18472 18473 18474 static const Pool _POOL32A7[8] = { 18475 { pool , P_LSX , 2 , 32, 18476 0xfc00003f, 0x20000007, 0 , 0, 18477 0x0 }, /* P.LSX */ 18478 { instruction , 0 , 0 , 32, 18479 0xfc00003f, 0x2000000f, &LSA , 0, 18480 0x0 }, /* LSA */ 18481 { reserved_block , 0 , 0 , 32, 18482 0xfc00003f, 0x20000017, 0 , 0, 18483 0x0 }, /* _POOL32A7~*(2) */ 18484 { instruction , 0 , 0 , 32, 18485 0xfc00003f, 0x2000001f, &EXTW , 0, 18486 0x0 }, /* EXTW */ 18487 { reserved_block , 0 , 0 , 32, 18488 0xfc00003f, 0x20000027, 0 , 0, 18489 0x0 }, /* _POOL32A7~*(4) */ 18490 { reserved_block , 0 , 0 , 32, 18491 0xfc00003f, 0x2000002f, 0 , 0, 18492 0x0 }, /* _POOL32A7~*(5) */ 18493 { reserved_block , 0 , 0 , 32, 18494 0xfc00003f, 0x20000037, 0 , 0, 18495 0x0 }, /* _POOL32A7~*(6) */ 18496 { pool , POOL32Axf , 8 , 32, 18497 0xfc00003f, 0x2000003f, 0 , 0, 18498 0x0 }, /* POOL32Axf */ 18499 }; 18500 18501 18502 static const Pool P32A[8] = { 18503 { pool , _POOL32A0 , 128 , 32, 18504 0xfc000007, 0x20000000, 0 , 0, 18505 0x0 }, /* _POOL32A0 */ 18506 { instruction , 0 , 0 , 32, 18507 0xfc000007, 0x20000001, &SPECIAL2 , 0, 18508 UDI_ }, /* SPECIAL2 */ 18509 { instruction , 0 , 0 , 32, 18510 0xfc000007, 0x20000002, &COP2_1 , 0, 18511 CP2_ }, /* COP2_1 */ 18512 { instruction , 0 , 0 , 32, 18513 0xfc000007, 0x20000003, &UDI , 0, 18514 UDI_ }, /* UDI */ 18515 { reserved_block , 0 , 0 , 32, 18516 0xfc000007, 0x20000004, 0 , 0, 18517 0x0 }, /* P32A~*(4) */ 18518 { pool , _POOL32A5 , 128 , 32, 18519 0xfc000007, 0x20000005, 0 , 0, 18520 0x0 }, /* _POOL32A5 */ 18521 { reserved_block , 0 , 0 , 32, 18522 0xfc000007, 0x20000006, 0 , 0, 18523 0x0 }, /* P32A~*(6) */ 18524 { pool , _POOL32A7 , 8 , 32, 18525 0xfc000007, 0x20000007, 0 , 0, 18526 0x0 }, /* _POOL32A7 */ 18527 }; 18528 18529 18530 static const Pool P_GP_D[2] = { 18531 { instruction , 0 , 0 , 32, 18532 0xfc000007, 0x40000001, &LD_GP_ , 0, 18533 MIPS64_ }, /* LD[GP] */ 18534 { instruction , 0 , 0 , 32, 18535 0xfc000007, 0x40000005, &SD_GP_ , 0, 18536 MIPS64_ }, /* SD[GP] */ 18537 }; 18538 18539 18540 static const Pool P_GP_W[4] = { 18541 { instruction , 0 , 0 , 32, 18542 0xfc000003, 0x40000000, &ADDIU_GP_W_ , 0, 18543 0x0 }, /* ADDIU[GP.W] */ 18544 { pool , P_GP_D , 2 , 32, 18545 0xfc000003, 0x40000001, 0 , 0, 18546 0x0 }, /* P.GP.D */ 18547 { instruction , 0 , 0 , 32, 18548 0xfc000003, 0x40000002, &LW_GP_ , 0, 18549 0x0 }, /* LW[GP] */ 18550 { instruction , 0 , 0 , 32, 18551 0xfc000003, 0x40000003, &SW_GP_ , 0, 18552 0x0 }, /* SW[GP] */ 18553 }; 18554 18555 18556 static const Pool POOL48I[32] = { 18557 { instruction , 0 , 0 , 48, 18558 0xfc1f00000000ull, 0x600000000000ull, &LI_48_ , 0, 18559 XMMS_ }, /* LI[48] */ 18560 { instruction , 0 , 0 , 48, 18561 0xfc1f00000000ull, 0x600100000000ull, &ADDIU_48_ , 0, 18562 XMMS_ }, /* ADDIU[48] */ 18563 { instruction , 0 , 0 , 48, 18564 0xfc1f00000000ull, 0x600200000000ull, &ADDIU_GP48_ , 0, 18565 XMMS_ }, /* ADDIU[GP48] */ 18566 { instruction , 0 , 0 , 48, 18567 0xfc1f00000000ull, 0x600300000000ull, &ADDIUPC_48_ , 0, 18568 XMMS_ }, /* ADDIUPC[48] */ 18569 { reserved_block , 0 , 0 , 48, 18570 0xfc1f00000000ull, 0x600400000000ull, 0 , 0, 18571 0x0 }, /* POOL48I~*(4) */ 18572 { reserved_block , 0 , 0 , 48, 18573 0xfc1f00000000ull, 0x600500000000ull, 0 , 0, 18574 0x0 }, /* POOL48I~*(5) */ 18575 { reserved_block , 0 , 0 , 48, 18576 0xfc1f00000000ull, 0x600600000000ull, 0 , 0, 18577 0x0 }, /* POOL48I~*(6) */ 18578 { reserved_block , 0 , 0 , 48, 18579 0xfc1f00000000ull, 0x600700000000ull, 0 , 0, 18580 0x0 }, /* POOL48I~*(7) */ 18581 { reserved_block , 0 , 0 , 48, 18582 0xfc1f00000000ull, 0x600800000000ull, 0 , 0, 18583 0x0 }, /* POOL48I~*(8) */ 18584 { reserved_block , 0 , 0 , 48, 18585 0xfc1f00000000ull, 0x600900000000ull, 0 , 0, 18586 0x0 }, /* POOL48I~*(9) */ 18587 { reserved_block , 0 , 0 , 48, 18588 0xfc1f00000000ull, 0x600a00000000ull, 0 , 0, 18589 0x0 }, /* POOL48I~*(10) */ 18590 { instruction , 0 , 0 , 48, 18591 0xfc1f00000000ull, 0x600b00000000ull, &LWPC_48_ , 0, 18592 XMMS_ }, /* LWPC[48] */ 18593 { reserved_block , 0 , 0 , 48, 18594 0xfc1f00000000ull, 0x600c00000000ull, 0 , 0, 18595 0x0 }, /* POOL48I~*(12) */ 18596 { reserved_block , 0 , 0 , 48, 18597 0xfc1f00000000ull, 0x600d00000000ull, 0 , 0, 18598 0x0 }, /* POOL48I~*(13) */ 18599 { reserved_block , 0 , 0 , 48, 18600 0xfc1f00000000ull, 0x600e00000000ull, 0 , 0, 18601 0x0 }, /* POOL48I~*(14) */ 18602 { instruction , 0 , 0 , 48, 18603 0xfc1f00000000ull, 0x600f00000000ull, &SWPC_48_ , 0, 18604 XMMS_ }, /* SWPC[48] */ 18605 { reserved_block , 0 , 0 , 48, 18606 0xfc1f00000000ull, 0x601000000000ull, 0 , 0, 18607 0x0 }, /* POOL48I~*(16) */ 18608 { instruction , 0 , 0 , 48, 18609 0xfc1f00000000ull, 0x601100000000ull, &DADDIU_48_ , 0, 18610 MIPS64_ }, /* DADDIU[48] */ 18611 { reserved_block , 0 , 0 , 48, 18612 0xfc1f00000000ull, 0x601200000000ull, 0 , 0, 18613 0x0 }, /* POOL48I~*(18) */ 18614 { reserved_block , 0 , 0 , 48, 18615 0xfc1f00000000ull, 0x601300000000ull, 0 , 0, 18616 0x0 }, /* POOL48I~*(19) */ 18617 { instruction , 0 , 0 , 48, 18618 0xfc1f00000000ull, 0x601400000000ull, &DLUI_48_ , 0, 18619 MIPS64_ }, /* DLUI[48] */ 18620 { reserved_block , 0 , 0 , 48, 18621 0xfc1f00000000ull, 0x601500000000ull, 0 , 0, 18622 0x0 }, /* POOL48I~*(21) */ 18623 { reserved_block , 0 , 0 , 48, 18624 0xfc1f00000000ull, 0x601600000000ull, 0 , 0, 18625 0x0 }, /* POOL48I~*(22) */ 18626 { reserved_block , 0 , 0 , 48, 18627 0xfc1f00000000ull, 0x601700000000ull, 0 , 0, 18628 0x0 }, /* POOL48I~*(23) */ 18629 { reserved_block , 0 , 0 , 48, 18630 0xfc1f00000000ull, 0x601800000000ull, 0 , 0, 18631 0x0 }, /* POOL48I~*(24) */ 18632 { reserved_block , 0 , 0 , 48, 18633 0xfc1f00000000ull, 0x601900000000ull, 0 , 0, 18634 0x0 }, /* POOL48I~*(25) */ 18635 { reserved_block , 0 , 0 , 48, 18636 0xfc1f00000000ull, 0x601a00000000ull, 0 , 0, 18637 0x0 }, /* POOL48I~*(26) */ 18638 { instruction , 0 , 0 , 48, 18639 0xfc1f00000000ull, 0x601b00000000ull, &LDPC_48_ , 0, 18640 MIPS64_ }, /* LDPC[48] */ 18641 { reserved_block , 0 , 0 , 48, 18642 0xfc1f00000000ull, 0x601c00000000ull, 0 , 0, 18643 0x0 }, /* POOL48I~*(28) */ 18644 { reserved_block , 0 , 0 , 48, 18645 0xfc1f00000000ull, 0x601d00000000ull, 0 , 0, 18646 0x0 }, /* POOL48I~*(29) */ 18647 { reserved_block , 0 , 0 , 48, 18648 0xfc1f00000000ull, 0x601e00000000ull, 0 , 0, 18649 0x0 }, /* POOL48I~*(30) */ 18650 { instruction , 0 , 0 , 48, 18651 0xfc1f00000000ull, 0x601f00000000ull, &SDPC_48_ , 0, 18652 MIPS64_ }, /* SDPC[48] */ 18653 }; 18654 18655 18656 static const Pool PP_SR[4] = { 18657 { instruction , 0 , 0 , 32, 18658 0xfc10f003, 0x80003000, &SAVE_32_ , 0, 18659 0x0 }, /* SAVE[32] */ 18660 { reserved_block , 0 , 0 , 32, 18661 0xfc10f003, 0x80003001, 0 , 0, 18662 0x0 }, /* PP.SR~*(1) */ 18663 { instruction , 0 , 0 , 32, 18664 0xfc10f003, 0x80003002, &RESTORE_32_ , 0, 18665 0x0 }, /* RESTORE[32] */ 18666 { return_instruction , 0 , 0 , 32, 18667 0xfc10f003, 0x80003003, &RESTORE_JRC_32_ , 0, 18668 0x0 }, /* RESTORE.JRC[32] */ 18669 }; 18670 18671 18672 static const Pool P_SR_F[8] = { 18673 { instruction , 0 , 0 , 32, 18674 0xfc10f007, 0x80103000, &SAVEF , 0, 18675 CP1_ }, /* SAVEF */ 18676 { instruction , 0 , 0 , 32, 18677 0xfc10f007, 0x80103001, &RESTOREF , 0, 18678 CP1_ }, /* RESTOREF */ 18679 { reserved_block , 0 , 0 , 32, 18680 0xfc10f007, 0x80103002, 0 , 0, 18681 0x0 }, /* P.SR.F~*(2) */ 18682 { reserved_block , 0 , 0 , 32, 18683 0xfc10f007, 0x80103003, 0 , 0, 18684 0x0 }, /* P.SR.F~*(3) */ 18685 { reserved_block , 0 , 0 , 32, 18686 0xfc10f007, 0x80103004, 0 , 0, 18687 0x0 }, /* P.SR.F~*(4) */ 18688 { reserved_block , 0 , 0 , 32, 18689 0xfc10f007, 0x80103005, 0 , 0, 18690 0x0 }, /* P.SR.F~*(5) */ 18691 { reserved_block , 0 , 0 , 32, 18692 0xfc10f007, 0x80103006, 0 , 0, 18693 0x0 }, /* P.SR.F~*(6) */ 18694 { reserved_block , 0 , 0 , 32, 18695 0xfc10f007, 0x80103007, 0 , 0, 18696 0x0 }, /* P.SR.F~*(7) */ 18697 }; 18698 18699 18700 static const Pool P_SR[2] = { 18701 { pool , PP_SR , 4 , 32, 18702 0xfc10f000, 0x80003000, 0 , 0, 18703 0x0 }, /* PP.SR */ 18704 { pool , P_SR_F , 8 , 32, 18705 0xfc10f000, 0x80103000, 0 , 0, 18706 0x0 }, /* P.SR.F */ 18707 }; 18708 18709 18710 static const Pool P_SLL[5] = { 18711 { instruction , 0 , 0 , 32, 18712 0xffe0f1ff, 0x8000c000, &NOP_32_ , 0, 18713 0x0 }, /* NOP[32] */ 18714 { instruction , 0 , 0 , 32, 18715 0xffe0f1ff, 0x8000c003, &EHB , 0, 18716 0x0 }, /* EHB */ 18717 { instruction , 0 , 0 , 32, 18718 0xffe0f1ff, 0x8000c005, &PAUSE , 0, 18719 0x0 }, /* PAUSE */ 18720 { instruction , 0 , 0 , 32, 18721 0xffe0f1ff, 0x8000c006, &SYNC , 0, 18722 0x0 }, /* SYNC */ 18723 { instruction , 0 , 0 , 32, 18724 0xfc00f1e0, 0x8000c000, &SLL_32_ , 0, 18725 0x0 }, /* SLL[32] */ 18726 }; 18727 18728 18729 static const Pool P_SHIFT[16] = { 18730 { pool , P_SLL , 5 , 32, 18731 0xfc00f1e0, 0x8000c000, 0 , 0, 18732 0x0 }, /* P.SLL */ 18733 { reserved_block , 0 , 0 , 32, 18734 0xfc00f1e0, 0x8000c020, 0 , 0, 18735 0x0 }, /* P.SHIFT~*(1) */ 18736 { instruction , 0 , 0 , 32, 18737 0xfc00f1e0, 0x8000c040, &SRL_32_ , 0, 18738 0x0 }, /* SRL[32] */ 18739 { reserved_block , 0 , 0 , 32, 18740 0xfc00f1e0, 0x8000c060, 0 , 0, 18741 0x0 }, /* P.SHIFT~*(3) */ 18742 { instruction , 0 , 0 , 32, 18743 0xfc00f1e0, 0x8000c080, &SRA , 0, 18744 0x0 }, /* SRA */ 18745 { reserved_block , 0 , 0 , 32, 18746 0xfc00f1e0, 0x8000c0a0, 0 , 0, 18747 0x0 }, /* P.SHIFT~*(5) */ 18748 { instruction , 0 , 0 , 32, 18749 0xfc00f1e0, 0x8000c0c0, &ROTR , 0, 18750 0x0 }, /* ROTR */ 18751 { reserved_block , 0 , 0 , 32, 18752 0xfc00f1e0, 0x8000c0e0, 0 , 0, 18753 0x0 }, /* P.SHIFT~*(7) */ 18754 { instruction , 0 , 0 , 32, 18755 0xfc00f1e0, 0x8000c100, &DSLL , 0, 18756 MIPS64_ }, /* DSLL */ 18757 { instruction , 0 , 0 , 32, 18758 0xfc00f1e0, 0x8000c120, &DSLL32 , 0, 18759 MIPS64_ }, /* DSLL32 */ 18760 { instruction , 0 , 0 , 32, 18761 0xfc00f1e0, 0x8000c140, &DSRL , 0, 18762 MIPS64_ }, /* DSRL */ 18763 { instruction , 0 , 0 , 32, 18764 0xfc00f1e0, 0x8000c160, &DSRL32 , 0, 18765 MIPS64_ }, /* DSRL32 */ 18766 { instruction , 0 , 0 , 32, 18767 0xfc00f1e0, 0x8000c180, &DSRA , 0, 18768 MIPS64_ }, /* DSRA */ 18769 { instruction , 0 , 0 , 32, 18770 0xfc00f1e0, 0x8000c1a0, &DSRA32 , 0, 18771 MIPS64_ }, /* DSRA32 */ 18772 { instruction , 0 , 0 , 32, 18773 0xfc00f1e0, 0x8000c1c0, &DROTR , 0, 18774 MIPS64_ }, /* DROTR */ 18775 { instruction , 0 , 0 , 32, 18776 0xfc00f1e0, 0x8000c1e0, &DROTR32 , 0, 18777 MIPS64_ }, /* DROTR32 */ 18778 }; 18779 18780 18781 static const Pool P_ROTX[4] = { 18782 { instruction , 0 , 0 , 32, 18783 0xfc00f820, 0x8000d000, &ROTX , 0, 18784 XMMS_ }, /* ROTX */ 18785 { reserved_block , 0 , 0 , 32, 18786 0xfc00f820, 0x8000d020, 0 , 0, 18787 0x0 }, /* P.ROTX~*(1) */ 18788 { reserved_block , 0 , 0 , 32, 18789 0xfc00f820, 0x8000d800, 0 , 0, 18790 0x0 }, /* P.ROTX~*(2) */ 18791 { reserved_block , 0 , 0 , 32, 18792 0xfc00f820, 0x8000d820, 0 , 0, 18793 0x0 }, /* P.ROTX~*(3) */ 18794 }; 18795 18796 18797 static const Pool P_INS[4] = { 18798 { instruction , 0 , 0 , 32, 18799 0xfc00f820, 0x8000e000, &INS , 0, 18800 XMMS_ }, /* INS */ 18801 { instruction , 0 , 0 , 32, 18802 0xfc00f820, 0x8000e020, &DINSU , 0, 18803 MIPS64_ }, /* DINSU */ 18804 { instruction , 0 , 0 , 32, 18805 0xfc00f820, 0x8000e800, &DINSM , 0, 18806 MIPS64_ }, /* DINSM */ 18807 { instruction , 0 , 0 , 32, 18808 0xfc00f820, 0x8000e820, &DINS , 0, 18809 MIPS64_ }, /* DINS */ 18810 }; 18811 18812 18813 static const Pool P_EXT[4] = { 18814 { instruction , 0 , 0 , 32, 18815 0xfc00f820, 0x8000f000, &EXT , 0, 18816 XMMS_ }, /* EXT */ 18817 { instruction , 0 , 0 , 32, 18818 0xfc00f820, 0x8000f020, &DEXTU , 0, 18819 MIPS64_ }, /* DEXTU */ 18820 { instruction , 0 , 0 , 32, 18821 0xfc00f820, 0x8000f800, &DEXTM , 0, 18822 MIPS64_ }, /* DEXTM */ 18823 { instruction , 0 , 0 , 32, 18824 0xfc00f820, 0x8000f820, &DEXT , 0, 18825 MIPS64_ }, /* DEXT */ 18826 }; 18827 18828 18829 static const Pool P_U12[16] = { 18830 { instruction , 0 , 0 , 32, 18831 0xfc00f000, 0x80000000, &ORI , 0, 18832 0x0 }, /* ORI */ 18833 { instruction , 0 , 0 , 32, 18834 0xfc00f000, 0x80001000, &XORI , 0, 18835 0x0 }, /* XORI */ 18836 { instruction , 0 , 0 , 32, 18837 0xfc00f000, 0x80002000, &ANDI_32_ , 0, 18838 0x0 }, /* ANDI[32] */ 18839 { pool , P_SR , 2 , 32, 18840 0xfc00f000, 0x80003000, 0 , 0, 18841 0x0 }, /* P.SR */ 18842 { instruction , 0 , 0 , 32, 18843 0xfc00f000, 0x80004000, &SLTI , 0, 18844 0x0 }, /* SLTI */ 18845 { instruction , 0 , 0 , 32, 18846 0xfc00f000, 0x80005000, &SLTIU , 0, 18847 0x0 }, /* SLTIU */ 18848 { instruction , 0 , 0 , 32, 18849 0xfc00f000, 0x80006000, &SEQI , 0, 18850 0x0 }, /* SEQI */ 18851 { reserved_block , 0 , 0 , 32, 18852 0xfc00f000, 0x80007000, 0 , 0, 18853 0x0 }, /* P.U12~*(7) */ 18854 { instruction , 0 , 0 , 32, 18855 0xfc00f000, 0x80008000, &ADDIU_NEG_ , 0, 18856 0x0 }, /* ADDIU[NEG] */ 18857 { instruction , 0 , 0 , 32, 18858 0xfc00f000, 0x80009000, &DADDIU_U12_ , 0, 18859 MIPS64_ }, /* DADDIU[U12] */ 18860 { instruction , 0 , 0 , 32, 18861 0xfc00f000, 0x8000a000, &DADDIU_NEG_ , 0, 18862 MIPS64_ }, /* DADDIU[NEG] */ 18863 { instruction , 0 , 0 , 32, 18864 0xfc00f000, 0x8000b000, &DROTX , 0, 18865 MIPS64_ }, /* DROTX */ 18866 { pool , P_SHIFT , 16 , 32, 18867 0xfc00f000, 0x8000c000, 0 , 0, 18868 0x0 }, /* P.SHIFT */ 18869 { pool , P_ROTX , 4 , 32, 18870 0xfc00f000, 0x8000d000, 0 , 0, 18871 0x0 }, /* P.ROTX */ 18872 { pool , P_INS , 4 , 32, 18873 0xfc00f000, 0x8000e000, 0 , 0, 18874 0x0 }, /* P.INS */ 18875 { pool , P_EXT , 4 , 32, 18876 0xfc00f000, 0x8000f000, 0 , 0, 18877 0x0 }, /* P.EXT */ 18878 }; 18879 18880 18881 static const Pool RINT_fmt[2] = { 18882 { instruction , 0 , 0 , 32, 18883 0xfc0003ff, 0xa0000020, &RINT_S , 0, 18884 CP1_ }, /* RINT.S */ 18885 { instruction , 0 , 0 , 32, 18886 0xfc0003ff, 0xa0000220, &RINT_D , 0, 18887 CP1_ }, /* RINT.D */ 18888 }; 18889 18890 18891 static const Pool ADD_fmt0[2] = { 18892 { instruction , 0 , 0 , 32, 18893 0xfc0003ff, 0xa0000030, &ADD_S , 0, 18894 CP1_ }, /* ADD.S */ 18895 { reserved_block , 0 , 0 , 32, 18896 0xfc0003ff, 0xa0000230, 0 , 0, 18897 CP1_ }, /* ADD.fmt0~*(1) */ 18898 }; 18899 18900 18901 static const Pool SELEQZ_fmt[2] = { 18902 { instruction , 0 , 0 , 32, 18903 0xfc0003ff, 0xa0000038, &SELEQZ_S , 0, 18904 CP1_ }, /* SELEQZ.S */ 18905 { instruction , 0 , 0 , 32, 18906 0xfc0003ff, 0xa0000238, &SELEQZ_D , 0, 18907 CP1_ }, /* SELEQZ.D */ 18908 }; 18909 18910 18911 static const Pool CLASS_fmt[2] = { 18912 { instruction , 0 , 0 , 32, 18913 0xfc0003ff, 0xa0000060, &CLASS_S , 0, 18914 CP1_ }, /* CLASS.S */ 18915 { instruction , 0 , 0 , 32, 18916 0xfc0003ff, 0xa0000260, &CLASS_D , 0, 18917 CP1_ }, /* CLASS.D */ 18918 }; 18919 18920 18921 static const Pool SUB_fmt0[2] = { 18922 { instruction , 0 , 0 , 32, 18923 0xfc0003ff, 0xa0000070, &SUB_S , 0, 18924 CP1_ }, /* SUB.S */ 18925 { reserved_block , 0 , 0 , 32, 18926 0xfc0003ff, 0xa0000270, 0 , 0, 18927 CP1_ }, /* SUB.fmt0~*(1) */ 18928 }; 18929 18930 18931 static const Pool SELNEZ_fmt[2] = { 18932 { instruction , 0 , 0 , 32, 18933 0xfc0003ff, 0xa0000078, &SELNEZ_S , 0, 18934 CP1_ }, /* SELNEZ.S */ 18935 { instruction , 0 , 0 , 32, 18936 0xfc0003ff, 0xa0000278, &SELNEZ_D , 0, 18937 CP1_ }, /* SELNEZ.D */ 18938 }; 18939 18940 18941 static const Pool MUL_fmt0[2] = { 18942 { instruction , 0 , 0 , 32, 18943 0xfc0003ff, 0xa00000b0, &MUL_S , 0, 18944 CP1_ }, /* MUL.S */ 18945 { reserved_block , 0 , 0 , 32, 18946 0xfc0003ff, 0xa00002b0, 0 , 0, 18947 CP1_ }, /* MUL.fmt0~*(1) */ 18948 }; 18949 18950 18951 static const Pool SEL_fmt[2] = { 18952 { instruction , 0 , 0 , 32, 18953 0xfc0003ff, 0xa00000b8, &SEL_S , 0, 18954 CP1_ }, /* SEL.S */ 18955 { instruction , 0 , 0 , 32, 18956 0xfc0003ff, 0xa00002b8, &SEL_D , 0, 18957 CP1_ }, /* SEL.D */ 18958 }; 18959 18960 18961 static const Pool DIV_fmt0[2] = { 18962 { instruction , 0 , 0 , 32, 18963 0xfc0003ff, 0xa00000f0, &DIV_S , 0, 18964 CP1_ }, /* DIV.S */ 18965 { reserved_block , 0 , 0 , 32, 18966 0xfc0003ff, 0xa00002f0, 0 , 0, 18967 CP1_ }, /* DIV.fmt0~*(1) */ 18968 }; 18969 18970 18971 static const Pool ADD_fmt1[2] = { 18972 { instruction , 0 , 0 , 32, 18973 0xfc0003ff, 0xa0000130, &ADD_D , 0, 18974 CP1_ }, /* ADD.D */ 18975 { reserved_block , 0 , 0 , 32, 18976 0xfc0003ff, 0xa0000330, 0 , 0, 18977 CP1_ }, /* ADD.fmt1~*(1) */ 18978 }; 18979 18980 18981 static const Pool SUB_fmt1[2] = { 18982 { instruction , 0 , 0 , 32, 18983 0xfc0003ff, 0xa0000170, &SUB_D , 0, 18984 CP1_ }, /* SUB.D */ 18985 { reserved_block , 0 , 0 , 32, 18986 0xfc0003ff, 0xa0000370, 0 , 0, 18987 CP1_ }, /* SUB.fmt1~*(1) */ 18988 }; 18989 18990 18991 static const Pool MUL_fmt1[2] = { 18992 { instruction , 0 , 0 , 32, 18993 0xfc0003ff, 0xa00001b0, &MUL_D , 0, 18994 CP1_ }, /* MUL.D */ 18995 { reserved_block , 0 , 0 , 32, 18996 0xfc0003ff, 0xa00003b0, 0 , 0, 18997 CP1_ }, /* MUL.fmt1~*(1) */ 18998 }; 18999 19000 19001 static const Pool MADDF_fmt[2] = { 19002 { instruction , 0 , 0 , 32, 19003 0xfc0003ff, 0xa00001b8, &MADDF_S , 0, 19004 CP1_ }, /* MADDF.S */ 19005 { instruction , 0 , 0 , 32, 19006 0xfc0003ff, 0xa00003b8, &MADDF_D , 0, 19007 CP1_ }, /* MADDF.D */ 19008 }; 19009 19010 19011 static const Pool DIV_fmt1[2] = { 19012 { instruction , 0 , 0 , 32, 19013 0xfc0003ff, 0xa00001f0, &DIV_D , 0, 19014 CP1_ }, /* DIV.D */ 19015 { reserved_block , 0 , 0 , 32, 19016 0xfc0003ff, 0xa00003f0, 0 , 0, 19017 CP1_ }, /* DIV.fmt1~*(1) */ 19018 }; 19019 19020 19021 static const Pool MSUBF_fmt[2] = { 19022 { instruction , 0 , 0 , 32, 19023 0xfc0003ff, 0xa00001f8, &MSUBF_S , 0, 19024 CP1_ }, /* MSUBF.S */ 19025 { instruction , 0 , 0 , 32, 19026 0xfc0003ff, 0xa00003f8, &MSUBF_D , 0, 19027 CP1_ }, /* MSUBF.D */ 19028 }; 19029 19030 19031 static const Pool POOL32F_0[64] = { 19032 { reserved_block , 0 , 0 , 32, 19033 0xfc0001ff, 0xa0000000, 0 , 0, 19034 CP1_ }, /* POOL32F_0~*(0) */ 19035 { reserved_block , 0 , 0 , 32, 19036 0xfc0001ff, 0xa0000008, 0 , 0, 19037 CP1_ }, /* POOL32F_0~*(1) */ 19038 { reserved_block , 0 , 0 , 32, 19039 0xfc0001ff, 0xa0000010, 0 , 0, 19040 CP1_ }, /* POOL32F_0~*(2) */ 19041 { reserved_block , 0 , 0 , 32, 19042 0xfc0001ff, 0xa0000018, 0 , 0, 19043 CP1_ }, /* POOL32F_0~*(3) */ 19044 { pool , RINT_fmt , 2 , 32, 19045 0xfc0001ff, 0xa0000020, 0 , 0, 19046 CP1_ }, /* RINT.fmt */ 19047 { reserved_block , 0 , 0 , 32, 19048 0xfc0001ff, 0xa0000028, 0 , 0, 19049 CP1_ }, /* POOL32F_0~*(5) */ 19050 { pool , ADD_fmt0 , 2 , 32, 19051 0xfc0001ff, 0xa0000030, 0 , 0, 19052 CP1_ }, /* ADD.fmt0 */ 19053 { pool , SELEQZ_fmt , 2 , 32, 19054 0xfc0001ff, 0xa0000038, 0 , 0, 19055 CP1_ }, /* SELEQZ.fmt */ 19056 { reserved_block , 0 , 0 , 32, 19057 0xfc0001ff, 0xa0000040, 0 , 0, 19058 CP1_ }, /* POOL32F_0~*(8) */ 19059 { reserved_block , 0 , 0 , 32, 19060 0xfc0001ff, 0xa0000048, 0 , 0, 19061 CP1_ }, /* POOL32F_0~*(9) */ 19062 { reserved_block , 0 , 0 , 32, 19063 0xfc0001ff, 0xa0000050, 0 , 0, 19064 CP1_ }, /* POOL32F_0~*(10) */ 19065 { reserved_block , 0 , 0 , 32, 19066 0xfc0001ff, 0xa0000058, 0 , 0, 19067 CP1_ }, /* POOL32F_0~*(11) */ 19068 { pool , CLASS_fmt , 2 , 32, 19069 0xfc0001ff, 0xa0000060, 0 , 0, 19070 CP1_ }, /* CLASS.fmt */ 19071 { reserved_block , 0 , 0 , 32, 19072 0xfc0001ff, 0xa0000068, 0 , 0, 19073 CP1_ }, /* POOL32F_0~*(13) */ 19074 { pool , SUB_fmt0 , 2 , 32, 19075 0xfc0001ff, 0xa0000070, 0 , 0, 19076 CP1_ }, /* SUB.fmt0 */ 19077 { pool , SELNEZ_fmt , 2 , 32, 19078 0xfc0001ff, 0xa0000078, 0 , 0, 19079 CP1_ }, /* SELNEZ.fmt */ 19080 { reserved_block , 0 , 0 , 32, 19081 0xfc0001ff, 0xa0000080, 0 , 0, 19082 CP1_ }, /* POOL32F_0~*(16) */ 19083 { reserved_block , 0 , 0 , 32, 19084 0xfc0001ff, 0xa0000088, 0 , 0, 19085 CP1_ }, /* POOL32F_0~*(17) */ 19086 { reserved_block , 0 , 0 , 32, 19087 0xfc0001ff, 0xa0000090, 0 , 0, 19088 CP1_ }, /* POOL32F_0~*(18) */ 19089 { reserved_block , 0 , 0 , 32, 19090 0xfc0001ff, 0xa0000098, 0 , 0, 19091 CP1_ }, /* POOL32F_0~*(19) */ 19092 { reserved_block , 0 , 0 , 32, 19093 0xfc0001ff, 0xa00000a0, 0 , 0, 19094 CP1_ }, /* POOL32F_0~*(20) */ 19095 { reserved_block , 0 , 0 , 32, 19096 0xfc0001ff, 0xa00000a8, 0 , 0, 19097 CP1_ }, /* POOL32F_0~*(21) */ 19098 { pool , MUL_fmt0 , 2 , 32, 19099 0xfc0001ff, 0xa00000b0, 0 , 0, 19100 CP1_ }, /* MUL.fmt0 */ 19101 { pool , SEL_fmt , 2 , 32, 19102 0xfc0001ff, 0xa00000b8, 0 , 0, 19103 CP1_ }, /* SEL.fmt */ 19104 { reserved_block , 0 , 0 , 32, 19105 0xfc0001ff, 0xa00000c0, 0 , 0, 19106 CP1_ }, /* POOL32F_0~*(24) */ 19107 { reserved_block , 0 , 0 , 32, 19108 0xfc0001ff, 0xa00000c8, 0 , 0, 19109 CP1_ }, /* POOL32F_0~*(25) */ 19110 { reserved_block , 0 , 0 , 32, 19111 0xfc0001ff, 0xa00000d0, 0 , 0, 19112 CP1_ }, /* POOL32F_0~*(26) */ 19113 { reserved_block , 0 , 0 , 32, 19114 0xfc0001ff, 0xa00000d8, 0 , 0, 19115 CP1_ }, /* POOL32F_0~*(27) */ 19116 { reserved_block , 0 , 0 , 32, 19117 0xfc0001ff, 0xa00000e0, 0 , 0, 19118 CP1_ }, /* POOL32F_0~*(28) */ 19119 { reserved_block , 0 , 0 , 32, 19120 0xfc0001ff, 0xa00000e8, 0 , 0, 19121 CP1_ }, /* POOL32F_0~*(29) */ 19122 { pool , DIV_fmt0 , 2 , 32, 19123 0xfc0001ff, 0xa00000f0, 0 , 0, 19124 CP1_ }, /* DIV.fmt0 */ 19125 { reserved_block , 0 , 0 , 32, 19126 0xfc0001ff, 0xa00000f8, 0 , 0, 19127 CP1_ }, /* POOL32F_0~*(31) */ 19128 { reserved_block , 0 , 0 , 32, 19129 0xfc0001ff, 0xa0000100, 0 , 0, 19130 CP1_ }, /* POOL32F_0~*(32) */ 19131 { reserved_block , 0 , 0 , 32, 19132 0xfc0001ff, 0xa0000108, 0 , 0, 19133 CP1_ }, /* POOL32F_0~*(33) */ 19134 { reserved_block , 0 , 0 , 32, 19135 0xfc0001ff, 0xa0000110, 0 , 0, 19136 CP1_ }, /* POOL32F_0~*(34) */ 19137 { reserved_block , 0 , 0 , 32, 19138 0xfc0001ff, 0xa0000118, 0 , 0, 19139 CP1_ }, /* POOL32F_0~*(35) */ 19140 { reserved_block , 0 , 0 , 32, 19141 0xfc0001ff, 0xa0000120, 0 , 0, 19142 CP1_ }, /* POOL32F_0~*(36) */ 19143 { reserved_block , 0 , 0 , 32, 19144 0xfc0001ff, 0xa0000128, 0 , 0, 19145 CP1_ }, /* POOL32F_0~*(37) */ 19146 { pool , ADD_fmt1 , 2 , 32, 19147 0xfc0001ff, 0xa0000130, 0 , 0, 19148 CP1_ }, /* ADD.fmt1 */ 19149 { reserved_block , 0 , 0 , 32, 19150 0xfc0001ff, 0xa0000138, 0 , 0, 19151 CP1_ }, /* POOL32F_0~*(39) */ 19152 { reserved_block , 0 , 0 , 32, 19153 0xfc0001ff, 0xa0000140, 0 , 0, 19154 CP1_ }, /* POOL32F_0~*(40) */ 19155 { reserved_block , 0 , 0 , 32, 19156 0xfc0001ff, 0xa0000148, 0 , 0, 19157 CP1_ }, /* POOL32F_0~*(41) */ 19158 { reserved_block , 0 , 0 , 32, 19159 0xfc0001ff, 0xa0000150, 0 , 0, 19160 CP1_ }, /* POOL32F_0~*(42) */ 19161 { reserved_block , 0 , 0 , 32, 19162 0xfc0001ff, 0xa0000158, 0 , 0, 19163 CP1_ }, /* POOL32F_0~*(43) */ 19164 { reserved_block , 0 , 0 , 32, 19165 0xfc0001ff, 0xa0000160, 0 , 0, 19166 CP1_ }, /* POOL32F_0~*(44) */ 19167 { reserved_block , 0 , 0 , 32, 19168 0xfc0001ff, 0xa0000168, 0 , 0, 19169 CP1_ }, /* POOL32F_0~*(45) */ 19170 { pool , SUB_fmt1 , 2 , 32, 19171 0xfc0001ff, 0xa0000170, 0 , 0, 19172 CP1_ }, /* SUB.fmt1 */ 19173 { reserved_block , 0 , 0 , 32, 19174 0xfc0001ff, 0xa0000178, 0 , 0, 19175 CP1_ }, /* POOL32F_0~*(47) */ 19176 { reserved_block , 0 , 0 , 32, 19177 0xfc0001ff, 0xa0000180, 0 , 0, 19178 CP1_ }, /* POOL32F_0~*(48) */ 19179 { reserved_block , 0 , 0 , 32, 19180 0xfc0001ff, 0xa0000188, 0 , 0, 19181 CP1_ }, /* POOL32F_0~*(49) */ 19182 { reserved_block , 0 , 0 , 32, 19183 0xfc0001ff, 0xa0000190, 0 , 0, 19184 CP1_ }, /* POOL32F_0~*(50) */ 19185 { reserved_block , 0 , 0 , 32, 19186 0xfc0001ff, 0xa0000198, 0 , 0, 19187 CP1_ }, /* POOL32F_0~*(51) */ 19188 { reserved_block , 0 , 0 , 32, 19189 0xfc0001ff, 0xa00001a0, 0 , 0, 19190 CP1_ }, /* POOL32F_0~*(52) */ 19191 { reserved_block , 0 , 0 , 32, 19192 0xfc0001ff, 0xa00001a8, 0 , 0, 19193 CP1_ }, /* POOL32F_0~*(53) */ 19194 { pool , MUL_fmt1 , 2 , 32, 19195 0xfc0001ff, 0xa00001b0, 0 , 0, 19196 CP1_ }, /* MUL.fmt1 */ 19197 { pool , MADDF_fmt , 2 , 32, 19198 0xfc0001ff, 0xa00001b8, 0 , 0, 19199 CP1_ }, /* MADDF.fmt */ 19200 { reserved_block , 0 , 0 , 32, 19201 0xfc0001ff, 0xa00001c0, 0 , 0, 19202 CP1_ }, /* POOL32F_0~*(56) */ 19203 { reserved_block , 0 , 0 , 32, 19204 0xfc0001ff, 0xa00001c8, 0 , 0, 19205 CP1_ }, /* POOL32F_0~*(57) */ 19206 { reserved_block , 0 , 0 , 32, 19207 0xfc0001ff, 0xa00001d0, 0 , 0, 19208 CP1_ }, /* POOL32F_0~*(58) */ 19209 { reserved_block , 0 , 0 , 32, 19210 0xfc0001ff, 0xa00001d8, 0 , 0, 19211 CP1_ }, /* POOL32F_0~*(59) */ 19212 { reserved_block , 0 , 0 , 32, 19213 0xfc0001ff, 0xa00001e0, 0 , 0, 19214 CP1_ }, /* POOL32F_0~*(60) */ 19215 { reserved_block , 0 , 0 , 32, 19216 0xfc0001ff, 0xa00001e8, 0 , 0, 19217 CP1_ }, /* POOL32F_0~*(61) */ 19218 { pool , DIV_fmt1 , 2 , 32, 19219 0xfc0001ff, 0xa00001f0, 0 , 0, 19220 CP1_ }, /* DIV.fmt1 */ 19221 { pool , MSUBF_fmt , 2 , 32, 19222 0xfc0001ff, 0xa00001f8, 0 , 0, 19223 CP1_ }, /* MSUBF.fmt */ 19224 }; 19225 19226 19227 static const Pool MIN_fmt[2] = { 19228 { instruction , 0 , 0 , 32, 19229 0xfc00023f, 0xa0000003, &MIN_S , 0, 19230 CP1_ }, /* MIN.S */ 19231 { instruction , 0 , 0 , 32, 19232 0xfc00023f, 0xa0000203, &MIN_D , 0, 19233 CP1_ }, /* MIN.D */ 19234 }; 19235 19236 19237 static const Pool MAX_fmt[2] = { 19238 { instruction , 0 , 0 , 32, 19239 0xfc00023f, 0xa000000b, &MAX_S , 0, 19240 CP1_ }, /* MAX.S */ 19241 { instruction , 0 , 0 , 32, 19242 0xfc00023f, 0xa000020b, &MAX_D , 0, 19243 CP1_ }, /* MAX.D */ 19244 }; 19245 19246 19247 static const Pool MINA_fmt[2] = { 19248 { instruction , 0 , 0 , 32, 19249 0xfc00023f, 0xa0000023, &MINA_S , 0, 19250 CP1_ }, /* MINA.S */ 19251 { instruction , 0 , 0 , 32, 19252 0xfc00023f, 0xa0000223, &MINA_D , 0, 19253 CP1_ }, /* MINA.D */ 19254 }; 19255 19256 19257 static const Pool MAXA_fmt[2] = { 19258 { instruction , 0 , 0 , 32, 19259 0xfc00023f, 0xa000002b, &MAXA_S , 0, 19260 CP1_ }, /* MAXA.S */ 19261 { instruction , 0 , 0 , 32, 19262 0xfc00023f, 0xa000022b, &MAXA_D , 0, 19263 CP1_ }, /* MAXA.D */ 19264 }; 19265 19266 19267 static const Pool CVT_L_fmt[2] = { 19268 { instruction , 0 , 0 , 32, 19269 0xfc007fff, 0xa000013b, &CVT_L_S , 0, 19270 CP1_ }, /* CVT.L.S */ 19271 { instruction , 0 , 0 , 32, 19272 0xfc007fff, 0xa000413b, &CVT_L_D , 0, 19273 CP1_ }, /* CVT.L.D */ 19274 }; 19275 19276 19277 static const Pool RSQRT_fmt[2] = { 19278 { instruction , 0 , 0 , 32, 19279 0xfc007fff, 0xa000023b, &RSQRT_S , 0, 19280 CP1_ }, /* RSQRT.S */ 19281 { instruction , 0 , 0 , 32, 19282 0xfc007fff, 0xa000423b, &RSQRT_D , 0, 19283 CP1_ }, /* RSQRT.D */ 19284 }; 19285 19286 19287 static const Pool FLOOR_L_fmt[2] = { 19288 { instruction , 0 , 0 , 32, 19289 0xfc007fff, 0xa000033b, &FLOOR_L_S , 0, 19290 CP1_ }, /* FLOOR.L.S */ 19291 { instruction , 0 , 0 , 32, 19292 0xfc007fff, 0xa000433b, &FLOOR_L_D , 0, 19293 CP1_ }, /* FLOOR.L.D */ 19294 }; 19295 19296 19297 static const Pool CVT_W_fmt[2] = { 19298 { instruction , 0 , 0 , 32, 19299 0xfc007fff, 0xa000093b, &CVT_W_S , 0, 19300 CP1_ }, /* CVT.W.S */ 19301 { instruction , 0 , 0 , 32, 19302 0xfc007fff, 0xa000493b, &CVT_W_D , 0, 19303 CP1_ }, /* CVT.W.D */ 19304 }; 19305 19306 19307 static const Pool SQRT_fmt[2] = { 19308 { instruction , 0 , 0 , 32, 19309 0xfc007fff, 0xa0000a3b, &SQRT_S , 0, 19310 CP1_ }, /* SQRT.S */ 19311 { instruction , 0 , 0 , 32, 19312 0xfc007fff, 0xa0004a3b, &SQRT_D , 0, 19313 CP1_ }, /* SQRT.D */ 19314 }; 19315 19316 19317 static const Pool FLOOR_W_fmt[2] = { 19318 { instruction , 0 , 0 , 32, 19319 0xfc007fff, 0xa0000b3b, &FLOOR_W_S , 0, 19320 CP1_ }, /* FLOOR.W.S */ 19321 { instruction , 0 , 0 , 32, 19322 0xfc007fff, 0xa0004b3b, &FLOOR_W_D , 0, 19323 CP1_ }, /* FLOOR.W.D */ 19324 }; 19325 19326 19327 static const Pool RECIP_fmt[2] = { 19328 { instruction , 0 , 0 , 32, 19329 0xfc007fff, 0xa000123b, &RECIP_S , 0, 19330 CP1_ }, /* RECIP.S */ 19331 { instruction , 0 , 0 , 32, 19332 0xfc007fff, 0xa000523b, &RECIP_D , 0, 19333 CP1_ }, /* RECIP.D */ 19334 }; 19335 19336 19337 static const Pool CEIL_L_fmt[2] = { 19338 { instruction , 0 , 0 , 32, 19339 0xfc007fff, 0xa000133b, &CEIL_L_S , 0, 19340 CP1_ }, /* CEIL.L.S */ 19341 { instruction , 0 , 0 , 32, 19342 0xfc007fff, 0xa000533b, &CEIL_L_D , 0, 19343 CP1_ }, /* CEIL.L.D */ 19344 }; 19345 19346 19347 static const Pool CEIL_W_fmt[2] = { 19348 { instruction , 0 , 0 , 32, 19349 0xfc007fff, 0xa0001b3b, &CEIL_W_S , 0, 19350 CP1_ }, /* CEIL.W.S */ 19351 { instruction , 0 , 0 , 32, 19352 0xfc007fff, 0xa0005b3b, &CEIL_W_D , 0, 19353 CP1_ }, /* CEIL.W.D */ 19354 }; 19355 19356 19357 static const Pool TRUNC_L_fmt[2] = { 19358 { instruction , 0 , 0 , 32, 19359 0xfc007fff, 0xa000233b, &TRUNC_L_S , 0, 19360 CP1_ }, /* TRUNC.L.S */ 19361 { instruction , 0 , 0 , 32, 19362 0xfc007fff, 0xa000633b, &TRUNC_L_D , 0, 19363 CP1_ }, /* TRUNC.L.D */ 19364 }; 19365 19366 19367 static const Pool TRUNC_W_fmt[2] = { 19368 { instruction , 0 , 0 , 32, 19369 0xfc007fff, 0xa0002b3b, &TRUNC_W_S , 0, 19370 CP1_ }, /* TRUNC.W.S */ 19371 { instruction , 0 , 0 , 32, 19372 0xfc007fff, 0xa0006b3b, &TRUNC_W_D , 0, 19373 CP1_ }, /* TRUNC.W.D */ 19374 }; 19375 19376 19377 static const Pool ROUND_L_fmt[2] = { 19378 { instruction , 0 , 0 , 32, 19379 0xfc007fff, 0xa000333b, &ROUND_L_S , 0, 19380 CP1_ }, /* ROUND.L.S */ 19381 { instruction , 0 , 0 , 32, 19382 0xfc007fff, 0xa000733b, &ROUND_L_D , 0, 19383 CP1_ }, /* ROUND.L.D */ 19384 }; 19385 19386 19387 static const Pool ROUND_W_fmt[2] = { 19388 { instruction , 0 , 0 , 32, 19389 0xfc007fff, 0xa0003b3b, &ROUND_W_S , 0, 19390 CP1_ }, /* ROUND.W.S */ 19391 { instruction , 0 , 0 , 32, 19392 0xfc007fff, 0xa0007b3b, &ROUND_W_D , 0, 19393 CP1_ }, /* ROUND.W.D */ 19394 }; 19395 19396 19397 static const Pool POOL32Fxf_0[64] = { 19398 { reserved_block , 0 , 0 , 32, 19399 0xfc003fff, 0xa000003b, 0 , 0, 19400 CP1_ }, /* POOL32Fxf_0~*(0) */ 19401 { pool , CVT_L_fmt , 2 , 32, 19402 0xfc003fff, 0xa000013b, 0 , 0, 19403 CP1_ }, /* CVT.L.fmt */ 19404 { pool , RSQRT_fmt , 2 , 32, 19405 0xfc003fff, 0xa000023b, 0 , 0, 19406 CP1_ }, /* RSQRT.fmt */ 19407 { pool , FLOOR_L_fmt , 2 , 32, 19408 0xfc003fff, 0xa000033b, 0 , 0, 19409 CP1_ }, /* FLOOR.L.fmt */ 19410 { reserved_block , 0 , 0 , 32, 19411 0xfc003fff, 0xa000043b, 0 , 0, 19412 CP1_ }, /* POOL32Fxf_0~*(4) */ 19413 { reserved_block , 0 , 0 , 32, 19414 0xfc003fff, 0xa000053b, 0 , 0, 19415 CP1_ }, /* POOL32Fxf_0~*(5) */ 19416 { reserved_block , 0 , 0 , 32, 19417 0xfc003fff, 0xa000063b, 0 , 0, 19418 CP1_ }, /* POOL32Fxf_0~*(6) */ 19419 { reserved_block , 0 , 0 , 32, 19420 0xfc003fff, 0xa000073b, 0 , 0, 19421 CP1_ }, /* POOL32Fxf_0~*(7) */ 19422 { reserved_block , 0 , 0 , 32, 19423 0xfc003fff, 0xa000083b, 0 , 0, 19424 CP1_ }, /* POOL32Fxf_0~*(8) */ 19425 { pool , CVT_W_fmt , 2 , 32, 19426 0xfc003fff, 0xa000093b, 0 , 0, 19427 CP1_ }, /* CVT.W.fmt */ 19428 { pool , SQRT_fmt , 2 , 32, 19429 0xfc003fff, 0xa0000a3b, 0 , 0, 19430 CP1_ }, /* SQRT.fmt */ 19431 { pool , FLOOR_W_fmt , 2 , 32, 19432 0xfc003fff, 0xa0000b3b, 0 , 0, 19433 CP1_ }, /* FLOOR.W.fmt */ 19434 { reserved_block , 0 , 0 , 32, 19435 0xfc003fff, 0xa0000c3b, 0 , 0, 19436 CP1_ }, /* POOL32Fxf_0~*(12) */ 19437 { reserved_block , 0 , 0 , 32, 19438 0xfc003fff, 0xa0000d3b, 0 , 0, 19439 CP1_ }, /* POOL32Fxf_0~*(13) */ 19440 { reserved_block , 0 , 0 , 32, 19441 0xfc003fff, 0xa0000e3b, 0 , 0, 19442 CP1_ }, /* POOL32Fxf_0~*(14) */ 19443 { reserved_block , 0 , 0 , 32, 19444 0xfc003fff, 0xa0000f3b, 0 , 0, 19445 CP1_ }, /* POOL32Fxf_0~*(15) */ 19446 { instruction , 0 , 0 , 32, 19447 0xfc003fff, 0xa000103b, &CFC1 , 0, 19448 CP1_ }, /* CFC1 */ 19449 { reserved_block , 0 , 0 , 32, 19450 0xfc003fff, 0xa000113b, 0 , 0, 19451 CP1_ }, /* POOL32Fxf_0~*(17) */ 19452 { pool , RECIP_fmt , 2 , 32, 19453 0xfc003fff, 0xa000123b, 0 , 0, 19454 CP1_ }, /* RECIP.fmt */ 19455 { pool , CEIL_L_fmt , 2 , 32, 19456 0xfc003fff, 0xa000133b, 0 , 0, 19457 CP1_ }, /* CEIL.L.fmt */ 19458 { reserved_block , 0 , 0 , 32, 19459 0xfc003fff, 0xa000143b, 0 , 0, 19460 CP1_ }, /* POOL32Fxf_0~*(20) */ 19461 { reserved_block , 0 , 0 , 32, 19462 0xfc003fff, 0xa000153b, 0 , 0, 19463 CP1_ }, /* POOL32Fxf_0~*(21) */ 19464 { reserved_block , 0 , 0 , 32, 19465 0xfc003fff, 0xa000163b, 0 , 0, 19466 CP1_ }, /* POOL32Fxf_0~*(22) */ 19467 { reserved_block , 0 , 0 , 32, 19468 0xfc003fff, 0xa000173b, 0 , 0, 19469 CP1_ }, /* POOL32Fxf_0~*(23) */ 19470 { instruction , 0 , 0 , 32, 19471 0xfc003fff, 0xa000183b, &CTC1 , 0, 19472 CP1_ }, /* CTC1 */ 19473 { reserved_block , 0 , 0 , 32, 19474 0xfc003fff, 0xa000193b, 0 , 0, 19475 CP1_ }, /* POOL32Fxf_0~*(25) */ 19476 { reserved_block , 0 , 0 , 32, 19477 0xfc003fff, 0xa0001a3b, 0 , 0, 19478 CP1_ }, /* POOL32Fxf_0~*(26) */ 19479 { pool , CEIL_W_fmt , 2 , 32, 19480 0xfc003fff, 0xa0001b3b, 0 , 0, 19481 CP1_ }, /* CEIL.W.fmt */ 19482 { reserved_block , 0 , 0 , 32, 19483 0xfc003fff, 0xa0001c3b, 0 , 0, 19484 CP1_ }, /* POOL32Fxf_0~*(28) */ 19485 { reserved_block , 0 , 0 , 32, 19486 0xfc003fff, 0xa0001d3b, 0 , 0, 19487 CP1_ }, /* POOL32Fxf_0~*(29) */ 19488 { reserved_block , 0 , 0 , 32, 19489 0xfc003fff, 0xa0001e3b, 0 , 0, 19490 CP1_ }, /* POOL32Fxf_0~*(30) */ 19491 { reserved_block , 0 , 0 , 32, 19492 0xfc003fff, 0xa0001f3b, 0 , 0, 19493 CP1_ }, /* POOL32Fxf_0~*(31) */ 19494 { instruction , 0 , 0 , 32, 19495 0xfc003fff, 0xa000203b, &MFC1 , 0, 19496 CP1_ }, /* MFC1 */ 19497 { instruction , 0 , 0 , 32, 19498 0xfc003fff, 0xa000213b, &CVT_S_PL , 0, 19499 CP1_ }, /* CVT.S.PL */ 19500 { reserved_block , 0 , 0 , 32, 19501 0xfc003fff, 0xa000223b, 0 , 0, 19502 CP1_ }, /* POOL32Fxf_0~*(34) */ 19503 { pool , TRUNC_L_fmt , 2 , 32, 19504 0xfc003fff, 0xa000233b, 0 , 0, 19505 CP1_ }, /* TRUNC.L.fmt */ 19506 { instruction , 0 , 0 , 32, 19507 0xfc003fff, 0xa000243b, &DMFC1 , 0, 19508 CP1_ | MIPS64_ }, /* DMFC1 */ 19509 { reserved_block , 0 , 0 , 32, 19510 0xfc003fff, 0xa000253b, 0 , 0, 19511 CP1_ }, /* POOL32Fxf_0~*(37) */ 19512 { reserved_block , 0 , 0 , 32, 19513 0xfc003fff, 0xa000263b, 0 , 0, 19514 CP1_ }, /* POOL32Fxf_0~*(38) */ 19515 { reserved_block , 0 , 0 , 32, 19516 0xfc003fff, 0xa000273b, 0 , 0, 19517 CP1_ }, /* POOL32Fxf_0~*(39) */ 19518 { instruction , 0 , 0 , 32, 19519 0xfc003fff, 0xa000283b, &MTC1 , 0, 19520 CP1_ }, /* MTC1 */ 19521 { instruction , 0 , 0 , 32, 19522 0xfc003fff, 0xa000293b, &CVT_S_PU , 0, 19523 CP1_ }, /* CVT.S.PU */ 19524 { reserved_block , 0 , 0 , 32, 19525 0xfc003fff, 0xa0002a3b, 0 , 0, 19526 CP1_ }, /* POOL32Fxf_0~*(42) */ 19527 { pool , TRUNC_W_fmt , 2 , 32, 19528 0xfc003fff, 0xa0002b3b, 0 , 0, 19529 CP1_ }, /* TRUNC.W.fmt */ 19530 { instruction , 0 , 0 , 32, 19531 0xfc003fff, 0xa0002c3b, &DMTC1 , 0, 19532 CP1_ | MIPS64_ }, /* DMTC1 */ 19533 { reserved_block , 0 , 0 , 32, 19534 0xfc003fff, 0xa0002d3b, 0 , 0, 19535 CP1_ }, /* POOL32Fxf_0~*(45) */ 19536 { reserved_block , 0 , 0 , 32, 19537 0xfc003fff, 0xa0002e3b, 0 , 0, 19538 CP1_ }, /* POOL32Fxf_0~*(46) */ 19539 { reserved_block , 0 , 0 , 32, 19540 0xfc003fff, 0xa0002f3b, 0 , 0, 19541 CP1_ }, /* POOL32Fxf_0~*(47) */ 19542 { instruction , 0 , 0 , 32, 19543 0xfc003fff, 0xa000303b, &MFHC1 , 0, 19544 CP1_ }, /* MFHC1 */ 19545 { reserved_block , 0 , 0 , 32, 19546 0xfc003fff, 0xa000313b, 0 , 0, 19547 CP1_ }, /* POOL32Fxf_0~*(49) */ 19548 { reserved_block , 0 , 0 , 32, 19549 0xfc003fff, 0xa000323b, 0 , 0, 19550 CP1_ }, /* POOL32Fxf_0~*(50) */ 19551 { pool , ROUND_L_fmt , 2 , 32, 19552 0xfc003fff, 0xa000333b, 0 , 0, 19553 CP1_ }, /* ROUND.L.fmt */ 19554 { reserved_block , 0 , 0 , 32, 19555 0xfc003fff, 0xa000343b, 0 , 0, 19556 CP1_ }, /* POOL32Fxf_0~*(52) */ 19557 { reserved_block , 0 , 0 , 32, 19558 0xfc003fff, 0xa000353b, 0 , 0, 19559 CP1_ }, /* POOL32Fxf_0~*(53) */ 19560 { reserved_block , 0 , 0 , 32, 19561 0xfc003fff, 0xa000363b, 0 , 0, 19562 CP1_ }, /* POOL32Fxf_0~*(54) */ 19563 { reserved_block , 0 , 0 , 32, 19564 0xfc003fff, 0xa000373b, 0 , 0, 19565 CP1_ }, /* POOL32Fxf_0~*(55) */ 19566 { instruction , 0 , 0 , 32, 19567 0xfc003fff, 0xa000383b, &MTHC1 , 0, 19568 CP1_ }, /* MTHC1 */ 19569 { reserved_block , 0 , 0 , 32, 19570 0xfc003fff, 0xa000393b, 0 , 0, 19571 CP1_ }, /* POOL32Fxf_0~*(57) */ 19572 { reserved_block , 0 , 0 , 32, 19573 0xfc003fff, 0xa0003a3b, 0 , 0, 19574 CP1_ }, /* POOL32Fxf_0~*(58) */ 19575 { pool , ROUND_W_fmt , 2 , 32, 19576 0xfc003fff, 0xa0003b3b, 0 , 0, 19577 CP1_ }, /* ROUND.W.fmt */ 19578 { reserved_block , 0 , 0 , 32, 19579 0xfc003fff, 0xa0003c3b, 0 , 0, 19580 CP1_ }, /* POOL32Fxf_0~*(60) */ 19581 { reserved_block , 0 , 0 , 32, 19582 0xfc003fff, 0xa0003d3b, 0 , 0, 19583 CP1_ }, /* POOL32Fxf_0~*(61) */ 19584 { reserved_block , 0 , 0 , 32, 19585 0xfc003fff, 0xa0003e3b, 0 , 0, 19586 CP1_ }, /* POOL32Fxf_0~*(62) */ 19587 { reserved_block , 0 , 0 , 32, 19588 0xfc003fff, 0xa0003f3b, 0 , 0, 19589 CP1_ }, /* POOL32Fxf_0~*(63) */ 19590 }; 19591 19592 19593 static const Pool MOV_fmt[4] = { 19594 { instruction , 0 , 0 , 32, 19595 0xfc007fff, 0xa000007b, &MOV_S , 0, 19596 CP1_ }, /* MOV.S */ 19597 { instruction , 0 , 0 , 32, 19598 0xfc007fff, 0xa000207b, &MOV_D , 0, 19599 CP1_ }, /* MOV.D */ 19600 { reserved_block , 0 , 0 , 32, 19601 0xfc007fff, 0xa000407b, 0 , 0, 19602 CP1_ }, /* MOV.fmt~*(2) */ 19603 { reserved_block , 0 , 0 , 32, 19604 0xfc007fff, 0xa000607b, 0 , 0, 19605 CP1_ }, /* MOV.fmt~*(3) */ 19606 }; 19607 19608 19609 static const Pool ABS_fmt[4] = { 19610 { instruction , 0 , 0 , 32, 19611 0xfc007fff, 0xa000037b, &ABS_S , 0, 19612 CP1_ }, /* ABS.S */ 19613 { instruction , 0 , 0 , 32, 19614 0xfc007fff, 0xa000237b, &ABS_D , 0, 19615 CP1_ }, /* ABS.D */ 19616 { reserved_block , 0 , 0 , 32, 19617 0xfc007fff, 0xa000437b, 0 , 0, 19618 CP1_ }, /* ABS.fmt~*(2) */ 19619 { reserved_block , 0 , 0 , 32, 19620 0xfc007fff, 0xa000637b, 0 , 0, 19621 CP1_ }, /* ABS.fmt~*(3) */ 19622 }; 19623 19624 19625 static const Pool NEG_fmt[4] = { 19626 { instruction , 0 , 0 , 32, 19627 0xfc007fff, 0xa0000b7b, &NEG_S , 0, 19628 CP1_ }, /* NEG.S */ 19629 { instruction , 0 , 0 , 32, 19630 0xfc007fff, 0xa0002b7b, &NEG_D , 0, 19631 CP1_ }, /* NEG.D */ 19632 { reserved_block , 0 , 0 , 32, 19633 0xfc007fff, 0xa0004b7b, 0 , 0, 19634 CP1_ }, /* NEG.fmt~*(2) */ 19635 { reserved_block , 0 , 0 , 32, 19636 0xfc007fff, 0xa0006b7b, 0 , 0, 19637 CP1_ }, /* NEG.fmt~*(3) */ 19638 }; 19639 19640 19641 static const Pool CVT_D_fmt[4] = { 19642 { instruction , 0 , 0 , 32, 19643 0xfc007fff, 0xa000137b, &CVT_D_S , 0, 19644 CP1_ }, /* CVT.D.S */ 19645 { instruction , 0 , 0 , 32, 19646 0xfc007fff, 0xa000337b, &CVT_D_W , 0, 19647 CP1_ }, /* CVT.D.W */ 19648 { instruction , 0 , 0 , 32, 19649 0xfc007fff, 0xa000537b, &CVT_D_L , 0, 19650 CP1_ }, /* CVT.D.L */ 19651 { reserved_block , 0 , 0 , 32, 19652 0xfc007fff, 0xa000737b, 0 , 0, 19653 CP1_ }, /* CVT.D.fmt~*(3) */ 19654 }; 19655 19656 19657 static const Pool CVT_S_fmt[4] = { 19658 { instruction , 0 , 0 , 32, 19659 0xfc007fff, 0xa0001b7b, &CVT_S_D , 0, 19660 CP1_ }, /* CVT.S.D */ 19661 { instruction , 0 , 0 , 32, 19662 0xfc007fff, 0xa0003b7b, &CVT_S_W , 0, 19663 CP1_ }, /* CVT.S.W */ 19664 { instruction , 0 , 0 , 32, 19665 0xfc007fff, 0xa0005b7b, &CVT_S_L , 0, 19666 CP1_ }, /* CVT.S.L */ 19667 { reserved_block , 0 , 0 , 32, 19668 0xfc007fff, 0xa0007b7b, 0 , 0, 19669 CP1_ }, /* CVT.S.fmt~*(3) */ 19670 }; 19671 19672 19673 static const Pool POOL32Fxf_1[32] = { 19674 { pool , MOV_fmt , 4 , 32, 19675 0xfc001fff, 0xa000007b, 0 , 0, 19676 CP1_ }, /* MOV.fmt */ 19677 { reserved_block , 0 , 0 , 32, 19678 0xfc001fff, 0xa000017b, 0 , 0, 19679 CP1_ }, /* POOL32Fxf_1~*(1) */ 19680 { reserved_block , 0 , 0 , 32, 19681 0xfc001fff, 0xa000027b, 0 , 0, 19682 CP1_ }, /* POOL32Fxf_1~*(2) */ 19683 { pool , ABS_fmt , 4 , 32, 19684 0xfc001fff, 0xa000037b, 0 , 0, 19685 CP1_ }, /* ABS.fmt */ 19686 { reserved_block , 0 , 0 , 32, 19687 0xfc001fff, 0xa000047b, 0 , 0, 19688 CP1_ }, /* POOL32Fxf_1~*(4) */ 19689 { reserved_block , 0 , 0 , 32, 19690 0xfc001fff, 0xa000057b, 0 , 0, 19691 CP1_ }, /* POOL32Fxf_1~*(5) */ 19692 { reserved_block , 0 , 0 , 32, 19693 0xfc001fff, 0xa000067b, 0 , 0, 19694 CP1_ }, /* POOL32Fxf_1~*(6) */ 19695 { reserved_block , 0 , 0 , 32, 19696 0xfc001fff, 0xa000077b, 0 , 0, 19697 CP1_ }, /* POOL32Fxf_1~*(7) */ 19698 { reserved_block , 0 , 0 , 32, 19699 0xfc001fff, 0xa000087b, 0 , 0, 19700 CP1_ }, /* POOL32Fxf_1~*(8) */ 19701 { reserved_block , 0 , 0 , 32, 19702 0xfc001fff, 0xa000097b, 0 , 0, 19703 CP1_ }, /* POOL32Fxf_1~*(9) */ 19704 { reserved_block , 0 , 0 , 32, 19705 0xfc001fff, 0xa0000a7b, 0 , 0, 19706 CP1_ }, /* POOL32Fxf_1~*(10) */ 19707 { pool , NEG_fmt , 4 , 32, 19708 0xfc001fff, 0xa0000b7b, 0 , 0, 19709 CP1_ }, /* NEG.fmt */ 19710 { reserved_block , 0 , 0 , 32, 19711 0xfc001fff, 0xa0000c7b, 0 , 0, 19712 CP1_ }, /* POOL32Fxf_1~*(12) */ 19713 { reserved_block , 0 , 0 , 32, 19714 0xfc001fff, 0xa0000d7b, 0 , 0, 19715 CP1_ }, /* POOL32Fxf_1~*(13) */ 19716 { reserved_block , 0 , 0 , 32, 19717 0xfc001fff, 0xa0000e7b, 0 , 0, 19718 CP1_ }, /* POOL32Fxf_1~*(14) */ 19719 { reserved_block , 0 , 0 , 32, 19720 0xfc001fff, 0xa0000f7b, 0 , 0, 19721 CP1_ }, /* POOL32Fxf_1~*(15) */ 19722 { reserved_block , 0 , 0 , 32, 19723 0xfc001fff, 0xa000107b, 0 , 0, 19724 CP1_ }, /* POOL32Fxf_1~*(16) */ 19725 { reserved_block , 0 , 0 , 32, 19726 0xfc001fff, 0xa000117b, 0 , 0, 19727 CP1_ }, /* POOL32Fxf_1~*(17) */ 19728 { reserved_block , 0 , 0 , 32, 19729 0xfc001fff, 0xa000127b, 0 , 0, 19730 CP1_ }, /* POOL32Fxf_1~*(18) */ 19731 { pool , CVT_D_fmt , 4 , 32, 19732 0xfc001fff, 0xa000137b, 0 , 0, 19733 CP1_ }, /* CVT.D.fmt */ 19734 { reserved_block , 0 , 0 , 32, 19735 0xfc001fff, 0xa000147b, 0 , 0, 19736 CP1_ }, /* POOL32Fxf_1~*(20) */ 19737 { reserved_block , 0 , 0 , 32, 19738 0xfc001fff, 0xa000157b, 0 , 0, 19739 CP1_ }, /* POOL32Fxf_1~*(21) */ 19740 { reserved_block , 0 , 0 , 32, 19741 0xfc001fff, 0xa000167b, 0 , 0, 19742 CP1_ }, /* POOL32Fxf_1~*(22) */ 19743 { reserved_block , 0 , 0 , 32, 19744 0xfc001fff, 0xa000177b, 0 , 0, 19745 CP1_ }, /* POOL32Fxf_1~*(23) */ 19746 { reserved_block , 0 , 0 , 32, 19747 0xfc001fff, 0xa000187b, 0 , 0, 19748 CP1_ }, /* POOL32Fxf_1~*(24) */ 19749 { reserved_block , 0 , 0 , 32, 19750 0xfc001fff, 0xa000197b, 0 , 0, 19751 CP1_ }, /* POOL32Fxf_1~*(25) */ 19752 { reserved_block , 0 , 0 , 32, 19753 0xfc001fff, 0xa0001a7b, 0 , 0, 19754 CP1_ }, /* POOL32Fxf_1~*(26) */ 19755 { pool , CVT_S_fmt , 4 , 32, 19756 0xfc001fff, 0xa0001b7b, 0 , 0, 19757 CP1_ }, /* CVT.S.fmt */ 19758 { reserved_block , 0 , 0 , 32, 19759 0xfc001fff, 0xa0001c7b, 0 , 0, 19760 CP1_ }, /* POOL32Fxf_1~*(28) */ 19761 { reserved_block , 0 , 0 , 32, 19762 0xfc001fff, 0xa0001d7b, 0 , 0, 19763 CP1_ }, /* POOL32Fxf_1~*(29) */ 19764 { reserved_block , 0 , 0 , 32, 19765 0xfc001fff, 0xa0001e7b, 0 , 0, 19766 CP1_ }, /* POOL32Fxf_1~*(30) */ 19767 { reserved_block , 0 , 0 , 32, 19768 0xfc001fff, 0xa0001f7b, 0 , 0, 19769 CP1_ }, /* POOL32Fxf_1~*(31) */ 19770 }; 19771 19772 19773 static const Pool POOL32Fxf[4] = { 19774 { pool , POOL32Fxf_0 , 64 , 32, 19775 0xfc0000ff, 0xa000003b, 0 , 0, 19776 CP1_ }, /* POOL32Fxf_0 */ 19777 { pool , POOL32Fxf_1 , 32 , 32, 19778 0xfc0000ff, 0xa000007b, 0 , 0, 19779 CP1_ }, /* POOL32Fxf_1 */ 19780 { reserved_block , 0 , 0 , 32, 19781 0xfc0000ff, 0xa00000bb, 0 , 0, 19782 CP1_ }, /* POOL32Fxf~*(2) */ 19783 { reserved_block , 0 , 0 , 32, 19784 0xfc0000ff, 0xa00000fb, 0 , 0, 19785 CP1_ }, /* POOL32Fxf~*(3) */ 19786 }; 19787 19788 19789 static const Pool POOL32F_3[8] = { 19790 { pool , MIN_fmt , 2 , 32, 19791 0xfc00003f, 0xa0000003, 0 , 0, 19792 CP1_ }, /* MIN.fmt */ 19793 { pool , MAX_fmt , 2 , 32, 19794 0xfc00003f, 0xa000000b, 0 , 0, 19795 CP1_ }, /* MAX.fmt */ 19796 { reserved_block , 0 , 0 , 32, 19797 0xfc00003f, 0xa0000013, 0 , 0, 19798 CP1_ }, /* POOL32F_3~*(2) */ 19799 { reserved_block , 0 , 0 , 32, 19800 0xfc00003f, 0xa000001b, 0 , 0, 19801 CP1_ }, /* POOL32F_3~*(3) */ 19802 { pool , MINA_fmt , 2 , 32, 19803 0xfc00003f, 0xa0000023, 0 , 0, 19804 CP1_ }, /* MINA.fmt */ 19805 { pool , MAXA_fmt , 2 , 32, 19806 0xfc00003f, 0xa000002b, 0 , 0, 19807 CP1_ }, /* MAXA.fmt */ 19808 { reserved_block , 0 , 0 , 32, 19809 0xfc00003f, 0xa0000033, 0 , 0, 19810 CP1_ }, /* POOL32F_3~*(6) */ 19811 { pool , POOL32Fxf , 4 , 32, 19812 0xfc00003f, 0xa000003b, 0 , 0, 19813 CP1_ }, /* POOL32Fxf */ 19814 }; 19815 19816 19817 static const Pool CMP_condn_S[32] = { 19818 { instruction , 0 , 0 , 32, 19819 0xfc0007ff, 0xa0000005, &CMP_AF_S , 0, 19820 CP1_ }, /* CMP.AF.S */ 19821 { instruction , 0 , 0 , 32, 19822 0xfc0007ff, 0xa0000045, &CMP_UN_S , 0, 19823 CP1_ }, /* CMP.UN.S */ 19824 { instruction , 0 , 0 , 32, 19825 0xfc0007ff, 0xa0000085, &CMP_EQ_S , 0, 19826 CP1_ }, /* CMP.EQ.S */ 19827 { instruction , 0 , 0 , 32, 19828 0xfc0007ff, 0xa00000c5, &CMP_UEQ_S , 0, 19829 CP1_ }, /* CMP.UEQ.S */ 19830 { instruction , 0 , 0 , 32, 19831 0xfc0007ff, 0xa0000105, &CMP_LT_S , 0, 19832 CP1_ }, /* CMP.LT.S */ 19833 { instruction , 0 , 0 , 32, 19834 0xfc0007ff, 0xa0000145, &CMP_ULT_S , 0, 19835 CP1_ }, /* CMP.ULT.S */ 19836 { instruction , 0 , 0 , 32, 19837 0xfc0007ff, 0xa0000185, &CMP_LE_S , 0, 19838 CP1_ }, /* CMP.LE.S */ 19839 { instruction , 0 , 0 , 32, 19840 0xfc0007ff, 0xa00001c5, &CMP_ULE_S , 0, 19841 CP1_ }, /* CMP.ULE.S */ 19842 { instruction , 0 , 0 , 32, 19843 0xfc0007ff, 0xa0000205, &CMP_SAF_S , 0, 19844 CP1_ }, /* CMP.SAF.S */ 19845 { instruction , 0 , 0 , 32, 19846 0xfc0007ff, 0xa0000245, &CMP_SUN_S , 0, 19847 CP1_ }, /* CMP.SUN.S */ 19848 { instruction , 0 , 0 , 32, 19849 0xfc0007ff, 0xa0000285, &CMP_SEQ_S , 0, 19850 CP1_ }, /* CMP.SEQ.S */ 19851 { instruction , 0 , 0 , 32, 19852 0xfc0007ff, 0xa00002c5, &CMP_SUEQ_S , 0, 19853 CP1_ }, /* CMP.SUEQ.S */ 19854 { instruction , 0 , 0 , 32, 19855 0xfc0007ff, 0xa0000305, &CMP_SLT_S , 0, 19856 CP1_ }, /* CMP.SLT.S */ 19857 { instruction , 0 , 0 , 32, 19858 0xfc0007ff, 0xa0000345, &CMP_SULT_S , 0, 19859 CP1_ }, /* CMP.SULT.S */ 19860 { instruction , 0 , 0 , 32, 19861 0xfc0007ff, 0xa0000385, &CMP_SLE_S , 0, 19862 CP1_ }, /* CMP.SLE.S */ 19863 { instruction , 0 , 0 , 32, 19864 0xfc0007ff, 0xa00003c5, &CMP_SULE_S , 0, 19865 CP1_ }, /* CMP.SULE.S */ 19866 { reserved_block , 0 , 0 , 32, 19867 0xfc0007ff, 0xa0000405, 0 , 0, 19868 CP1_ }, /* CMP.condn.S~*(16) */ 19869 { instruction , 0 , 0 , 32, 19870 0xfc0007ff, 0xa0000445, &CMP_OR_S , 0, 19871 CP1_ }, /* CMP.OR.S */ 19872 { instruction , 0 , 0 , 32, 19873 0xfc0007ff, 0xa0000485, &CMP_UNE_S , 0, 19874 CP1_ }, /* CMP.UNE.S */ 19875 { instruction , 0 , 0 , 32, 19876 0xfc0007ff, 0xa00004c5, &CMP_NE_S , 0, 19877 CP1_ }, /* CMP.NE.S */ 19878 { reserved_block , 0 , 0 , 32, 19879 0xfc0007ff, 0xa0000505, 0 , 0, 19880 CP1_ }, /* CMP.condn.S~*(20) */ 19881 { reserved_block , 0 , 0 , 32, 19882 0xfc0007ff, 0xa0000545, 0 , 0, 19883 CP1_ }, /* CMP.condn.S~*(21) */ 19884 { reserved_block , 0 , 0 , 32, 19885 0xfc0007ff, 0xa0000585, 0 , 0, 19886 CP1_ }, /* CMP.condn.S~*(22) */ 19887 { reserved_block , 0 , 0 , 32, 19888 0xfc0007ff, 0xa00005c5, 0 , 0, 19889 CP1_ }, /* CMP.condn.S~*(23) */ 19890 { reserved_block , 0 , 0 , 32, 19891 0xfc0007ff, 0xa0000605, 0 , 0, 19892 CP1_ }, /* CMP.condn.S~*(24) */ 19893 { instruction , 0 , 0 , 32, 19894 0xfc0007ff, 0xa0000645, &CMP_SOR_S , 0, 19895 CP1_ }, /* CMP.SOR.S */ 19896 { instruction , 0 , 0 , 32, 19897 0xfc0007ff, 0xa0000685, &CMP_SUNE_S , 0, 19898 CP1_ }, /* CMP.SUNE.S */ 19899 { instruction , 0 , 0 , 32, 19900 0xfc0007ff, 0xa00006c5, &CMP_SNE_S , 0, 19901 CP1_ }, /* CMP.SNE.S */ 19902 { reserved_block , 0 , 0 , 32, 19903 0xfc0007ff, 0xa0000705, 0 , 0, 19904 CP1_ }, /* CMP.condn.S~*(28) */ 19905 { reserved_block , 0 , 0 , 32, 19906 0xfc0007ff, 0xa0000745, 0 , 0, 19907 CP1_ }, /* CMP.condn.S~*(29) */ 19908 { reserved_block , 0 , 0 , 32, 19909 0xfc0007ff, 0xa0000785, 0 , 0, 19910 CP1_ }, /* CMP.condn.S~*(30) */ 19911 { reserved_block , 0 , 0 , 32, 19912 0xfc0007ff, 0xa00007c5, 0 , 0, 19913 CP1_ }, /* CMP.condn.S~*(31) */ 19914 }; 19915 19916 19917 static const Pool CMP_condn_D[32] = { 19918 { instruction , 0 , 0 , 32, 19919 0xfc0007ff, 0xa0000015, &CMP_AF_D , 0, 19920 CP1_ }, /* CMP.AF.D */ 19921 { instruction , 0 , 0 , 32, 19922 0xfc0007ff, 0xa0000055, &CMP_UN_D , 0, 19923 CP1_ }, /* CMP.UN.D */ 19924 { instruction , 0 , 0 , 32, 19925 0xfc0007ff, 0xa0000095, &CMP_EQ_D , 0, 19926 CP1_ }, /* CMP.EQ.D */ 19927 { instruction , 0 , 0 , 32, 19928 0xfc0007ff, 0xa00000d5, &CMP_UEQ_D , 0, 19929 CP1_ }, /* CMP.UEQ.D */ 19930 { instruction , 0 , 0 , 32, 19931 0xfc0007ff, 0xa0000115, &CMP_LT_D , 0, 19932 CP1_ }, /* CMP.LT.D */ 19933 { instruction , 0 , 0 , 32, 19934 0xfc0007ff, 0xa0000155, &CMP_ULT_D , 0, 19935 CP1_ }, /* CMP.ULT.D */ 19936 { instruction , 0 , 0 , 32, 19937 0xfc0007ff, 0xa0000195, &CMP_LE_D , 0, 19938 CP1_ }, /* CMP.LE.D */ 19939 { instruction , 0 , 0 , 32, 19940 0xfc0007ff, 0xa00001d5, &CMP_ULE_D , 0, 19941 CP1_ }, /* CMP.ULE.D */ 19942 { instruction , 0 , 0 , 32, 19943 0xfc0007ff, 0xa0000215, &CMP_SAF_D , 0, 19944 CP1_ }, /* CMP.SAF.D */ 19945 { instruction , 0 , 0 , 32, 19946 0xfc0007ff, 0xa0000255, &CMP_SUN_D , 0, 19947 CP1_ }, /* CMP.SUN.D */ 19948 { instruction , 0 , 0 , 32, 19949 0xfc0007ff, 0xa0000295, &CMP_SEQ_D , 0, 19950 CP1_ }, /* CMP.SEQ.D */ 19951 { instruction , 0 , 0 , 32, 19952 0xfc0007ff, 0xa00002d5, &CMP_SUEQ_D , 0, 19953 CP1_ }, /* CMP.SUEQ.D */ 19954 { instruction , 0 , 0 , 32, 19955 0xfc0007ff, 0xa0000315, &CMP_SLT_D , 0, 19956 CP1_ }, /* CMP.SLT.D */ 19957 { instruction , 0 , 0 , 32, 19958 0xfc0007ff, 0xa0000355, &CMP_SULT_D , 0, 19959 CP1_ }, /* CMP.SULT.D */ 19960 { instruction , 0 , 0 , 32, 19961 0xfc0007ff, 0xa0000395, &CMP_SLE_D , 0, 19962 CP1_ }, /* CMP.SLE.D */ 19963 { instruction , 0 , 0 , 32, 19964 0xfc0007ff, 0xa00003d5, &CMP_SULE_D , 0, 19965 CP1_ }, /* CMP.SULE.D */ 19966 { reserved_block , 0 , 0 , 32, 19967 0xfc0007ff, 0xa0000415, 0 , 0, 19968 CP1_ }, /* CMP.condn.D~*(16) */ 19969 { instruction , 0 , 0 , 32, 19970 0xfc0007ff, 0xa0000455, &CMP_OR_D , 0, 19971 CP1_ }, /* CMP.OR.D */ 19972 { instruction , 0 , 0 , 32, 19973 0xfc0007ff, 0xa0000495, &CMP_UNE_D , 0, 19974 CP1_ }, /* CMP.UNE.D */ 19975 { instruction , 0 , 0 , 32, 19976 0xfc0007ff, 0xa00004d5, &CMP_NE_D , 0, 19977 CP1_ }, /* CMP.NE.D */ 19978 { reserved_block , 0 , 0 , 32, 19979 0xfc0007ff, 0xa0000515, 0 , 0, 19980 CP1_ }, /* CMP.condn.D~*(20) */ 19981 { reserved_block , 0 , 0 , 32, 19982 0xfc0007ff, 0xa0000555, 0 , 0, 19983 CP1_ }, /* CMP.condn.D~*(21) */ 19984 { reserved_block , 0 , 0 , 32, 19985 0xfc0007ff, 0xa0000595, 0 , 0, 19986 CP1_ }, /* CMP.condn.D~*(22) */ 19987 { reserved_block , 0 , 0 , 32, 19988 0xfc0007ff, 0xa00005d5, 0 , 0, 19989 CP1_ }, /* CMP.condn.D~*(23) */ 19990 { reserved_block , 0 , 0 , 32, 19991 0xfc0007ff, 0xa0000615, 0 , 0, 19992 CP1_ }, /* CMP.condn.D~*(24) */ 19993 { instruction , 0 , 0 , 32, 19994 0xfc0007ff, 0xa0000655, &CMP_SOR_D , 0, 19995 CP1_ }, /* CMP.SOR.D */ 19996 { instruction , 0 , 0 , 32, 19997 0xfc0007ff, 0xa0000695, &CMP_SUNE_D , 0, 19998 CP1_ }, /* CMP.SUNE.D */ 19999 { instruction , 0 , 0 , 32, 20000 0xfc0007ff, 0xa00006d5, &CMP_SNE_D , 0, 20001 CP1_ }, /* CMP.SNE.D */ 20002 { reserved_block , 0 , 0 , 32, 20003 0xfc0007ff, 0xa0000715, 0 , 0, 20004 CP1_ }, /* CMP.condn.D~*(28) */ 20005 { reserved_block , 0 , 0 , 32, 20006 0xfc0007ff, 0xa0000755, 0 , 0, 20007 CP1_ }, /* CMP.condn.D~*(29) */ 20008 { reserved_block , 0 , 0 , 32, 20009 0xfc0007ff, 0xa0000795, 0 , 0, 20010 CP1_ }, /* CMP.condn.D~*(30) */ 20011 { reserved_block , 0 , 0 , 32, 20012 0xfc0007ff, 0xa00007d5, 0 , 0, 20013 CP1_ }, /* CMP.condn.D~*(31) */ 20014 }; 20015 20016 20017 static const Pool POOL32F_5[8] = { 20018 { pool , CMP_condn_S , 32 , 32, 20019 0xfc00003f, 0xa0000005, 0 , 0, 20020 CP1_ }, /* CMP.condn.S */ 20021 { reserved_block , 0 , 0 , 32, 20022 0xfc00003f, 0xa000000d, 0 , 0, 20023 CP1_ }, /* POOL32F_5~*(1) */ 20024 { pool , CMP_condn_D , 32 , 32, 20025 0xfc00003f, 0xa0000015, 0 , 0, 20026 CP1_ }, /* CMP.condn.D */ 20027 { reserved_block , 0 , 0 , 32, 20028 0xfc00003f, 0xa000001d, 0 , 0, 20029 CP1_ }, /* POOL32F_5~*(3) */ 20030 { reserved_block , 0 , 0 , 32, 20031 0xfc00003f, 0xa0000025, 0 , 0, 20032 CP1_ }, /* POOL32F_5~*(4) */ 20033 { reserved_block , 0 , 0 , 32, 20034 0xfc00003f, 0xa000002d, 0 , 0, 20035 CP1_ }, /* POOL32F_5~*(5) */ 20036 { reserved_block , 0 , 0 , 32, 20037 0xfc00003f, 0xa0000035, 0 , 0, 20038 CP1_ }, /* POOL32F_5~*(6) */ 20039 { reserved_block , 0 , 0 , 32, 20040 0xfc00003f, 0xa000003d, 0 , 0, 20041 CP1_ }, /* POOL32F_5~*(7) */ 20042 }; 20043 20044 20045 static const Pool POOL32F[8] = { 20046 { pool , POOL32F_0 , 64 , 32, 20047 0xfc000007, 0xa0000000, 0 , 0, 20048 CP1_ }, /* POOL32F_0 */ 20049 { reserved_block , 0 , 0 , 32, 20050 0xfc000007, 0xa0000001, 0 , 0, 20051 CP1_ }, /* POOL32F~*(1) */ 20052 { reserved_block , 0 , 0 , 32, 20053 0xfc000007, 0xa0000002, 0 , 0, 20054 CP1_ }, /* POOL32F~*(2) */ 20055 { pool , POOL32F_3 , 8 , 32, 20056 0xfc000007, 0xa0000003, 0 , 0, 20057 CP1_ }, /* POOL32F_3 */ 20058 { reserved_block , 0 , 0 , 32, 20059 0xfc000007, 0xa0000004, 0 , 0, 20060 CP1_ }, /* POOL32F~*(4) */ 20061 { pool , POOL32F_5 , 8 , 32, 20062 0xfc000007, 0xa0000005, 0 , 0, 20063 CP1_ }, /* POOL32F_5 */ 20064 { reserved_block , 0 , 0 , 32, 20065 0xfc000007, 0xa0000006, 0 , 0, 20066 CP1_ }, /* POOL32F~*(6) */ 20067 { reserved_block , 0 , 0 , 32, 20068 0xfc000007, 0xa0000007, 0 , 0, 20069 CP1_ }, /* POOL32F~*(7) */ 20070 }; 20071 20072 20073 static const Pool POOL32S_0[64] = { 20074 { reserved_block , 0 , 0 , 32, 20075 0xfc0001ff, 0xc0000000, 0 , 0, 20076 0x0 }, /* POOL32S_0~*(0) */ 20077 { instruction , 0 , 0 , 32, 20078 0xfc0001ff, 0xc0000008, &DLSA , 0, 20079 MIPS64_ }, /* DLSA */ 20080 { instruction , 0 , 0 , 32, 20081 0xfc0001ff, 0xc0000010, &DSLLV , 0, 20082 MIPS64_ }, /* DSLLV */ 20083 { instruction , 0 , 0 , 32, 20084 0xfc0001ff, 0xc0000018, &DMUL , 0, 20085 MIPS64_ }, /* DMUL */ 20086 { reserved_block , 0 , 0 , 32, 20087 0xfc0001ff, 0xc0000020, 0 , 0, 20088 0x0 }, /* POOL32S_0~*(4) */ 20089 { reserved_block , 0 , 0 , 32, 20090 0xfc0001ff, 0xc0000028, 0 , 0, 20091 0x0 }, /* POOL32S_0~*(5) */ 20092 { reserved_block , 0 , 0 , 32, 20093 0xfc0001ff, 0xc0000030, 0 , 0, 20094 0x0 }, /* POOL32S_0~*(6) */ 20095 { reserved_block , 0 , 0 , 32, 20096 0xfc0001ff, 0xc0000038, 0 , 0, 20097 0x0 }, /* POOL32S_0~*(7) */ 20098 { reserved_block , 0 , 0 , 32, 20099 0xfc0001ff, 0xc0000040, 0 , 0, 20100 0x0 }, /* POOL32S_0~*(8) */ 20101 { reserved_block , 0 , 0 , 32, 20102 0xfc0001ff, 0xc0000048, 0 , 0, 20103 0x0 }, /* POOL32S_0~*(9) */ 20104 { instruction , 0 , 0 , 32, 20105 0xfc0001ff, 0xc0000050, &DSRLV , 0, 20106 MIPS64_ }, /* DSRLV */ 20107 { instruction , 0 , 0 , 32, 20108 0xfc0001ff, 0xc0000058, &DMUH , 0, 20109 MIPS64_ }, /* DMUH */ 20110 { reserved_block , 0 , 0 , 32, 20111 0xfc0001ff, 0xc0000060, 0 , 0, 20112 0x0 }, /* POOL32S_0~*(12) */ 20113 { reserved_block , 0 , 0 , 32, 20114 0xfc0001ff, 0xc0000068, 0 , 0, 20115 0x0 }, /* POOL32S_0~*(13) */ 20116 { reserved_block , 0 , 0 , 32, 20117 0xfc0001ff, 0xc0000070, 0 , 0, 20118 0x0 }, /* POOL32S_0~*(14) */ 20119 { reserved_block , 0 , 0 , 32, 20120 0xfc0001ff, 0xc0000078, 0 , 0, 20121 0x0 }, /* POOL32S_0~*(15) */ 20122 { reserved_block , 0 , 0 , 32, 20123 0xfc0001ff, 0xc0000080, 0 , 0, 20124 0x0 }, /* POOL32S_0~*(16) */ 20125 { reserved_block , 0 , 0 , 32, 20126 0xfc0001ff, 0xc0000088, 0 , 0, 20127 0x0 }, /* POOL32S_0~*(17) */ 20128 { instruction , 0 , 0 , 32, 20129 0xfc0001ff, 0xc0000090, &DSRAV , 0, 20130 MIPS64_ }, /* DSRAV */ 20131 { instruction , 0 , 0 , 32, 20132 0xfc0001ff, 0xc0000098, &DMULU , 0, 20133 MIPS64_ }, /* DMULU */ 20134 { reserved_block , 0 , 0 , 32, 20135 0xfc0001ff, 0xc00000a0, 0 , 0, 20136 0x0 }, /* POOL32S_0~*(20) */ 20137 { reserved_block , 0 , 0 , 32, 20138 0xfc0001ff, 0xc00000a8, 0 , 0, 20139 0x0 }, /* POOL32S_0~*(21) */ 20140 { reserved_block , 0 , 0 , 32, 20141 0xfc0001ff, 0xc00000b0, 0 , 0, 20142 0x0 }, /* POOL32S_0~*(22) */ 20143 { reserved_block , 0 , 0 , 32, 20144 0xfc0001ff, 0xc00000b8, 0 , 0, 20145 0x0 }, /* POOL32S_0~*(23) */ 20146 { reserved_block , 0 , 0 , 32, 20147 0xfc0001ff, 0xc00000c0, 0 , 0, 20148 0x0 }, /* POOL32S_0~*(24) */ 20149 { reserved_block , 0 , 0 , 32, 20150 0xfc0001ff, 0xc00000c8, 0 , 0, 20151 0x0 }, /* POOL32S_0~*(25) */ 20152 { instruction , 0 , 0 , 32, 20153 0xfc0001ff, 0xc00000d0, &DROTRV , 0, 20154 MIPS64_ }, /* DROTRV */ 20155 { instruction , 0 , 0 , 32, 20156 0xfc0001ff, 0xc00000d8, &DMUHU , 0, 20157 MIPS64_ }, /* DMUHU */ 20158 { reserved_block , 0 , 0 , 32, 20159 0xfc0001ff, 0xc00000e0, 0 , 0, 20160 0x0 }, /* POOL32S_0~*(28) */ 20161 { reserved_block , 0 , 0 , 32, 20162 0xfc0001ff, 0xc00000e8, 0 , 0, 20163 0x0 }, /* POOL32S_0~*(29) */ 20164 { reserved_block , 0 , 0 , 32, 20165 0xfc0001ff, 0xc00000f0, 0 , 0, 20166 0x0 }, /* POOL32S_0~*(30) */ 20167 { reserved_block , 0 , 0 , 32, 20168 0xfc0001ff, 0xc00000f8, 0 , 0, 20169 0x0 }, /* POOL32S_0~*(31) */ 20170 { reserved_block , 0 , 0 , 32, 20171 0xfc0001ff, 0xc0000100, 0 , 0, 20172 0x0 }, /* POOL32S_0~*(32) */ 20173 { reserved_block , 0 , 0 , 32, 20174 0xfc0001ff, 0xc0000108, 0 , 0, 20175 0x0 }, /* POOL32S_0~*(33) */ 20176 { instruction , 0 , 0 , 32, 20177 0xfc0001ff, 0xc0000110, &DADD , 0, 20178 MIPS64_ }, /* DADD */ 20179 { instruction , 0 , 0 , 32, 20180 0xfc0001ff, 0xc0000118, &DDIV , 0, 20181 MIPS64_ }, /* DDIV */ 20182 { reserved_block , 0 , 0 , 32, 20183 0xfc0001ff, 0xc0000120, 0 , 0, 20184 0x0 }, /* POOL32S_0~*(36) */ 20185 { reserved_block , 0 , 0 , 32, 20186 0xfc0001ff, 0xc0000128, 0 , 0, 20187 0x0 }, /* POOL32S_0~*(37) */ 20188 { reserved_block , 0 , 0 , 32, 20189 0xfc0001ff, 0xc0000130, 0 , 0, 20190 0x0 }, /* POOL32S_0~*(38) */ 20191 { reserved_block , 0 , 0 , 32, 20192 0xfc0001ff, 0xc0000138, 0 , 0, 20193 0x0 }, /* POOL32S_0~*(39) */ 20194 { reserved_block , 0 , 0 , 32, 20195 0xfc0001ff, 0xc0000140, 0 , 0, 20196 0x0 }, /* POOL32S_0~*(40) */ 20197 { reserved_block , 0 , 0 , 32, 20198 0xfc0001ff, 0xc0000148, 0 , 0, 20199 0x0 }, /* POOL32S_0~*(41) */ 20200 { instruction , 0 , 0 , 32, 20201 0xfc0001ff, 0xc0000150, &DADDU , 0, 20202 MIPS64_ }, /* DADDU */ 20203 { instruction , 0 , 0 , 32, 20204 0xfc0001ff, 0xc0000158, &DMOD , 0, 20205 MIPS64_ }, /* DMOD */ 20206 { reserved_block , 0 , 0 , 32, 20207 0xfc0001ff, 0xc0000160, 0 , 0, 20208 0x0 }, /* POOL32S_0~*(44) */ 20209 { reserved_block , 0 , 0 , 32, 20210 0xfc0001ff, 0xc0000168, 0 , 0, 20211 0x0 }, /* POOL32S_0~*(45) */ 20212 { reserved_block , 0 , 0 , 32, 20213 0xfc0001ff, 0xc0000170, 0 , 0, 20214 0x0 }, /* POOL32S_0~*(46) */ 20215 { reserved_block , 0 , 0 , 32, 20216 0xfc0001ff, 0xc0000178, 0 , 0, 20217 0x0 }, /* POOL32S_0~*(47) */ 20218 { reserved_block , 0 , 0 , 32, 20219 0xfc0001ff, 0xc0000180, 0 , 0, 20220 0x0 }, /* POOL32S_0~*(48) */ 20221 { reserved_block , 0 , 0 , 32, 20222 0xfc0001ff, 0xc0000188, 0 , 0, 20223 0x0 }, /* POOL32S_0~*(49) */ 20224 { instruction , 0 , 0 , 32, 20225 0xfc0001ff, 0xc0000190, &DSUB , 0, 20226 MIPS64_ }, /* DSUB */ 20227 { instruction , 0 , 0 , 32, 20228 0xfc0001ff, 0xc0000198, &DDIVU , 0, 20229 MIPS64_ }, /* DDIVU */ 20230 { reserved_block , 0 , 0 , 32, 20231 0xfc0001ff, 0xc00001a0, 0 , 0, 20232 0x0 }, /* POOL32S_0~*(52) */ 20233 { reserved_block , 0 , 0 , 32, 20234 0xfc0001ff, 0xc00001a8, 0 , 0, 20235 0x0 }, /* POOL32S_0~*(53) */ 20236 { reserved_block , 0 , 0 , 32, 20237 0xfc0001ff, 0xc00001b0, 0 , 0, 20238 0x0 }, /* POOL32S_0~*(54) */ 20239 { reserved_block , 0 , 0 , 32, 20240 0xfc0001ff, 0xc00001b8, 0 , 0, 20241 0x0 }, /* POOL32S_0~*(55) */ 20242 { reserved_block , 0 , 0 , 32, 20243 0xfc0001ff, 0xc00001c0, 0 , 0, 20244 0x0 }, /* POOL32S_0~*(56) */ 20245 { reserved_block , 0 , 0 , 32, 20246 0xfc0001ff, 0xc00001c8, 0 , 0, 20247 0x0 }, /* POOL32S_0~*(57) */ 20248 { instruction , 0 , 0 , 32, 20249 0xfc0001ff, 0xc00001d0, &DSUBU , 0, 20250 MIPS64_ }, /* DSUBU */ 20251 { instruction , 0 , 0 , 32, 20252 0xfc0001ff, 0xc00001d8, &DMODU , 0, 20253 MIPS64_ }, /* DMODU */ 20254 { reserved_block , 0 , 0 , 32, 20255 0xfc0001ff, 0xc00001e0, 0 , 0, 20256 0x0 }, /* POOL32S_0~*(60) */ 20257 { reserved_block , 0 , 0 , 32, 20258 0xfc0001ff, 0xc00001e8, 0 , 0, 20259 0x0 }, /* POOL32S_0~*(61) */ 20260 { reserved_block , 0 , 0 , 32, 20261 0xfc0001ff, 0xc00001f0, 0 , 0, 20262 0x0 }, /* POOL32S_0~*(62) */ 20263 { reserved_block , 0 , 0 , 32, 20264 0xfc0001ff, 0xc00001f8, 0 , 0, 20265 0x0 }, /* POOL32S_0~*(63) */ 20266 }; 20267 20268 20269 static const Pool POOL32Sxf_4[128] = { 20270 { reserved_block , 0 , 0 , 32, 20271 0xfc00ffff, 0xc000013c, 0 , 0, 20272 0x0 }, /* POOL32Sxf_4~*(0) */ 20273 { reserved_block , 0 , 0 , 32, 20274 0xfc00ffff, 0xc000033c, 0 , 0, 20275 0x0 }, /* POOL32Sxf_4~*(1) */ 20276 { reserved_block , 0 , 0 , 32, 20277 0xfc00ffff, 0xc000053c, 0 , 0, 20278 0x0 }, /* POOL32Sxf_4~*(2) */ 20279 { reserved_block , 0 , 0 , 32, 20280 0xfc00ffff, 0xc000073c, 0 , 0, 20281 0x0 }, /* POOL32Sxf_4~*(3) */ 20282 { reserved_block , 0 , 0 , 32, 20283 0xfc00ffff, 0xc000093c, 0 , 0, 20284 0x0 }, /* POOL32Sxf_4~*(4) */ 20285 { reserved_block , 0 , 0 , 32, 20286 0xfc00ffff, 0xc0000b3c, 0 , 0, 20287 0x0 }, /* POOL32Sxf_4~*(5) */ 20288 { reserved_block , 0 , 0 , 32, 20289 0xfc00ffff, 0xc0000d3c, 0 , 0, 20290 0x0 }, /* POOL32Sxf_4~*(6) */ 20291 { reserved_block , 0 , 0 , 32, 20292 0xfc00ffff, 0xc0000f3c, 0 , 0, 20293 0x0 }, /* POOL32Sxf_4~*(7) */ 20294 { reserved_block , 0 , 0 , 32, 20295 0xfc00ffff, 0xc000113c, 0 , 0, 20296 0x0 }, /* POOL32Sxf_4~*(8) */ 20297 { reserved_block , 0 , 0 , 32, 20298 0xfc00ffff, 0xc000133c, 0 , 0, 20299 0x0 }, /* POOL32Sxf_4~*(9) */ 20300 { reserved_block , 0 , 0 , 32, 20301 0xfc00ffff, 0xc000153c, 0 , 0, 20302 0x0 }, /* POOL32Sxf_4~*(10) */ 20303 { reserved_block , 0 , 0 , 32, 20304 0xfc00ffff, 0xc000173c, 0 , 0, 20305 0x0 }, /* POOL32Sxf_4~*(11) */ 20306 { reserved_block , 0 , 0 , 32, 20307 0xfc00ffff, 0xc000193c, 0 , 0, 20308 0x0 }, /* POOL32Sxf_4~*(12) */ 20309 { reserved_block , 0 , 0 , 32, 20310 0xfc00ffff, 0xc0001b3c, 0 , 0, 20311 0x0 }, /* POOL32Sxf_4~*(13) */ 20312 { reserved_block , 0 , 0 , 32, 20313 0xfc00ffff, 0xc0001d3c, 0 , 0, 20314 0x0 }, /* POOL32Sxf_4~*(14) */ 20315 { reserved_block , 0 , 0 , 32, 20316 0xfc00ffff, 0xc0001f3c, 0 , 0, 20317 0x0 }, /* POOL32Sxf_4~*(15) */ 20318 { reserved_block , 0 , 0 , 32, 20319 0xfc00ffff, 0xc000213c, 0 , 0, 20320 0x0 }, /* POOL32Sxf_4~*(16) */ 20321 { reserved_block , 0 , 0 , 32, 20322 0xfc00ffff, 0xc000233c, 0 , 0, 20323 0x0 }, /* POOL32Sxf_4~*(17) */ 20324 { reserved_block , 0 , 0 , 32, 20325 0xfc00ffff, 0xc000253c, 0 , 0, 20326 0x0 }, /* POOL32Sxf_4~*(18) */ 20327 { reserved_block , 0 , 0 , 32, 20328 0xfc00ffff, 0xc000273c, 0 , 0, 20329 0x0 }, /* POOL32Sxf_4~*(19) */ 20330 { reserved_block , 0 , 0 , 32, 20331 0xfc00ffff, 0xc000293c, 0 , 0, 20332 0x0 }, /* POOL32Sxf_4~*(20) */ 20333 { reserved_block , 0 , 0 , 32, 20334 0xfc00ffff, 0xc0002b3c, 0 , 0, 20335 0x0 }, /* POOL32Sxf_4~*(21) */ 20336 { reserved_block , 0 , 0 , 32, 20337 0xfc00ffff, 0xc0002d3c, 0 , 0, 20338 0x0 }, /* POOL32Sxf_4~*(22) */ 20339 { reserved_block , 0 , 0 , 32, 20340 0xfc00ffff, 0xc0002f3c, 0 , 0, 20341 0x0 }, /* POOL32Sxf_4~*(23) */ 20342 { reserved_block , 0 , 0 , 32, 20343 0xfc00ffff, 0xc000313c, 0 , 0, 20344 0x0 }, /* POOL32Sxf_4~*(24) */ 20345 { reserved_block , 0 , 0 , 32, 20346 0xfc00ffff, 0xc000333c, 0 , 0, 20347 0x0 }, /* POOL32Sxf_4~*(25) */ 20348 { reserved_block , 0 , 0 , 32, 20349 0xfc00ffff, 0xc000353c, 0 , 0, 20350 0x0 }, /* POOL32Sxf_4~*(26) */ 20351 { reserved_block , 0 , 0 , 32, 20352 0xfc00ffff, 0xc000373c, 0 , 0, 20353 0x0 }, /* POOL32Sxf_4~*(27) */ 20354 { reserved_block , 0 , 0 , 32, 20355 0xfc00ffff, 0xc000393c, 0 , 0, 20356 0x0 }, /* POOL32Sxf_4~*(28) */ 20357 { reserved_block , 0 , 0 , 32, 20358 0xfc00ffff, 0xc0003b3c, 0 , 0, 20359 0x0 }, /* POOL32Sxf_4~*(29) */ 20360 { reserved_block , 0 , 0 , 32, 20361 0xfc00ffff, 0xc0003d3c, 0 , 0, 20362 0x0 }, /* POOL32Sxf_4~*(30) */ 20363 { reserved_block , 0 , 0 , 32, 20364 0xfc00ffff, 0xc0003f3c, 0 , 0, 20365 0x0 }, /* POOL32Sxf_4~*(31) */ 20366 { reserved_block , 0 , 0 , 32, 20367 0xfc00ffff, 0xc000413c, 0 , 0, 20368 0x0 }, /* POOL32Sxf_4~*(32) */ 20369 { reserved_block , 0 , 0 , 32, 20370 0xfc00ffff, 0xc000433c, 0 , 0, 20371 0x0 }, /* POOL32Sxf_4~*(33) */ 20372 { reserved_block , 0 , 0 , 32, 20373 0xfc00ffff, 0xc000453c, 0 , 0, 20374 0x0 }, /* POOL32Sxf_4~*(34) */ 20375 { reserved_block , 0 , 0 , 32, 20376 0xfc00ffff, 0xc000473c, 0 , 0, 20377 0x0 }, /* POOL32Sxf_4~*(35) */ 20378 { reserved_block , 0 , 0 , 32, 20379 0xfc00ffff, 0xc000493c, 0 , 0, 20380 0x0 }, /* POOL32Sxf_4~*(36) */ 20381 { instruction , 0 , 0 , 32, 20382 0xfc00ffff, 0xc0004b3c, &DCLO , 0, 20383 MIPS64_ }, /* DCLO */ 20384 { reserved_block , 0 , 0 , 32, 20385 0xfc00ffff, 0xc0004d3c, 0 , 0, 20386 0x0 }, /* POOL32Sxf_4~*(38) */ 20387 { reserved_block , 0 , 0 , 32, 20388 0xfc00ffff, 0xc0004f3c, 0 , 0, 20389 0x0 }, /* POOL32Sxf_4~*(39) */ 20390 { reserved_block , 0 , 0 , 32, 20391 0xfc00ffff, 0xc000513c, 0 , 0, 20392 0x0 }, /* POOL32Sxf_4~*(40) */ 20393 { reserved_block , 0 , 0 , 32, 20394 0xfc00ffff, 0xc000533c, 0 , 0, 20395 0x0 }, /* POOL32Sxf_4~*(41) */ 20396 { reserved_block , 0 , 0 , 32, 20397 0xfc00ffff, 0xc000553c, 0 , 0, 20398 0x0 }, /* POOL32Sxf_4~*(42) */ 20399 { reserved_block , 0 , 0 , 32, 20400 0xfc00ffff, 0xc000573c, 0 , 0, 20401 0x0 }, /* POOL32Sxf_4~*(43) */ 20402 { reserved_block , 0 , 0 , 32, 20403 0xfc00ffff, 0xc000593c, 0 , 0, 20404 0x0 }, /* POOL32Sxf_4~*(44) */ 20405 { instruction , 0 , 0 , 32, 20406 0xfc00ffff, 0xc0005b3c, &DCLZ , 0, 20407 MIPS64_ }, /* DCLZ */ 20408 { reserved_block , 0 , 0 , 32, 20409 0xfc00ffff, 0xc0005d3c, 0 , 0, 20410 0x0 }, /* POOL32Sxf_4~*(46) */ 20411 { reserved_block , 0 , 0 , 32, 20412 0xfc00ffff, 0xc0005f3c, 0 , 0, 20413 0x0 }, /* POOL32Sxf_4~*(47) */ 20414 { reserved_block , 0 , 0 , 32, 20415 0xfc00ffff, 0xc000613c, 0 , 0, 20416 0x0 }, /* POOL32Sxf_4~*(48) */ 20417 { reserved_block , 0 , 0 , 32, 20418 0xfc00ffff, 0xc000633c, 0 , 0, 20419 0x0 }, /* POOL32Sxf_4~*(49) */ 20420 { reserved_block , 0 , 0 , 32, 20421 0xfc00ffff, 0xc000653c, 0 , 0, 20422 0x0 }, /* POOL32Sxf_4~*(50) */ 20423 { reserved_block , 0 , 0 , 32, 20424 0xfc00ffff, 0xc000673c, 0 , 0, 20425 0x0 }, /* POOL32Sxf_4~*(51) */ 20426 { reserved_block , 0 , 0 , 32, 20427 0xfc00ffff, 0xc000693c, 0 , 0, 20428 0x0 }, /* POOL32Sxf_4~*(52) */ 20429 { reserved_block , 0 , 0 , 32, 20430 0xfc00ffff, 0xc0006b3c, 0 , 0, 20431 0x0 }, /* POOL32Sxf_4~*(53) */ 20432 { reserved_block , 0 , 0 , 32, 20433 0xfc00ffff, 0xc0006d3c, 0 , 0, 20434 0x0 }, /* POOL32Sxf_4~*(54) */ 20435 { reserved_block , 0 , 0 , 32, 20436 0xfc00ffff, 0xc0006f3c, 0 , 0, 20437 0x0 }, /* POOL32Sxf_4~*(55) */ 20438 { reserved_block , 0 , 0 , 32, 20439 0xfc00ffff, 0xc000713c, 0 , 0, 20440 0x0 }, /* POOL32Sxf_4~*(56) */ 20441 { reserved_block , 0 , 0 , 32, 20442 0xfc00ffff, 0xc000733c, 0 , 0, 20443 0x0 }, /* POOL32Sxf_4~*(57) */ 20444 { reserved_block , 0 , 0 , 32, 20445 0xfc00ffff, 0xc000753c, 0 , 0, 20446 0x0 }, /* POOL32Sxf_4~*(58) */ 20447 { reserved_block , 0 , 0 , 32, 20448 0xfc00ffff, 0xc000773c, 0 , 0, 20449 0x0 }, /* POOL32Sxf_4~*(59) */ 20450 { reserved_block , 0 , 0 , 32, 20451 0xfc00ffff, 0xc000793c, 0 , 0, 20452 0x0 }, /* POOL32Sxf_4~*(60) */ 20453 { reserved_block , 0 , 0 , 32, 20454 0xfc00ffff, 0xc0007b3c, 0 , 0, 20455 0x0 }, /* POOL32Sxf_4~*(61) */ 20456 { reserved_block , 0 , 0 , 32, 20457 0xfc00ffff, 0xc0007d3c, 0 , 0, 20458 0x0 }, /* POOL32Sxf_4~*(62) */ 20459 { reserved_block , 0 , 0 , 32, 20460 0xfc00ffff, 0xc0007f3c, 0 , 0, 20461 0x0 }, /* POOL32Sxf_4~*(63) */ 20462 { reserved_block , 0 , 0 , 32, 20463 0xfc00ffff, 0xc000813c, 0 , 0, 20464 0x0 }, /* POOL32Sxf_4~*(64) */ 20465 { reserved_block , 0 , 0 , 32, 20466 0xfc00ffff, 0xc000833c, 0 , 0, 20467 0x0 }, /* POOL32Sxf_4~*(65) */ 20468 { reserved_block , 0 , 0 , 32, 20469 0xfc00ffff, 0xc000853c, 0 , 0, 20470 0x0 }, /* POOL32Sxf_4~*(66) */ 20471 { reserved_block , 0 , 0 , 32, 20472 0xfc00ffff, 0xc000873c, 0 , 0, 20473 0x0 }, /* POOL32Sxf_4~*(67) */ 20474 { reserved_block , 0 , 0 , 32, 20475 0xfc00ffff, 0xc000893c, 0 , 0, 20476 0x0 }, /* POOL32Sxf_4~*(68) */ 20477 { reserved_block , 0 , 0 , 32, 20478 0xfc00ffff, 0xc0008b3c, 0 , 0, 20479 0x0 }, /* POOL32Sxf_4~*(69) */ 20480 { reserved_block , 0 , 0 , 32, 20481 0xfc00ffff, 0xc0008d3c, 0 , 0, 20482 0x0 }, /* POOL32Sxf_4~*(70) */ 20483 { reserved_block , 0 , 0 , 32, 20484 0xfc00ffff, 0xc0008f3c, 0 , 0, 20485 0x0 }, /* POOL32Sxf_4~*(71) */ 20486 { reserved_block , 0 , 0 , 32, 20487 0xfc00ffff, 0xc000913c, 0 , 0, 20488 0x0 }, /* POOL32Sxf_4~*(72) */ 20489 { reserved_block , 0 , 0 , 32, 20490 0xfc00ffff, 0xc000933c, 0 , 0, 20491 0x0 }, /* POOL32Sxf_4~*(73) */ 20492 { reserved_block , 0 , 0 , 32, 20493 0xfc00ffff, 0xc000953c, 0 , 0, 20494 0x0 }, /* POOL32Sxf_4~*(74) */ 20495 { reserved_block , 0 , 0 , 32, 20496 0xfc00ffff, 0xc000973c, 0 , 0, 20497 0x0 }, /* POOL32Sxf_4~*(75) */ 20498 { reserved_block , 0 , 0 , 32, 20499 0xfc00ffff, 0xc000993c, 0 , 0, 20500 0x0 }, /* POOL32Sxf_4~*(76) */ 20501 { reserved_block , 0 , 0 , 32, 20502 0xfc00ffff, 0xc0009b3c, 0 , 0, 20503 0x0 }, /* POOL32Sxf_4~*(77) */ 20504 { reserved_block , 0 , 0 , 32, 20505 0xfc00ffff, 0xc0009d3c, 0 , 0, 20506 0x0 }, /* POOL32Sxf_4~*(78) */ 20507 { reserved_block , 0 , 0 , 32, 20508 0xfc00ffff, 0xc0009f3c, 0 , 0, 20509 0x0 }, /* POOL32Sxf_4~*(79) */ 20510 { reserved_block , 0 , 0 , 32, 20511 0xfc00ffff, 0xc000a13c, 0 , 0, 20512 0x0 }, /* POOL32Sxf_4~*(80) */ 20513 { reserved_block , 0 , 0 , 32, 20514 0xfc00ffff, 0xc000a33c, 0 , 0, 20515 0x0 }, /* POOL32Sxf_4~*(81) */ 20516 { reserved_block , 0 , 0 , 32, 20517 0xfc00ffff, 0xc000a53c, 0 , 0, 20518 0x0 }, /* POOL32Sxf_4~*(82) */ 20519 { reserved_block , 0 , 0 , 32, 20520 0xfc00ffff, 0xc000a73c, 0 , 0, 20521 0x0 }, /* POOL32Sxf_4~*(83) */ 20522 { reserved_block , 0 , 0 , 32, 20523 0xfc00ffff, 0xc000a93c, 0 , 0, 20524 0x0 }, /* POOL32Sxf_4~*(84) */ 20525 { reserved_block , 0 , 0 , 32, 20526 0xfc00ffff, 0xc000ab3c, 0 , 0, 20527 0x0 }, /* POOL32Sxf_4~*(85) */ 20528 { reserved_block , 0 , 0 , 32, 20529 0xfc00ffff, 0xc000ad3c, 0 , 0, 20530 0x0 }, /* POOL32Sxf_4~*(86) */ 20531 { reserved_block , 0 , 0 , 32, 20532 0xfc00ffff, 0xc000af3c, 0 , 0, 20533 0x0 }, /* POOL32Sxf_4~*(87) */ 20534 { reserved_block , 0 , 0 , 32, 20535 0xfc00ffff, 0xc000b13c, 0 , 0, 20536 0x0 }, /* POOL32Sxf_4~*(88) */ 20537 { reserved_block , 0 , 0 , 32, 20538 0xfc00ffff, 0xc000b33c, 0 , 0, 20539 0x0 }, /* POOL32Sxf_4~*(89) */ 20540 { reserved_block , 0 , 0 , 32, 20541 0xfc00ffff, 0xc000b53c, 0 , 0, 20542 0x0 }, /* POOL32Sxf_4~*(90) */ 20543 { reserved_block , 0 , 0 , 32, 20544 0xfc00ffff, 0xc000b73c, 0 , 0, 20545 0x0 }, /* POOL32Sxf_4~*(91) */ 20546 { reserved_block , 0 , 0 , 32, 20547 0xfc00ffff, 0xc000b93c, 0 , 0, 20548 0x0 }, /* POOL32Sxf_4~*(92) */ 20549 { reserved_block , 0 , 0 , 32, 20550 0xfc00ffff, 0xc000bb3c, 0 , 0, 20551 0x0 }, /* POOL32Sxf_4~*(93) */ 20552 { reserved_block , 0 , 0 , 32, 20553 0xfc00ffff, 0xc000bd3c, 0 , 0, 20554 0x0 }, /* POOL32Sxf_4~*(94) */ 20555 { reserved_block , 0 , 0 , 32, 20556 0xfc00ffff, 0xc000bf3c, 0 , 0, 20557 0x0 }, /* POOL32Sxf_4~*(95) */ 20558 { reserved_block , 0 , 0 , 32, 20559 0xfc00ffff, 0xc000c13c, 0 , 0, 20560 0x0 }, /* POOL32Sxf_4~*(96) */ 20561 { reserved_block , 0 , 0 , 32, 20562 0xfc00ffff, 0xc000c33c, 0 , 0, 20563 0x0 }, /* POOL32Sxf_4~*(97) */ 20564 { reserved_block , 0 , 0 , 32, 20565 0xfc00ffff, 0xc000c53c, 0 , 0, 20566 0x0 }, /* POOL32Sxf_4~*(98) */ 20567 { reserved_block , 0 , 0 , 32, 20568 0xfc00ffff, 0xc000c73c, 0 , 0, 20569 0x0 }, /* POOL32Sxf_4~*(99) */ 20570 { reserved_block , 0 , 0 , 32, 20571 0xfc00ffff, 0xc000c93c, 0 , 0, 20572 0x0 }, /* POOL32Sxf_4~*(100) */ 20573 { reserved_block , 0 , 0 , 32, 20574 0xfc00ffff, 0xc000cb3c, 0 , 0, 20575 0x0 }, /* POOL32Sxf_4~*(101) */ 20576 { reserved_block , 0 , 0 , 32, 20577 0xfc00ffff, 0xc000cd3c, 0 , 0, 20578 0x0 }, /* POOL32Sxf_4~*(102) */ 20579 { reserved_block , 0 , 0 , 32, 20580 0xfc00ffff, 0xc000cf3c, 0 , 0, 20581 0x0 }, /* POOL32Sxf_4~*(103) */ 20582 { reserved_block , 0 , 0 , 32, 20583 0xfc00ffff, 0xc000d13c, 0 , 0, 20584 0x0 }, /* POOL32Sxf_4~*(104) */ 20585 { reserved_block , 0 , 0 , 32, 20586 0xfc00ffff, 0xc000d33c, 0 , 0, 20587 0x0 }, /* POOL32Sxf_4~*(105) */ 20588 { reserved_block , 0 , 0 , 32, 20589 0xfc00ffff, 0xc000d53c, 0 , 0, 20590 0x0 }, /* POOL32Sxf_4~*(106) */ 20591 { reserved_block , 0 , 0 , 32, 20592 0xfc00ffff, 0xc000d73c, 0 , 0, 20593 0x0 }, /* POOL32Sxf_4~*(107) */ 20594 { reserved_block , 0 , 0 , 32, 20595 0xfc00ffff, 0xc000d93c, 0 , 0, 20596 0x0 }, /* POOL32Sxf_4~*(108) */ 20597 { reserved_block , 0 , 0 , 32, 20598 0xfc00ffff, 0xc000db3c, 0 , 0, 20599 0x0 }, /* POOL32Sxf_4~*(109) */ 20600 { reserved_block , 0 , 0 , 32, 20601 0xfc00ffff, 0xc000dd3c, 0 , 0, 20602 0x0 }, /* POOL32Sxf_4~*(110) */ 20603 { reserved_block , 0 , 0 , 32, 20604 0xfc00ffff, 0xc000df3c, 0 , 0, 20605 0x0 }, /* POOL32Sxf_4~*(111) */ 20606 { reserved_block , 0 , 0 , 32, 20607 0xfc00ffff, 0xc000e13c, 0 , 0, 20608 0x0 }, /* POOL32Sxf_4~*(112) */ 20609 { reserved_block , 0 , 0 , 32, 20610 0xfc00ffff, 0xc000e33c, 0 , 0, 20611 0x0 }, /* POOL32Sxf_4~*(113) */ 20612 { reserved_block , 0 , 0 , 32, 20613 0xfc00ffff, 0xc000e53c, 0 , 0, 20614 0x0 }, /* POOL32Sxf_4~*(114) */ 20615 { reserved_block , 0 , 0 , 32, 20616 0xfc00ffff, 0xc000e73c, 0 , 0, 20617 0x0 }, /* POOL32Sxf_4~*(115) */ 20618 { reserved_block , 0 , 0 , 32, 20619 0xfc00ffff, 0xc000e93c, 0 , 0, 20620 0x0 }, /* POOL32Sxf_4~*(116) */ 20621 { reserved_block , 0 , 0 , 32, 20622 0xfc00ffff, 0xc000eb3c, 0 , 0, 20623 0x0 }, /* POOL32Sxf_4~*(117) */ 20624 { reserved_block , 0 , 0 , 32, 20625 0xfc00ffff, 0xc000ed3c, 0 , 0, 20626 0x0 }, /* POOL32Sxf_4~*(118) */ 20627 { reserved_block , 0 , 0 , 32, 20628 0xfc00ffff, 0xc000ef3c, 0 , 0, 20629 0x0 }, /* POOL32Sxf_4~*(119) */ 20630 { reserved_block , 0 , 0 , 32, 20631 0xfc00ffff, 0xc000f13c, 0 , 0, 20632 0x0 }, /* POOL32Sxf_4~*(120) */ 20633 { reserved_block , 0 , 0 , 32, 20634 0xfc00ffff, 0xc000f33c, 0 , 0, 20635 0x0 }, /* POOL32Sxf_4~*(121) */ 20636 { reserved_block , 0 , 0 , 32, 20637 0xfc00ffff, 0xc000f53c, 0 , 0, 20638 0x0 }, /* POOL32Sxf_4~*(122) */ 20639 { reserved_block , 0 , 0 , 32, 20640 0xfc00ffff, 0xc000f73c, 0 , 0, 20641 0x0 }, /* POOL32Sxf_4~*(123) */ 20642 { reserved_block , 0 , 0 , 32, 20643 0xfc00ffff, 0xc000f93c, 0 , 0, 20644 0x0 }, /* POOL32Sxf_4~*(124) */ 20645 { reserved_block , 0 , 0 , 32, 20646 0xfc00ffff, 0xc000fb3c, 0 , 0, 20647 0x0 }, /* POOL32Sxf_4~*(125) */ 20648 { reserved_block , 0 , 0 , 32, 20649 0xfc00ffff, 0xc000fd3c, 0 , 0, 20650 0x0 }, /* POOL32Sxf_4~*(126) */ 20651 { reserved_block , 0 , 0 , 32, 20652 0xfc00ffff, 0xc000ff3c, 0 , 0, 20653 0x0 }, /* POOL32Sxf_4~*(127) */ 20654 }; 20655 20656 20657 static const Pool POOL32Sxf[8] = { 20658 { reserved_block , 0 , 0 , 32, 20659 0xfc0001ff, 0xc000003c, 0 , 0, 20660 0x0 }, /* POOL32Sxf~*(0) */ 20661 { reserved_block , 0 , 0 , 32, 20662 0xfc0001ff, 0xc000007c, 0 , 0, 20663 0x0 }, /* POOL32Sxf~*(1) */ 20664 { reserved_block , 0 , 0 , 32, 20665 0xfc0001ff, 0xc00000bc, 0 , 0, 20666 0x0 }, /* POOL32Sxf~*(2) */ 20667 { reserved_block , 0 , 0 , 32, 20668 0xfc0001ff, 0xc00000fc, 0 , 0, 20669 0x0 }, /* POOL32Sxf~*(3) */ 20670 { pool , POOL32Sxf_4 , 128 , 32, 20671 0xfc0001ff, 0xc000013c, 0 , 0, 20672 0x0 }, /* POOL32Sxf_4 */ 20673 { reserved_block , 0 , 0 , 32, 20674 0xfc0001ff, 0xc000017c, 0 , 0, 20675 0x0 }, /* POOL32Sxf~*(5) */ 20676 { reserved_block , 0 , 0 , 32, 20677 0xfc0001ff, 0xc00001bc, 0 , 0, 20678 0x0 }, /* POOL32Sxf~*(6) */ 20679 { reserved_block , 0 , 0 , 32, 20680 0xfc0001ff, 0xc00001fc, 0 , 0, 20681 0x0 }, /* POOL32Sxf~*(7) */ 20682 }; 20683 20684 20685 static const Pool POOL32S_4[8] = { 20686 { instruction , 0 , 0 , 32, 20687 0xfc00003f, 0xc0000004, &EXTD , 0, 20688 MIPS64_ }, /* EXTD */ 20689 { instruction , 0 , 0 , 32, 20690 0xfc00003f, 0xc000000c, &EXTD32 , 0, 20691 MIPS64_ }, /* EXTD32 */ 20692 { reserved_block , 0 , 0 , 32, 20693 0xfc00003f, 0xc0000014, 0 , 0, 20694 0x0 }, /* POOL32S_4~*(2) */ 20695 { reserved_block , 0 , 0 , 32, 20696 0xfc00003f, 0xc000001c, 0 , 0, 20697 0x0 }, /* POOL32S_4~*(3) */ 20698 { reserved_block , 0 , 0 , 32, 20699 0xfc00003f, 0xc0000024, 0 , 0, 20700 0x0 }, /* POOL32S_4~*(4) */ 20701 { reserved_block , 0 , 0 , 32, 20702 0xfc00003f, 0xc000002c, 0 , 0, 20703 0x0 }, /* POOL32S_4~*(5) */ 20704 { reserved_block , 0 , 0 , 32, 20705 0xfc00003f, 0xc0000034, 0 , 0, 20706 0x0 }, /* POOL32S_4~*(6) */ 20707 { pool , POOL32Sxf , 8 , 32, 20708 0xfc00003f, 0xc000003c, 0 , 0, 20709 0x0 }, /* POOL32Sxf */ 20710 }; 20711 20712 20713 static const Pool POOL32S[8] = { 20714 { pool , POOL32S_0 , 64 , 32, 20715 0xfc000007, 0xc0000000, 0 , 0, 20716 0x0 }, /* POOL32S_0 */ 20717 { reserved_block , 0 , 0 , 32, 20718 0xfc000007, 0xc0000001, 0 , 0, 20719 0x0 }, /* POOL32S~*(1) */ 20720 { reserved_block , 0 , 0 , 32, 20721 0xfc000007, 0xc0000002, 0 , 0, 20722 0x0 }, /* POOL32S~*(2) */ 20723 { reserved_block , 0 , 0 , 32, 20724 0xfc000007, 0xc0000003, 0 , 0, 20725 0x0 }, /* POOL32S~*(3) */ 20726 { pool , POOL32S_4 , 8 , 32, 20727 0xfc000007, 0xc0000004, 0 , 0, 20728 0x0 }, /* POOL32S_4 */ 20729 { reserved_block , 0 , 0 , 32, 20730 0xfc000007, 0xc0000005, 0 , 0, 20731 0x0 }, /* POOL32S~*(5) */ 20732 { reserved_block , 0 , 0 , 32, 20733 0xfc000007, 0xc0000006, 0 , 0, 20734 0x0 }, /* POOL32S~*(6) */ 20735 { reserved_block , 0 , 0 , 32, 20736 0xfc000007, 0xc0000007, 0 , 0, 20737 0x0 }, /* POOL32S~*(7) */ 20738 }; 20739 20740 20741 static const Pool P_LUI[2] = { 20742 { instruction , 0 , 0 , 32, 20743 0xfc000002, 0xe0000000, &LUI , 0, 20744 0x0 }, /* LUI */ 20745 { instruction , 0 , 0 , 32, 20746 0xfc000002, 0xe0000002, &ALUIPC , 0, 20747 0x0 }, /* ALUIPC */ 20748 }; 20749 20750 20751 static const Pool P_GP_LH[2] = { 20752 { instruction , 0 , 0 , 32, 20753 0xfc1c0001, 0x44100000, &LH_GP_ , 0, 20754 0x0 }, /* LH[GP] */ 20755 { instruction , 0 , 0 , 32, 20756 0xfc1c0001, 0x44100001, &LHU_GP_ , 0, 20757 0x0 }, /* LHU[GP] */ 20758 }; 20759 20760 20761 static const Pool P_GP_SH[2] = { 20762 { instruction , 0 , 0 , 32, 20763 0xfc1c0001, 0x44140000, &SH_GP_ , 0, 20764 0x0 }, /* SH[GP] */ 20765 { reserved_block , 0 , 0 , 32, 20766 0xfc1c0001, 0x44140001, 0 , 0, 20767 0x0 }, /* P.GP.SH~*(1) */ 20768 }; 20769 20770 20771 static const Pool P_GP_CP1[4] = { 20772 { instruction , 0 , 0 , 32, 20773 0xfc1c0003, 0x44180000, &LWC1_GP_ , 0, 20774 CP1_ }, /* LWC1[GP] */ 20775 { instruction , 0 , 0 , 32, 20776 0xfc1c0003, 0x44180001, &SWC1_GP_ , 0, 20777 CP1_ }, /* SWC1[GP] */ 20778 { instruction , 0 , 0 , 32, 20779 0xfc1c0003, 0x44180002, &LDC1_GP_ , 0, 20780 CP1_ }, /* LDC1[GP] */ 20781 { instruction , 0 , 0 , 32, 20782 0xfc1c0003, 0x44180003, &SDC1_GP_ , 0, 20783 CP1_ }, /* SDC1[GP] */ 20784 }; 20785 20786 20787 static const Pool P_GP_M64[4] = { 20788 { instruction , 0 , 0 , 32, 20789 0xfc1c0003, 0x441c0000, &LWU_GP_ , 0, 20790 MIPS64_ }, /* LWU[GP] */ 20791 { reserved_block , 0 , 0 , 32, 20792 0xfc1c0003, 0x441c0001, 0 , 0, 20793 0x0 }, /* P.GP.M64~*(1) */ 20794 { reserved_block , 0 , 0 , 32, 20795 0xfc1c0003, 0x441c0002, 0 , 0, 20796 0x0 }, /* P.GP.M64~*(2) */ 20797 { reserved_block , 0 , 0 , 32, 20798 0xfc1c0003, 0x441c0003, 0 , 0, 20799 0x0 }, /* P.GP.M64~*(3) */ 20800 }; 20801 20802 20803 static const Pool P_GP_BH[8] = { 20804 { instruction , 0 , 0 , 32, 20805 0xfc1c0000, 0x44000000, &LB_GP_ , 0, 20806 0x0 }, /* LB[GP] */ 20807 { instruction , 0 , 0 , 32, 20808 0xfc1c0000, 0x44040000, &SB_GP_ , 0, 20809 0x0 }, /* SB[GP] */ 20810 { instruction , 0 , 0 , 32, 20811 0xfc1c0000, 0x44080000, &LBU_GP_ , 0, 20812 0x0 }, /* LBU[GP] */ 20813 { instruction , 0 , 0 , 32, 20814 0xfc1c0000, 0x440c0000, &ADDIU_GP_B_ , 0, 20815 0x0 }, /* ADDIU[GP.B] */ 20816 { pool , P_GP_LH , 2 , 32, 20817 0xfc1c0000, 0x44100000, 0 , 0, 20818 0x0 }, /* P.GP.LH */ 20819 { pool , P_GP_SH , 2 , 32, 20820 0xfc1c0000, 0x44140000, 0 , 0, 20821 0x0 }, /* P.GP.SH */ 20822 { pool , P_GP_CP1 , 4 , 32, 20823 0xfc1c0000, 0x44180000, 0 , 0, 20824 0x0 }, /* P.GP.CP1 */ 20825 { pool , P_GP_M64 , 4 , 32, 20826 0xfc1c0000, 0x441c0000, 0 , 0, 20827 0x0 }, /* P.GP.M64 */ 20828 }; 20829 20830 20831 static const Pool P_LS_U12[16] = { 20832 { instruction , 0 , 0 , 32, 20833 0xfc00f000, 0x84000000, &LB_U12_ , 0, 20834 0x0 }, /* LB[U12] */ 20835 { instruction , 0 , 0 , 32, 20836 0xfc00f000, 0x84001000, &SB_U12_ , 0, 20837 0x0 }, /* SB[U12] */ 20838 { instruction , 0 , 0 , 32, 20839 0xfc00f000, 0x84002000, &LBU_U12_ , 0, 20840 0x0 }, /* LBU[U12] */ 20841 { instruction , 0 , 0 , 32, 20842 0xfc00f000, 0x84003000, &PREF_U12_ , 0, 20843 0x0 }, /* PREF[U12] */ 20844 { instruction , 0 , 0 , 32, 20845 0xfc00f000, 0x84004000, &LH_U12_ , 0, 20846 0x0 }, /* LH[U12] */ 20847 { instruction , 0 , 0 , 32, 20848 0xfc00f000, 0x84005000, &SH_U12_ , 0, 20849 0x0 }, /* SH[U12] */ 20850 { instruction , 0 , 0 , 32, 20851 0xfc00f000, 0x84006000, &LHU_U12_ , 0, 20852 0x0 }, /* LHU[U12] */ 20853 { instruction , 0 , 0 , 32, 20854 0xfc00f000, 0x84007000, &LWU_U12_ , 0, 20855 MIPS64_ }, /* LWU[U12] */ 20856 { instruction , 0 , 0 , 32, 20857 0xfc00f000, 0x84008000, &LW_U12_ , 0, 20858 0x0 }, /* LW[U12] */ 20859 { instruction , 0 , 0 , 32, 20860 0xfc00f000, 0x84009000, &SW_U12_ , 0, 20861 0x0 }, /* SW[U12] */ 20862 { instruction , 0 , 0 , 32, 20863 0xfc00f000, 0x8400a000, &LWC1_U12_ , 0, 20864 CP1_ }, /* LWC1[U12] */ 20865 { instruction , 0 , 0 , 32, 20866 0xfc00f000, 0x8400b000, &SWC1_U12_ , 0, 20867 CP1_ }, /* SWC1[U12] */ 20868 { instruction , 0 , 0 , 32, 20869 0xfc00f000, 0x8400c000, &LD_U12_ , 0, 20870 MIPS64_ }, /* LD[U12] */ 20871 { instruction , 0 , 0 , 32, 20872 0xfc00f000, 0x8400d000, &SD_U12_ , 0, 20873 MIPS64_ }, /* SD[U12] */ 20874 { instruction , 0 , 0 , 32, 20875 0xfc00f000, 0x8400e000, &LDC1_U12_ , 0, 20876 CP1_ }, /* LDC1[U12] */ 20877 { instruction , 0 , 0 , 32, 20878 0xfc00f000, 0x8400f000, &SDC1_U12_ , 0, 20879 CP1_ }, /* SDC1[U12] */ 20880 }; 20881 20882 20883 static const Pool P_PREF_S9_[2] = { 20884 { instruction , 0 , 0 , 32, 20885 0xffe07f00, 0xa7e01800, &SYNCI , 0, 20886 0x0 }, /* SYNCI */ 20887 { instruction , 0 , 0 , 32, 20888 0xfc007f00, 0xa4001800, &PREF_S9_ , &PREF_S9__cond , 20889 0x0 }, /* PREF[S9] */ 20890 }; 20891 20892 20893 static const Pool P_LS_S0[16] = { 20894 { instruction , 0 , 0 , 32, 20895 0xfc007f00, 0xa4000000, &LB_S9_ , 0, 20896 0x0 }, /* LB[S9] */ 20897 { instruction , 0 , 0 , 32, 20898 0xfc007f00, 0xa4000800, &SB_S9_ , 0, 20899 0x0 }, /* SB[S9] */ 20900 { instruction , 0 , 0 , 32, 20901 0xfc007f00, 0xa4001000, &LBU_S9_ , 0, 20902 0x0 }, /* LBU[S9] */ 20903 { pool , P_PREF_S9_ , 2 , 32, 20904 0xfc007f00, 0xa4001800, 0 , 0, 20905 0x0 }, /* P.PREF[S9] */ 20906 { instruction , 0 , 0 , 32, 20907 0xfc007f00, 0xa4002000, &LH_S9_ , 0, 20908 0x0 }, /* LH[S9] */ 20909 { instruction , 0 , 0 , 32, 20910 0xfc007f00, 0xa4002800, &SH_S9_ , 0, 20911 0x0 }, /* SH[S9] */ 20912 { instruction , 0 , 0 , 32, 20913 0xfc007f00, 0xa4003000, &LHU_S9_ , 0, 20914 0x0 }, /* LHU[S9] */ 20915 { instruction , 0 , 0 , 32, 20916 0xfc007f00, 0xa4003800, &LWU_S9_ , 0, 20917 MIPS64_ }, /* LWU[S9] */ 20918 { instruction , 0 , 0 , 32, 20919 0xfc007f00, 0xa4004000, &LW_S9_ , 0, 20920 0x0 }, /* LW[S9] */ 20921 { instruction , 0 , 0 , 32, 20922 0xfc007f00, 0xa4004800, &SW_S9_ , 0, 20923 0x0 }, /* SW[S9] */ 20924 { instruction , 0 , 0 , 32, 20925 0xfc007f00, 0xa4005000, &LWC1_S9_ , 0, 20926 CP1_ }, /* LWC1[S9] */ 20927 { instruction , 0 , 0 , 32, 20928 0xfc007f00, 0xa4005800, &SWC1_S9_ , 0, 20929 CP1_ }, /* SWC1[S9] */ 20930 { instruction , 0 , 0 , 32, 20931 0xfc007f00, 0xa4006000, &LD_S9_ , 0, 20932 MIPS64_ }, /* LD[S9] */ 20933 { instruction , 0 , 0 , 32, 20934 0xfc007f00, 0xa4006800, &SD_S9_ , 0, 20935 MIPS64_ }, /* SD[S9] */ 20936 { instruction , 0 , 0 , 32, 20937 0xfc007f00, 0xa4007000, &LDC1_S9_ , 0, 20938 CP1_ }, /* LDC1[S9] */ 20939 { instruction , 0 , 0 , 32, 20940 0xfc007f00, 0xa4007800, &SDC1_S9_ , 0, 20941 CP1_ }, /* SDC1[S9] */ 20942 }; 20943 20944 20945 static const Pool ASET_ACLR[2] = { 20946 { instruction , 0 , 0 , 32, 20947 0xfe007f00, 0xa4001100, &ASET , 0, 20948 MCU_ }, /* ASET */ 20949 { instruction , 0 , 0 , 32, 20950 0xfe007f00, 0xa6001100, &ACLR , 0, 20951 MCU_ }, /* ACLR */ 20952 }; 20953 20954 20955 static const Pool P_LL[4] = { 20956 { instruction , 0 , 0 , 32, 20957 0xfc007f03, 0xa4005100, &LL , 0, 20958 0x0 }, /* LL */ 20959 { instruction , 0 , 0 , 32, 20960 0xfc007f03, 0xa4005101, &LLWP , 0, 20961 XNP_ }, /* LLWP */ 20962 { reserved_block , 0 , 0 , 32, 20963 0xfc007f03, 0xa4005102, 0 , 0, 20964 0x0 }, /* P.LL~*(2) */ 20965 { reserved_block , 0 , 0 , 32, 20966 0xfc007f03, 0xa4005103, 0 , 0, 20967 0x0 }, /* P.LL~*(3) */ 20968 }; 20969 20970 20971 static const Pool P_SC[4] = { 20972 { instruction , 0 , 0 , 32, 20973 0xfc007f03, 0xa4005900, &SC , 0, 20974 0x0 }, /* SC */ 20975 { instruction , 0 , 0 , 32, 20976 0xfc007f03, 0xa4005901, &SCWP , 0, 20977 XNP_ }, /* SCWP */ 20978 { reserved_block , 0 , 0 , 32, 20979 0xfc007f03, 0xa4005902, 0 , 0, 20980 0x0 }, /* P.SC~*(2) */ 20981 { reserved_block , 0 , 0 , 32, 20982 0xfc007f03, 0xa4005903, 0 , 0, 20983 0x0 }, /* P.SC~*(3) */ 20984 }; 20985 20986 20987 static const Pool P_LLD[8] = { 20988 { instruction , 0 , 0 , 32, 20989 0xfc007f07, 0xa4007100, &LLD , 0, 20990 MIPS64_ }, /* LLD */ 20991 { instruction , 0 , 0 , 32, 20992 0xfc007f07, 0xa4007101, &LLDP , 0, 20993 MIPS64_ }, /* LLDP */ 20994 { reserved_block , 0 , 0 , 32, 20995 0xfc007f07, 0xa4007102, 0 , 0, 20996 0x0 }, /* P.LLD~*(2) */ 20997 { reserved_block , 0 , 0 , 32, 20998 0xfc007f07, 0xa4007103, 0 , 0, 20999 0x0 }, /* P.LLD~*(3) */ 21000 { reserved_block , 0 , 0 , 32, 21001 0xfc007f07, 0xa4007104, 0 , 0, 21002 0x0 }, /* P.LLD~*(4) */ 21003 { reserved_block , 0 , 0 , 32, 21004 0xfc007f07, 0xa4007105, 0 , 0, 21005 0x0 }, /* P.LLD~*(5) */ 21006 { reserved_block , 0 , 0 , 32, 21007 0xfc007f07, 0xa4007106, 0 , 0, 21008 0x0 }, /* P.LLD~*(6) */ 21009 { reserved_block , 0 , 0 , 32, 21010 0xfc007f07, 0xa4007107, 0 , 0, 21011 0x0 }, /* P.LLD~*(7) */ 21012 }; 21013 21014 21015 static const Pool P_SCD[8] = { 21016 { instruction , 0 , 0 , 32, 21017 0xfc007f07, 0xa4007900, &SCD , 0, 21018 MIPS64_ }, /* SCD */ 21019 { instruction , 0 , 0 , 32, 21020 0xfc007f07, 0xa4007901, &SCDP , 0, 21021 MIPS64_ }, /* SCDP */ 21022 { reserved_block , 0 , 0 , 32, 21023 0xfc007f07, 0xa4007902, 0 , 0, 21024 0x0 }, /* P.SCD~*(2) */ 21025 { reserved_block , 0 , 0 , 32, 21026 0xfc007f07, 0xa4007903, 0 , 0, 21027 0x0 }, /* P.SCD~*(3) */ 21028 { reserved_block , 0 , 0 , 32, 21029 0xfc007f07, 0xa4007904, 0 , 0, 21030 0x0 }, /* P.SCD~*(4) */ 21031 { reserved_block , 0 , 0 , 32, 21032 0xfc007f07, 0xa4007905, 0 , 0, 21033 0x0 }, /* P.SCD~*(5) */ 21034 { reserved_block , 0 , 0 , 32, 21035 0xfc007f07, 0xa4007906, 0 , 0, 21036 0x0 }, /* P.SCD~*(6) */ 21037 { reserved_block , 0 , 0 , 32, 21038 0xfc007f07, 0xa4007907, 0 , 0, 21039 0x0 }, /* P.SCD~*(7) */ 21040 }; 21041 21042 21043 static const Pool P_LS_S1[16] = { 21044 { reserved_block , 0 , 0 , 32, 21045 0xfc007f00, 0xa4000100, 0 , 0, 21046 0x0 }, /* P.LS.S1~*(0) */ 21047 { reserved_block , 0 , 0 , 32, 21048 0xfc007f00, 0xa4000900, 0 , 0, 21049 0x0 }, /* P.LS.S1~*(1) */ 21050 { pool , ASET_ACLR , 2 , 32, 21051 0xfc007f00, 0xa4001100, 0 , 0, 21052 0x0 }, /* ASET_ACLR */ 21053 { reserved_block , 0 , 0 , 32, 21054 0xfc007f00, 0xa4001900, 0 , 0, 21055 0x0 }, /* P.LS.S1~*(3) */ 21056 { instruction , 0 , 0 , 32, 21057 0xfc007f00, 0xa4002100, &UALH , 0, 21058 XMMS_ }, /* UALH */ 21059 { instruction , 0 , 0 , 32, 21060 0xfc007f00, 0xa4002900, &UASH , 0, 21061 XMMS_ }, /* UASH */ 21062 { reserved_block , 0 , 0 , 32, 21063 0xfc007f00, 0xa4003100, 0 , 0, 21064 0x0 }, /* P.LS.S1~*(6) */ 21065 { instruction , 0 , 0 , 32, 21066 0xfc007f00, 0xa4003900, &CACHE , 0, 21067 CP0_ }, /* CACHE */ 21068 { instruction , 0 , 0 , 32, 21069 0xfc007f00, 0xa4004100, &LWC2 , 0, 21070 CP2_ }, /* LWC2 */ 21071 { instruction , 0 , 0 , 32, 21072 0xfc007f00, 0xa4004900, &SWC2 , 0, 21073 CP2_ }, /* SWC2 */ 21074 { pool , P_LL , 4 , 32, 21075 0xfc007f00, 0xa4005100, 0 , 0, 21076 0x0 }, /* P.LL */ 21077 { pool , P_SC , 4 , 32, 21078 0xfc007f00, 0xa4005900, 0 , 0, 21079 0x0 }, /* P.SC */ 21080 { instruction , 0 , 0 , 32, 21081 0xfc007f00, 0xa4006100, &LDC2 , 0, 21082 CP2_ }, /* LDC2 */ 21083 { instruction , 0 , 0 , 32, 21084 0xfc007f00, 0xa4006900, &SDC2 , 0, 21085 CP2_ }, /* SDC2 */ 21086 { pool , P_LLD , 8 , 32, 21087 0xfc007f00, 0xa4007100, 0 , 0, 21088 0x0 }, /* P.LLD */ 21089 { pool , P_SCD , 8 , 32, 21090 0xfc007f00, 0xa4007900, 0 , 0, 21091 0x0 }, /* P.SCD */ 21092 }; 21093 21094 21095 static const Pool P_PREFE[2] = { 21096 { instruction , 0 , 0 , 32, 21097 0xffe07f00, 0xa7e01a00, &SYNCIE , 0, 21098 CP0_ | EVA_ }, /* SYNCIE */ 21099 { instruction , 0 , 0 , 32, 21100 0xfc007f00, 0xa4001a00, &PREFE , &PREFE_cond , 21101 CP0_ | EVA_ }, /* PREFE */ 21102 }; 21103 21104 21105 static const Pool P_LLE[4] = { 21106 { instruction , 0 , 0 , 32, 21107 0xfc007f03, 0xa4005200, &LLE , 0, 21108 CP0_ | EVA_ }, /* LLE */ 21109 { instruction , 0 , 0 , 32, 21110 0xfc007f03, 0xa4005201, &LLWPE , 0, 21111 CP0_ | EVA_ }, /* LLWPE */ 21112 { reserved_block , 0 , 0 , 32, 21113 0xfc007f03, 0xa4005202, 0 , 0, 21114 0x0 }, /* P.LLE~*(2) */ 21115 { reserved_block , 0 , 0 , 32, 21116 0xfc007f03, 0xa4005203, 0 , 0, 21117 0x0 }, /* P.LLE~*(3) */ 21118 }; 21119 21120 21121 static const Pool P_SCE[4] = { 21122 { instruction , 0 , 0 , 32, 21123 0xfc007f03, 0xa4005a00, &SCE , 0, 21124 CP0_ | EVA_ }, /* SCE */ 21125 { instruction , 0 , 0 , 32, 21126 0xfc007f03, 0xa4005a01, &SCWPE , 0, 21127 CP0_ | EVA_ }, /* SCWPE */ 21128 { reserved_block , 0 , 0 , 32, 21129 0xfc007f03, 0xa4005a02, 0 , 0, 21130 0x0 }, /* P.SCE~*(2) */ 21131 { reserved_block , 0 , 0 , 32, 21132 0xfc007f03, 0xa4005a03, 0 , 0, 21133 0x0 }, /* P.SCE~*(3) */ 21134 }; 21135 21136 21137 static const Pool P_LS_E0[16] = { 21138 { instruction , 0 , 0 , 32, 21139 0xfc007f00, 0xa4000200, &LBE , 0, 21140 CP0_ | EVA_ }, /* LBE */ 21141 { instruction , 0 , 0 , 32, 21142 0xfc007f00, 0xa4000a00, &SBE , 0, 21143 CP0_ | EVA_ }, /* SBE */ 21144 { instruction , 0 , 0 , 32, 21145 0xfc007f00, 0xa4001200, &LBUE , 0, 21146 CP0_ | EVA_ }, /* LBUE */ 21147 { pool , P_PREFE , 2 , 32, 21148 0xfc007f00, 0xa4001a00, 0 , 0, 21149 0x0 }, /* P.PREFE */ 21150 { instruction , 0 , 0 , 32, 21151 0xfc007f00, 0xa4002200, &LHE , 0, 21152 CP0_ | EVA_ }, /* LHE */ 21153 { instruction , 0 , 0 , 32, 21154 0xfc007f00, 0xa4002a00, &SHE , 0, 21155 CP0_ | EVA_ }, /* SHE */ 21156 { instruction , 0 , 0 , 32, 21157 0xfc007f00, 0xa4003200, &LHUE , 0, 21158 CP0_ | EVA_ }, /* LHUE */ 21159 { instruction , 0 , 0 , 32, 21160 0xfc007f00, 0xa4003a00, &CACHEE , 0, 21161 CP0_ | EVA_ }, /* CACHEE */ 21162 { instruction , 0 , 0 , 32, 21163 0xfc007f00, 0xa4004200, &LWE , 0, 21164 CP0_ | EVA_ }, /* LWE */ 21165 { instruction , 0 , 0 , 32, 21166 0xfc007f00, 0xa4004a00, &SWE , 0, 21167 CP0_ | EVA_ }, /* SWE */ 21168 { pool , P_LLE , 4 , 32, 21169 0xfc007f00, 0xa4005200, 0 , 0, 21170 0x0 }, /* P.LLE */ 21171 { pool , P_SCE , 4 , 32, 21172 0xfc007f00, 0xa4005a00, 0 , 0, 21173 0x0 }, /* P.SCE */ 21174 { reserved_block , 0 , 0 , 32, 21175 0xfc007f00, 0xa4006200, 0 , 0, 21176 0x0 }, /* P.LS.E0~*(12) */ 21177 { reserved_block , 0 , 0 , 32, 21178 0xfc007f00, 0xa4006a00, 0 , 0, 21179 0x0 }, /* P.LS.E0~*(13) */ 21180 { reserved_block , 0 , 0 , 32, 21181 0xfc007f00, 0xa4007200, 0 , 0, 21182 0x0 }, /* P.LS.E0~*(14) */ 21183 { reserved_block , 0 , 0 , 32, 21184 0xfc007f00, 0xa4007a00, 0 , 0, 21185 0x0 }, /* P.LS.E0~*(15) */ 21186 }; 21187 21188 21189 static const Pool P_LS_WM[2] = { 21190 { instruction , 0 , 0 , 32, 21191 0xfc000f00, 0xa4000400, &LWM , 0, 21192 XMMS_ }, /* LWM */ 21193 { instruction , 0 , 0 , 32, 21194 0xfc000f00, 0xa4000c00, &SWM , 0, 21195 XMMS_ }, /* SWM */ 21196 }; 21197 21198 21199 static const Pool P_LS_UAWM[2] = { 21200 { instruction , 0 , 0 , 32, 21201 0xfc000f00, 0xa4000500, &UALWM , 0, 21202 XMMS_ }, /* UALWM */ 21203 { instruction , 0 , 0 , 32, 21204 0xfc000f00, 0xa4000d00, &UASWM , 0, 21205 XMMS_ }, /* UASWM */ 21206 }; 21207 21208 21209 static const Pool P_LS_DM[2] = { 21210 { instruction , 0 , 0 , 32, 21211 0xfc000f00, 0xa4000600, &LDM , 0, 21212 MIPS64_ }, /* LDM */ 21213 { instruction , 0 , 0 , 32, 21214 0xfc000f00, 0xa4000e00, &SDM , 0, 21215 MIPS64_ }, /* SDM */ 21216 }; 21217 21218 21219 static const Pool P_LS_UADM[2] = { 21220 { instruction , 0 , 0 , 32, 21221 0xfc000f00, 0xa4000700, &UALDM , 0, 21222 MIPS64_ }, /* UALDM */ 21223 { instruction , 0 , 0 , 32, 21224 0xfc000f00, 0xa4000f00, &UASDM , 0, 21225 MIPS64_ }, /* UASDM */ 21226 }; 21227 21228 21229 static const Pool P_LS_S9[8] = { 21230 { pool , P_LS_S0 , 16 , 32, 21231 0xfc000700, 0xa4000000, 0 , 0, 21232 0x0 }, /* P.LS.S0 */ 21233 { pool , P_LS_S1 , 16 , 32, 21234 0xfc000700, 0xa4000100, 0 , 0, 21235 0x0 }, /* P.LS.S1 */ 21236 { pool , P_LS_E0 , 16 , 32, 21237 0xfc000700, 0xa4000200, 0 , 0, 21238 0x0 }, /* P.LS.E0 */ 21239 { reserved_block , 0 , 0 , 32, 21240 0xfc000700, 0xa4000300, 0 , 0, 21241 0x0 }, /* P.LS.S9~*(3) */ 21242 { pool , P_LS_WM , 2 , 32, 21243 0xfc000700, 0xa4000400, 0 , 0, 21244 0x0 }, /* P.LS.WM */ 21245 { pool , P_LS_UAWM , 2 , 32, 21246 0xfc000700, 0xa4000500, 0 , 0, 21247 0x0 }, /* P.LS.UAWM */ 21248 { pool , P_LS_DM , 2 , 32, 21249 0xfc000700, 0xa4000600, 0 , 0, 21250 0x0 }, /* P.LS.DM */ 21251 { pool , P_LS_UADM , 2 , 32, 21252 0xfc000700, 0xa4000700, 0 , 0, 21253 0x0 }, /* P.LS.UADM */ 21254 }; 21255 21256 21257 static const Pool P_BAL[2] = { 21258 { branch_instruction , 0 , 0 , 32, 21259 0xfe000000, 0x28000000, &BC_32_ , 0, 21260 0x0 }, /* BC[32] */ 21261 { call_instruction , 0 , 0 , 32, 21262 0xfe000000, 0x2a000000, &BALC_32_ , 0, 21263 0x0 }, /* BALC[32] */ 21264 }; 21265 21266 21267 static const Pool P_BALRSC[2] = { 21268 { branch_instruction , 0 , 0 , 32, 21269 0xffe0f000, 0x48008000, &BRSC , 0, 21270 0x0 }, /* BRSC */ 21271 { call_instruction , 0 , 0 , 32, 21272 0xfc00f000, 0x48008000, &BALRSC , &BALRSC_cond , 21273 0x0 }, /* BALRSC */ 21274 }; 21275 21276 21277 static const Pool P_J[16] = { 21278 { call_instruction , 0 , 0 , 32, 21279 0xfc00f000, 0x48000000, &JALRC_32_ , 0, 21280 0x0 }, /* JALRC[32] */ 21281 { call_instruction , 0 , 0 , 32, 21282 0xfc00f000, 0x48001000, &JALRC_HB , 0, 21283 0x0 }, /* JALRC.HB */ 21284 { reserved_block , 0 , 0 , 32, 21285 0xfc00f000, 0x48002000, 0 , 0, 21286 0x0 }, /* P.J~*(2) */ 21287 { reserved_block , 0 , 0 , 32, 21288 0xfc00f000, 0x48003000, 0 , 0, 21289 0x0 }, /* P.J~*(3) */ 21290 { reserved_block , 0 , 0 , 32, 21291 0xfc00f000, 0x48004000, 0 , 0, 21292 0x0 }, /* P.J~*(4) */ 21293 { reserved_block , 0 , 0 , 32, 21294 0xfc00f000, 0x48005000, 0 , 0, 21295 0x0 }, /* P.J~*(5) */ 21296 { reserved_block , 0 , 0 , 32, 21297 0xfc00f000, 0x48006000, 0 , 0, 21298 0x0 }, /* P.J~*(6) */ 21299 { reserved_block , 0 , 0 , 32, 21300 0xfc00f000, 0x48007000, 0 , 0, 21301 0x0 }, /* P.J~*(7) */ 21302 { pool , P_BALRSC , 2 , 32, 21303 0xfc00f000, 0x48008000, 0 , 0, 21304 0x0 }, /* P.BALRSC */ 21305 { reserved_block , 0 , 0 , 32, 21306 0xfc00f000, 0x48009000, 0 , 0, 21307 0x0 }, /* P.J~*(9) */ 21308 { reserved_block , 0 , 0 , 32, 21309 0xfc00f000, 0x4800a000, 0 , 0, 21310 0x0 }, /* P.J~*(10) */ 21311 { reserved_block , 0 , 0 , 32, 21312 0xfc00f000, 0x4800b000, 0 , 0, 21313 0x0 }, /* P.J~*(11) */ 21314 { reserved_block , 0 , 0 , 32, 21315 0xfc00f000, 0x4800c000, 0 , 0, 21316 0x0 }, /* P.J~*(12) */ 21317 { reserved_block , 0 , 0 , 32, 21318 0xfc00f000, 0x4800d000, 0 , 0, 21319 0x0 }, /* P.J~*(13) */ 21320 { reserved_block , 0 , 0 , 32, 21321 0xfc00f000, 0x4800e000, 0 , 0, 21322 0x0 }, /* P.J~*(14) */ 21323 { reserved_block , 0 , 0 , 32, 21324 0xfc00f000, 0x4800f000, 0 , 0, 21325 0x0 }, /* P.J~*(15) */ 21326 }; 21327 21328 21329 static const Pool P_BR3A[32] = { 21330 { branch_instruction , 0 , 0 , 32, 21331 0xfc1fc000, 0x88004000, &BC1EQZC , 0, 21332 CP1_ }, /* BC1EQZC */ 21333 { branch_instruction , 0 , 0 , 32, 21334 0xfc1fc000, 0x88014000, &BC1NEZC , 0, 21335 CP1_ }, /* BC1NEZC */ 21336 { branch_instruction , 0 , 0 , 32, 21337 0xfc1fc000, 0x88024000, &BC2EQZC , 0, 21338 CP2_ }, /* BC2EQZC */ 21339 { branch_instruction , 0 , 0 , 32, 21340 0xfc1fc000, 0x88034000, &BC2NEZC , 0, 21341 CP2_ }, /* BC2NEZC */ 21342 { branch_instruction , 0 , 0 , 32, 21343 0xfc1fc000, 0x88044000, &BPOSGE32C , 0, 21344 DSP_ }, /* BPOSGE32C */ 21345 { reserved_block , 0 , 0 , 32, 21346 0xfc1fc000, 0x88054000, 0 , 0, 21347 0x0 }, /* P.BR3A~*(5) */ 21348 { reserved_block , 0 , 0 , 32, 21349 0xfc1fc000, 0x88064000, 0 , 0, 21350 0x0 }, /* P.BR3A~*(6) */ 21351 { reserved_block , 0 , 0 , 32, 21352 0xfc1fc000, 0x88074000, 0 , 0, 21353 0x0 }, /* P.BR3A~*(7) */ 21354 { reserved_block , 0 , 0 , 32, 21355 0xfc1fc000, 0x88084000, 0 , 0, 21356 0x0 }, /* P.BR3A~*(8) */ 21357 { reserved_block , 0 , 0 , 32, 21358 0xfc1fc000, 0x88094000, 0 , 0, 21359 0x0 }, /* P.BR3A~*(9) */ 21360 { reserved_block , 0 , 0 , 32, 21361 0xfc1fc000, 0x880a4000, 0 , 0, 21362 0x0 }, /* P.BR3A~*(10) */ 21363 { reserved_block , 0 , 0 , 32, 21364 0xfc1fc000, 0x880b4000, 0 , 0, 21365 0x0 }, /* P.BR3A~*(11) */ 21366 { reserved_block , 0 , 0 , 32, 21367 0xfc1fc000, 0x880c4000, 0 , 0, 21368 0x0 }, /* P.BR3A~*(12) */ 21369 { reserved_block , 0 , 0 , 32, 21370 0xfc1fc000, 0x880d4000, 0 , 0, 21371 0x0 }, /* P.BR3A~*(13) */ 21372 { reserved_block , 0 , 0 , 32, 21373 0xfc1fc000, 0x880e4000, 0 , 0, 21374 0x0 }, /* P.BR3A~*(14) */ 21375 { reserved_block , 0 , 0 , 32, 21376 0xfc1fc000, 0x880f4000, 0 , 0, 21377 0x0 }, /* P.BR3A~*(15) */ 21378 { reserved_block , 0 , 0 , 32, 21379 0xfc1fc000, 0x88104000, 0 , 0, 21380 0x0 }, /* P.BR3A~*(16) */ 21381 { reserved_block , 0 , 0 , 32, 21382 0xfc1fc000, 0x88114000, 0 , 0, 21383 0x0 }, /* P.BR3A~*(17) */ 21384 { reserved_block , 0 , 0 , 32, 21385 0xfc1fc000, 0x88124000, 0 , 0, 21386 0x0 }, /* P.BR3A~*(18) */ 21387 { reserved_block , 0 , 0 , 32, 21388 0xfc1fc000, 0x88134000, 0 , 0, 21389 0x0 }, /* P.BR3A~*(19) */ 21390 { reserved_block , 0 , 0 , 32, 21391 0xfc1fc000, 0x88144000, 0 , 0, 21392 0x0 }, /* P.BR3A~*(20) */ 21393 { reserved_block , 0 , 0 , 32, 21394 0xfc1fc000, 0x88154000, 0 , 0, 21395 0x0 }, /* P.BR3A~*(21) */ 21396 { reserved_block , 0 , 0 , 32, 21397 0xfc1fc000, 0x88164000, 0 , 0, 21398 0x0 }, /* P.BR3A~*(22) */ 21399 { reserved_block , 0 , 0 , 32, 21400 0xfc1fc000, 0x88174000, 0 , 0, 21401 0x0 }, /* P.BR3A~*(23) */ 21402 { reserved_block , 0 , 0 , 32, 21403 0xfc1fc000, 0x88184000, 0 , 0, 21404 0x0 }, /* P.BR3A~*(24) */ 21405 { reserved_block , 0 , 0 , 32, 21406 0xfc1fc000, 0x88194000, 0 , 0, 21407 0x0 }, /* P.BR3A~*(25) */ 21408 { reserved_block , 0 , 0 , 32, 21409 0xfc1fc000, 0x881a4000, 0 , 0, 21410 0x0 }, /* P.BR3A~*(26) */ 21411 { reserved_block , 0 , 0 , 32, 21412 0xfc1fc000, 0x881b4000, 0 , 0, 21413 0x0 }, /* P.BR3A~*(27) */ 21414 { reserved_block , 0 , 0 , 32, 21415 0xfc1fc000, 0x881c4000, 0 , 0, 21416 0x0 }, /* P.BR3A~*(28) */ 21417 { reserved_block , 0 , 0 , 32, 21418 0xfc1fc000, 0x881d4000, 0 , 0, 21419 0x0 }, /* P.BR3A~*(29) */ 21420 { reserved_block , 0 , 0 , 32, 21421 0xfc1fc000, 0x881e4000, 0 , 0, 21422 0x0 }, /* P.BR3A~*(30) */ 21423 { reserved_block , 0 , 0 , 32, 21424 0xfc1fc000, 0x881f4000, 0 , 0, 21425 0x0 }, /* P.BR3A~*(31) */ 21426 }; 21427 21428 21429 static const Pool P_BR1[4] = { 21430 { branch_instruction , 0 , 0 , 32, 21431 0xfc00c000, 0x88000000, &BEQC_32_ , 0, 21432 0x0 }, /* BEQC[32] */ 21433 { pool , P_BR3A , 32 , 32, 21434 0xfc00c000, 0x88004000, 0 , 0, 21435 0x0 }, /* P.BR3A */ 21436 { branch_instruction , 0 , 0 , 32, 21437 0xfc00c000, 0x88008000, &BGEC , 0, 21438 0x0 }, /* BGEC */ 21439 { branch_instruction , 0 , 0 , 32, 21440 0xfc00c000, 0x8800c000, &BGEUC , 0, 21441 0x0 }, /* BGEUC */ 21442 }; 21443 21444 21445 static const Pool P_BR2[4] = { 21446 { branch_instruction , 0 , 0 , 32, 21447 0xfc00c000, 0xa8000000, &BNEC_32_ , 0, 21448 0x0 }, /* BNEC[32] */ 21449 { reserved_block , 0 , 0 , 32, 21450 0xfc00c000, 0xa8004000, 0 , 0, 21451 0x0 }, /* P.BR2~*(1) */ 21452 { branch_instruction , 0 , 0 , 32, 21453 0xfc00c000, 0xa8008000, &BLTC , 0, 21454 0x0 }, /* BLTC */ 21455 { branch_instruction , 0 , 0 , 32, 21456 0xfc00c000, 0xa800c000, &BLTUC , 0, 21457 0x0 }, /* BLTUC */ 21458 }; 21459 21460 21461 static const Pool P_BRI[8] = { 21462 { branch_instruction , 0 , 0 , 32, 21463 0xfc1c0000, 0xc8000000, &BEQIC , 0, 21464 0x0 }, /* BEQIC */ 21465 { branch_instruction , 0 , 0 , 32, 21466 0xfc1c0000, 0xc8040000, &BBEQZC , 0, 21467 XMMS_ }, /* BBEQZC */ 21468 { branch_instruction , 0 , 0 , 32, 21469 0xfc1c0000, 0xc8080000, &BGEIC , 0, 21470 0x0 }, /* BGEIC */ 21471 { branch_instruction , 0 , 0 , 32, 21472 0xfc1c0000, 0xc80c0000, &BGEIUC , 0, 21473 0x0 }, /* BGEIUC */ 21474 { branch_instruction , 0 , 0 , 32, 21475 0xfc1c0000, 0xc8100000, &BNEIC , 0, 21476 0x0 }, /* BNEIC */ 21477 { branch_instruction , 0 , 0 , 32, 21478 0xfc1c0000, 0xc8140000, &BBNEZC , 0, 21479 XMMS_ }, /* BBNEZC */ 21480 { branch_instruction , 0 , 0 , 32, 21481 0xfc1c0000, 0xc8180000, &BLTIC , 0, 21482 0x0 }, /* BLTIC */ 21483 { branch_instruction , 0 , 0 , 32, 21484 0xfc1c0000, 0xc81c0000, &BLTIUC , 0, 21485 0x0 }, /* BLTIUC */ 21486 }; 21487 21488 21489 static const Pool P32[32] = { 21490 { pool , P_ADDIU , 2 , 32, 21491 0xfc000000, 0x00000000, 0 , 0, 21492 0x0 }, /* P.ADDIU */ 21493 { pool , P32A , 8 , 32, 21494 0xfc000000, 0x20000000, 0 , 0, 21495 0x0 }, /* P32A */ 21496 { pool , P_GP_W , 4 , 32, 21497 0xfc000000, 0x40000000, 0 , 0, 21498 0x0 }, /* P.GP.W */ 21499 { pool , POOL48I , 32 , 48, 21500 0xfc0000000000ull, 0x600000000000ull, 0 , 0, 21501 0x0 }, /* POOL48I */ 21502 { pool , P_U12 , 16 , 32, 21503 0xfc000000, 0x80000000, 0 , 0, 21504 0x0 }, /* P.U12 */ 21505 { pool , POOL32F , 8 , 32, 21506 0xfc000000, 0xa0000000, 0 , 0, 21507 CP1_ }, /* POOL32F */ 21508 { pool , POOL32S , 8 , 32, 21509 0xfc000000, 0xc0000000, 0 , 0, 21510 0x0 }, /* POOL32S */ 21511 { pool , P_LUI , 2 , 32, 21512 0xfc000000, 0xe0000000, 0 , 0, 21513 0x0 }, /* P.LUI */ 21514 { instruction , 0 , 0 , 32, 21515 0xfc000000, 0x04000000, &ADDIUPC_32_ , 0, 21516 0x0 }, /* ADDIUPC[32] */ 21517 { reserved_block , 0 , 0 , 32, 21518 0xfc000000, 0x24000000, 0 , 0, 21519 0x0 }, /* P32~*(5) */ 21520 { pool , P_GP_BH , 8 , 32, 21521 0xfc000000, 0x44000000, 0 , 0, 21522 0x0 }, /* P.GP.BH */ 21523 { reserved_block , 0 , 0 , 32, 21524 0xfc000000, 0x64000000, 0 , 0, 21525 0x0 }, /* P32~*(13) */ 21526 { pool , P_LS_U12 , 16 , 32, 21527 0xfc000000, 0x84000000, 0 , 0, 21528 0x0 }, /* P.LS.U12 */ 21529 { pool , P_LS_S9 , 8 , 32, 21530 0xfc000000, 0xa4000000, 0 , 0, 21531 0x0 }, /* P.LS.S9 */ 21532 { reserved_block , 0 , 0 , 32, 21533 0xfc000000, 0xc4000000, 0 , 0, 21534 0x0 }, /* P32~*(25) */ 21535 { reserved_block , 0 , 0 , 32, 21536 0xfc000000, 0xe4000000, 0 , 0, 21537 0x0 }, /* P32~*(29) */ 21538 { call_instruction , 0 , 0 , 32, 21539 0xfc000000, 0x08000000, &MOVE_BALC , 0, 21540 XMMS_ }, /* MOVE.BALC */ 21541 { pool , P_BAL , 2 , 32, 21542 0xfc000000, 0x28000000, 0 , 0, 21543 0x0 }, /* P.BAL */ 21544 { pool , P_J , 16 , 32, 21545 0xfc000000, 0x48000000, 0 , 0, 21546 0x0 }, /* P.J */ 21547 { reserved_block , 0 , 0 , 32, 21548 0xfc000000, 0x68000000, 0 , 0, 21549 0x0 }, /* P32~*(14) */ 21550 { pool , P_BR1 , 4 , 32, 21551 0xfc000000, 0x88000000, 0 , 0, 21552 0x0 }, /* P.BR1 */ 21553 { pool , P_BR2 , 4 , 32, 21554 0xfc000000, 0xa8000000, 0 , 0, 21555 0x0 }, /* P.BR2 */ 21556 { pool , P_BRI , 8 , 32, 21557 0xfc000000, 0xc8000000, 0 , 0, 21558 0x0 }, /* P.BRI */ 21559 { reserved_block , 0 , 0 , 32, 21560 0xfc000000, 0xe8000000, 0 , 0, 21561 0x0 }, /* P32~*(30) */ 21562 { reserved_block , 0 , 0 , 32, 21563 0xfc000000, 0x0c000000, 0 , 0, 21564 0x0 }, /* P32~*(3) */ 21565 { reserved_block , 0 , 0 , 32, 21566 0xfc000000, 0x2c000000, 0 , 0, 21567 0x0 }, /* P32~*(7) */ 21568 { reserved_block , 0 , 0 , 32, 21569 0xfc000000, 0x4c000000, 0 , 0, 21570 0x0 }, /* P32~*(11) */ 21571 { reserved_block , 0 , 0 , 32, 21572 0xfc000000, 0x6c000000, 0 , 0, 21573 0x0 }, /* P32~*(15) */ 21574 { reserved_block , 0 , 0 , 32, 21575 0xfc000000, 0x8c000000, 0 , 0, 21576 0x0 }, /* P32~*(19) */ 21577 { reserved_block , 0 , 0 , 32, 21578 0xfc000000, 0xac000000, 0 , 0, 21579 0x0 }, /* P32~*(23) */ 21580 { reserved_block , 0 , 0 , 32, 21581 0xfc000000, 0xcc000000, 0 , 0, 21582 0x0 }, /* P32~*(27) */ 21583 { reserved_block , 0 , 0 , 32, 21584 0xfc000000, 0xec000000, 0 , 0, 21585 0x0 }, /* P32~*(31) */ 21586 }; 21587 21588 21589 static const Pool P16_SYSCALL[2] = { 21590 { instruction , 0 , 0 , 16, 21591 0xfffc , 0x1008 , &SYSCALL_16_ , 0, 21592 0x0 }, /* SYSCALL[16] */ 21593 { instruction , 0 , 0 , 16, 21594 0xfffc , 0x100c , &HYPCALL_16_ , 0, 21595 CP0_ | VZ_ }, /* HYPCALL[16] */ 21596 }; 21597 21598 21599 static const Pool P16_RI[4] = { 21600 { reserved_block , 0 , 0 , 16, 21601 0xfff8 , 0x1000 , 0 , 0, 21602 0x0 }, /* P16.RI~*(0) */ 21603 { pool , P16_SYSCALL , 2 , 16, 21604 0xfff8 , 0x1008 , 0 , 0, 21605 0x0 }, /* P16.SYSCALL */ 21606 { instruction , 0 , 0 , 16, 21607 0xfff8 , 0x1010 , &BREAK_16_ , 0, 21608 0x0 }, /* BREAK[16] */ 21609 { instruction , 0 , 0 , 16, 21610 0xfff8 , 0x1018 , &SDBBP_16_ , 0, 21611 EJTAG_ }, /* SDBBP[16] */ 21612 }; 21613 21614 21615 static const Pool P16_MV[2] = { 21616 { pool , P16_RI , 4 , 16, 21617 0xffe0 , 0x1000 , 0 , 0, 21618 0x0 }, /* P16.RI */ 21619 { instruction , 0 , 0 , 16, 21620 0xfc00 , 0x1000 , &MOVE , &MOVE_cond , 21621 0x0 }, /* MOVE */ 21622 }; 21623 21624 21625 static const Pool P16_SHIFT[2] = { 21626 { instruction , 0 , 0 , 16, 21627 0xfc08 , 0x3000 , &SLL_16_ , 0, 21628 0x0 }, /* SLL[16] */ 21629 { instruction , 0 , 0 , 16, 21630 0xfc08 , 0x3008 , &SRL_16_ , 0, 21631 0x0 }, /* SRL[16] */ 21632 }; 21633 21634 21635 static const Pool POOL16C_00[4] = { 21636 { instruction , 0 , 0 , 16, 21637 0xfc0f , 0x5000 , &NOT_16_ , 0, 21638 0x0 }, /* NOT[16] */ 21639 { instruction , 0 , 0 , 16, 21640 0xfc0f , 0x5004 , &XOR_16_ , 0, 21641 0x0 }, /* XOR[16] */ 21642 { instruction , 0 , 0 , 16, 21643 0xfc0f , 0x5008 , &AND_16_ , 0, 21644 0x0 }, /* AND[16] */ 21645 { instruction , 0 , 0 , 16, 21646 0xfc0f , 0x500c , &OR_16_ , 0, 21647 0x0 }, /* OR[16] */ 21648 }; 21649 21650 21651 static const Pool POOL16C_0[2] = { 21652 { pool , POOL16C_00 , 4 , 16, 21653 0xfc03 , 0x5000 , 0 , 0, 21654 0x0 }, /* POOL16C_00 */ 21655 { reserved_block , 0 , 0 , 16, 21656 0xfc03 , 0x5002 , 0 , 0, 21657 0x0 }, /* POOL16C_0~*(1) */ 21658 }; 21659 21660 21661 static const Pool P16C[2] = { 21662 { pool , POOL16C_0 , 2 , 16, 21663 0xfc01 , 0x5000 , 0 , 0, 21664 0x0 }, /* POOL16C_0 */ 21665 { instruction , 0 , 0 , 16, 21666 0xfc01 , 0x5001 , &LWXS_16_ , 0, 21667 0x0 }, /* LWXS[16] */ 21668 }; 21669 21670 21671 static const Pool P16_A1[2] = { 21672 { reserved_block , 0 , 0 , 16, 21673 0xfc40 , 0x7000 , 0 , 0, 21674 0x0 }, /* P16.A1~*(0) */ 21675 { instruction , 0 , 0 , 16, 21676 0xfc40 , 0x7040 , &ADDIU_R1_SP_ , 0, 21677 0x0 }, /* ADDIU[R1.SP] */ 21678 }; 21679 21680 21681 static const Pool P_ADDIU_RS5_[2] = { 21682 { instruction , 0 , 0 , 16, 21683 0xffe8 , 0x9008 , &NOP_16_ , 0, 21684 0x0 }, /* NOP[16] */ 21685 { instruction , 0 , 0 , 16, 21686 0xfc08 , 0x9008 , &ADDIU_RS5_ , &ADDIU_RS5__cond , 21687 0x0 }, /* ADDIU[RS5] */ 21688 }; 21689 21690 21691 static const Pool P16_A2[2] = { 21692 { instruction , 0 , 0 , 16, 21693 0xfc08 , 0x9000 , &ADDIU_R2_ , 0, 21694 0x0 }, /* ADDIU[R2] */ 21695 { pool , P_ADDIU_RS5_ , 2 , 16, 21696 0xfc08 , 0x9008 , 0 , 0, 21697 0x0 }, /* P.ADDIU[RS5] */ 21698 }; 21699 21700 21701 static const Pool P16_ADDU[2] = { 21702 { instruction , 0 , 0 , 16, 21703 0xfc01 , 0xb000 , &ADDU_16_ , 0, 21704 0x0 }, /* ADDU[16] */ 21705 { instruction , 0 , 0 , 16, 21706 0xfc01 , 0xb001 , &SUBU_16_ , 0, 21707 0x0 }, /* SUBU[16] */ 21708 }; 21709 21710 21711 static const Pool P16_JRC[2] = { 21712 { branch_instruction , 0 , 0 , 16, 21713 0xfc1f , 0xd800 , &JRC , 0, 21714 0x0 }, /* JRC */ 21715 { call_instruction , 0 , 0 , 16, 21716 0xfc1f , 0xd810 , &JALRC_16_ , 0, 21717 0x0 }, /* JALRC[16] */ 21718 }; 21719 21720 21721 static const Pool P16_BR1[2] = { 21722 { branch_instruction , 0 , 0 , 16, 21723 0xfc00 , 0xd800 , &BEQC_16_ , &BEQC_16__cond , 21724 XMMS_ }, /* BEQC[16] */ 21725 { branch_instruction , 0 , 0 , 16, 21726 0xfc00 , 0xd800 , &BNEC_16_ , &BNEC_16__cond , 21727 XMMS_ }, /* BNEC[16] */ 21728 }; 21729 21730 21731 static const Pool P16_BR[2] = { 21732 { pool , P16_JRC , 2 , 16, 21733 0xfc0f , 0xd800 , 0 , 0, 21734 0x0 }, /* P16.JRC */ 21735 { pool , P16_BR1 , 2 , 16, 21736 0xfc00 , 0xd800 , 0 , &P16_BR1_cond , 21737 0x0 }, /* P16.BR1 */ 21738 }; 21739 21740 21741 static const Pool P16_SR[2] = { 21742 { instruction , 0 , 0 , 16, 21743 0xfd00 , 0x1c00 , &SAVE_16_ , 0, 21744 0x0 }, /* SAVE[16] */ 21745 { return_instruction , 0 , 0 , 16, 21746 0xfd00 , 0x1d00 , &RESTORE_JRC_16_ , 0, 21747 0x0 }, /* RESTORE.JRC[16] */ 21748 }; 21749 21750 21751 static const Pool P16_4X4[4] = { 21752 { instruction , 0 , 0 , 16, 21753 0xfd08 , 0x3c00 , &ADDU_4X4_ , 0, 21754 XMMS_ }, /* ADDU[4X4] */ 21755 { instruction , 0 , 0 , 16, 21756 0xfd08 , 0x3c08 , &MUL_4X4_ , 0, 21757 XMMS_ }, /* MUL[4X4] */ 21758 { reserved_block , 0 , 0 , 16, 21759 0xfd08 , 0x3d00 , 0 , 0, 21760 0x0 }, /* P16.4X4~*(2) */ 21761 { reserved_block , 0 , 0 , 16, 21762 0xfd08 , 0x3d08 , 0 , 0, 21763 0x0 }, /* P16.4X4~*(3) */ 21764 }; 21765 21766 21767 static const Pool P16_LB[4] = { 21768 { instruction , 0 , 0 , 16, 21769 0xfc0c , 0x5c00 , &LB_16_ , 0, 21770 0x0 }, /* LB[16] */ 21771 { instruction , 0 , 0 , 16, 21772 0xfc0c , 0x5c04 , &SB_16_ , 0, 21773 0x0 }, /* SB[16] */ 21774 { instruction , 0 , 0 , 16, 21775 0xfc0c , 0x5c08 , &LBU_16_ , 0, 21776 0x0 }, /* LBU[16] */ 21777 { reserved_block , 0 , 0 , 16, 21778 0xfc0c , 0x5c0c , 0 , 0, 21779 0x0 }, /* P16.LB~*(3) */ 21780 }; 21781 21782 21783 static const Pool P16_LH[4] = { 21784 { instruction , 0 , 0 , 16, 21785 0xfc09 , 0x7c00 , &LH_16_ , 0, 21786 0x0 }, /* LH[16] */ 21787 { instruction , 0 , 0 , 16, 21788 0xfc09 , 0x7c01 , &SH_16_ , 0, 21789 0x0 }, /* SH[16] */ 21790 { instruction , 0 , 0 , 16, 21791 0xfc09 , 0x7c08 , &LHU_16_ , 0, 21792 0x0 }, /* LHU[16] */ 21793 { reserved_block , 0 , 0 , 16, 21794 0xfc09 , 0x7c09 , 0 , 0, 21795 0x0 }, /* P16.LH~*(3) */ 21796 }; 21797 21798 21799 static const Pool P16[32] = { 21800 { pool , P16_MV , 2 , 16, 21801 0xfc00 , 0x1000 , 0 , 0, 21802 0x0 }, /* P16.MV */ 21803 { pool , P16_SHIFT , 2 , 16, 21804 0xfc00 , 0x3000 , 0 , 0, 21805 0x0 }, /* P16.SHIFT */ 21806 { pool , P16C , 2 , 16, 21807 0xfc00 , 0x5000 , 0 , 0, 21808 0x0 }, /* P16C */ 21809 { pool , P16_A1 , 2 , 16, 21810 0xfc00 , 0x7000 , 0 , 0, 21811 0x0 }, /* P16.A1 */ 21812 { pool , P16_A2 , 2 , 16, 21813 0xfc00 , 0x9000 , 0 , 0, 21814 0x0 }, /* P16.A2 */ 21815 { pool , P16_ADDU , 2 , 16, 21816 0xfc00 , 0xb000 , 0 , 0, 21817 0x0 }, /* P16.ADDU */ 21818 { instruction , 0 , 0 , 16, 21819 0xfc00 , 0xd000 , &LI_16_ , 0, 21820 0x0 }, /* LI[16] */ 21821 { instruction , 0 , 0 , 16, 21822 0xfc00 , 0xf000 , &ANDI_16_ , 0, 21823 0x0 }, /* ANDI[16] */ 21824 { instruction , 0 , 0 , 16, 21825 0xfc00 , 0x1400 , &LW_16_ , 0, 21826 0x0 }, /* LW[16] */ 21827 { instruction , 0 , 0 , 16, 21828 0xfc00 , 0x3400 , &LW_SP_ , 0, 21829 0x0 }, /* LW[SP] */ 21830 { instruction , 0 , 0 , 16, 21831 0xfc00 , 0x5400 , &LW_GP16_ , 0, 21832 0x0 }, /* LW[GP16] */ 21833 { instruction , 0 , 0 , 16, 21834 0xfc00 , 0x7400 , &LW_4X4_ , 0, 21835 XMMS_ }, /* LW[4X4] */ 21836 { instruction , 0 , 0 , 16, 21837 0xfc00 , 0x9400 , &SW_16_ , 0, 21838 0x0 }, /* SW[16] */ 21839 { instruction , 0 , 0 , 16, 21840 0xfc00 , 0xb400 , &SW_SP_ , 0, 21841 0x0 }, /* SW[SP] */ 21842 { instruction , 0 , 0 , 16, 21843 0xfc00 , 0xd400 , &SW_GP16_ , 0, 21844 0x0 }, /* SW[GP16] */ 21845 { instruction , 0 , 0 , 16, 21846 0xfc00 , 0xf400 , &SW_4X4_ , 0, 21847 XMMS_ }, /* SW[4X4] */ 21848 { branch_instruction , 0 , 0 , 16, 21849 0xfc00 , 0x1800 , &BC_16_ , 0, 21850 0x0 }, /* BC[16] */ 21851 { call_instruction , 0 , 0 , 16, 21852 0xfc00 , 0x3800 , &BALC_16_ , 0, 21853 0x0 }, /* BALC[16] */ 21854 { reserved_block , 0 , 0 , 16, 21855 0xfc00 , 0x5800 , 0 , 0, 21856 0x0 }, /* P16~*(10) */ 21857 { reserved_block , 0 , 0 , 16, 21858 0xfc00 , 0x7800 , 0 , 0, 21859 0x0 }, /* P16~*(14) */ 21860 { branch_instruction , 0 , 0 , 16, 21861 0xfc00 , 0x9800 , &BEQZC_16_ , 0, 21862 0x0 }, /* BEQZC[16] */ 21863 { branch_instruction , 0 , 0 , 16, 21864 0xfc00 , 0xb800 , &BNEZC_16_ , 0, 21865 0x0 }, /* BNEZC[16] */ 21866 { pool , P16_BR , 2 , 16, 21867 0xfc00 , 0xd800 , 0 , 0, 21868 0x0 }, /* P16.BR */ 21869 { reserved_block , 0 , 0 , 16, 21870 0xfc00 , 0xf800 , 0 , 0, 21871 0x0 }, /* P16~*(30) */ 21872 { pool , P16_SR , 2 , 16, 21873 0xfc00 , 0x1c00 , 0 , 0, 21874 0x0 }, /* P16.SR */ 21875 { pool , P16_4X4 , 4 , 16, 21876 0xfc00 , 0x3c00 , 0 , 0, 21877 0x0 }, /* P16.4X4 */ 21878 { pool , P16_LB , 4 , 16, 21879 0xfc00 , 0x5c00 , 0 , 0, 21880 0x0 }, /* P16.LB */ 21881 { pool , P16_LH , 4 , 16, 21882 0xfc00 , 0x7c00 , 0 , 0, 21883 0x0 }, /* P16.LH */ 21884 { reserved_block , 0 , 0 , 16, 21885 0xfc00 , 0x9c00 , 0 , 0, 21886 0x0 }, /* P16~*(19) */ 21887 { instruction , 0 , 0 , 16, 21888 0xfc00 , 0xbc00 , &MOVEP , 0, 21889 XMMS_ }, /* MOVEP */ 21890 { reserved_block , 0 , 0 , 16, 21891 0xfc00 , 0xdc00 , 0 , 0, 21892 0x0 }, /* P16~*(27) */ 21893 { instruction , 0 , 0 , 16, 21894 0xfc00 , 0xfc00 , &MOVEP_REV_ , 0, 21895 XMMS_ }, /* MOVEP[REV] */ 21896 }; 21897 21898 21899 static const Pool MAJOR[2] = { 21900 { pool , P32 , 32 , 32, 21901 0x10000000, 0x00000000, 0 , 0, 21902 0x0 }, /* P32 */ 21903 { pool , P16 , 32 , 16, 21904 0x1000 , 0x1000 , 0 , 0, 21905 0x0 }, /* P16 */ 21906 }; 21907 21908 static int nanomips_dis(char **buf, 21909 Dis_info *info, 21910 unsigned short one, 21911 unsigned short two, 21912 unsigned short three) 21913 { 21914 uint16 bits[3] = {one, two, three}; 21915 21916 TABLE_ENTRY_TYPE type; 21917 int size = Disassemble(bits, buf, &type, MAJOR, 2, info); 21918 return size; 21919 } 21920 21921 int print_insn_nanomips(bfd_vma memaddr, struct disassemble_info *info) 21922 { 21923 int status; 21924 bfd_byte buffer[2]; 21925 uint16_t insn1 = 0, insn2 = 0, insn3 = 0; 21926 g_autofree char *buf = NULL; 21927 21928 info->bytes_per_chunk = 2; 21929 info->display_endian = info->endian; 21930 info->insn_info_valid = 1; 21931 info->branch_delay_insns = 0; 21932 info->data_size = 0; 21933 info->insn_type = dis_nonbranch; 21934 info->target = 0; 21935 info->target2 = 0; 21936 21937 Dis_info disassm_info; 21938 disassm_info.m_pc = memaddr; 21939 disassm_info.fprintf_func = info->fprintf_func; 21940 disassm_info.stream = info->stream; 21941 21942 status = (*info->read_memory_func)(memaddr, buffer, 2, info); 21943 if (status != 0) { 21944 (*info->memory_error_func)(status, memaddr, info); 21945 return -1; 21946 } 21947 21948 if (info->endian == BFD_ENDIAN_BIG) { 21949 insn1 = bfd_getb16(buffer); 21950 } else { 21951 insn1 = bfd_getl16(buffer); 21952 } 21953 (*info->fprintf_func)(info->stream, "%04x ", insn1); 21954 21955 /* Handle 32-bit opcodes. */ 21956 if ((insn1 & 0x1000) == 0) { 21957 status = (*info->read_memory_func)(memaddr + 2, buffer, 2, info); 21958 if (status != 0) { 21959 (*info->memory_error_func)(status, memaddr + 2, info); 21960 return -1; 21961 } 21962 21963 if (info->endian == BFD_ENDIAN_BIG) { 21964 insn2 = bfd_getb16(buffer); 21965 } else { 21966 insn2 = bfd_getl16(buffer); 21967 } 21968 (*info->fprintf_func)(info->stream, "%04x ", insn2); 21969 } else { 21970 (*info->fprintf_func)(info->stream, " "); 21971 } 21972 /* Handle 48-bit opcodes. */ 21973 if ((insn1 >> 10) == 0x18) { 21974 status = (*info->read_memory_func)(memaddr + 4, buffer, 2, info); 21975 if (status != 0) { 21976 (*info->memory_error_func)(status, memaddr + 4, info); 21977 return -1; 21978 } 21979 21980 if (info->endian == BFD_ENDIAN_BIG) { 21981 insn3 = bfd_getb16(buffer); 21982 } else { 21983 insn3 = bfd_getl16(buffer); 21984 } 21985 (*info->fprintf_func)(info->stream, "%04x ", insn3); 21986 } else { 21987 (*info->fprintf_func)(info->stream, " "); 21988 } 21989 21990 /* Handle runtime errors. */ 21991 if (sigsetjmp(disassm_info.buf, 0) != 0) { 21992 info->insn_type = dis_noninsn; 21993 return insn3 ? 6 : insn2 ? 4 : 2; 21994 } 21995 21996 int length = nanomips_dis(&buf, &disassm_info, insn1, insn2, insn3); 21997 21998 /* FIXME: Should probably use a hash table on the major opcode here. */ 21999 22000 (*info->fprintf_func) (info->stream, "%s", buf); 22001 if (length > 0) { 22002 return length / 8; 22003 } 22004 22005 info->insn_type = dis_noninsn; 22006 22007 return insn3 ? 6 : insn2 ? 4 : 2; 22008 } 22009