xref: /openbmc/qemu/disas/nanomips.c (revision ef929281f1ddb1ce74f5fe39377a88e6cc8237aa)
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  typedef int64_t int64;
34  typedef uint64_t uint64;
35  typedef uint32_t uint32;
36  typedef uint16_t uint16;
37  typedef uint64_t img_address;
38  
39  typedef struct Dis_info {
40    img_address m_pc;
41    fprintf_function fprintf_func;
42    FILE *stream;
43    sigjmp_buf buf;
44  } Dis_info;
45  
46  #define IMGASSERTONCE(test)
47  
48  
49  static char * G_GNUC_PRINTF(1, 2) img_format(const char *format, ...)
50  {
51      char *buffer;
52      va_list args;
53      va_start(args, format);
54      buffer = g_strdup_vprintf(format, args);
55      va_end(args);
56      return buffer;
57  }
58  
59  
60  static char *to_string(img_address a)
61  {
62      return g_strdup_printf("0x%" PRIx64, a);
63  }
64  
65  
66  static uint64 extract_bits(uint64 data, uint32 bit_offset, uint32 bit_size)
67  {
68      return (data << (64 - (bit_size + bit_offset))) >> (64 - bit_size);
69  }
70  
71  
72  static int64 sign_extend(int64 data, int msb)
73  {
74      uint64 shift = 63 - msb;
75      return (data << shift) >> shift;
76  }
77  
78  
79  static uint64 renumber_registers(uint64 index, uint64 *register_list,
80                                 size_t register_list_size, Dis_info *info)
81  {
82      if (index < register_list_size) {
83          return register_list[index];
84      }
85  
86      info->fprintf_func(info->stream, "Invalid register mapping index %" PRIu64
87                         ", size of list = %zu", index, register_list_size);
88      siglongjmp(info->buf, 1);
89  }
90  
91  
92  /*
93   * decode_gpr_gpr4() - decoder for 'gpr4' gpr encoding type
94   *
95   *   Map a 4-bit code to the 5-bit register space according to this pattern:
96   *
97   *                              1                   0
98   *                    5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
99   *                    | | | | | | | | | | | | | | | |
100   *                    | | | | | | | | | | | | | | | |
101   *                    | | | | | | | | | | | └---------------┐
102   *                    | | | | | | | | | | └---------------┐ |
103   *                    | | | | | | | | | └---------------┐ | |
104   *                    | | | | | | | | └---------------┐ | | |
105   *                    | | | | | | | |         | | | | | | | |
106   *                    | | | | | | | |         | | | | | | | |
107   *    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
108   *      3                   2                   1                   0
109   *
110   *   Used in handling following instructions:
111   *
112   *     - ADDU[4X4]
113   *     - LW[4X4]
114   *     - MOVEP[REV]
115   *     - MUL[4X4]
116   *     - SW[4X4]
117   */
118  static uint64 decode_gpr_gpr4(uint64 d, Dis_info *info)
119  {
120      static uint64 register_list[] = {  8,  9, 10, 11,  4,  5,  6,  7,
121                                        16, 17, 18, 19, 20, 21, 22, 23 };
122      return renumber_registers(d, register_list,
123                 sizeof(register_list) / sizeof(register_list[0]), info);
124  }
125  
126  
127  /*
128   * decode_gpr_gpr4_zero() - decoder for 'gpr4.zero' gpr encoding type
129   *
130   *   Map a 4-bit code to the 5-bit register space according to this pattern:
131   *
132   *                              1                   0
133   *                    5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
134   *                    | | | | | | | | | | | | | | | |
135   *                    | | | | | | | | | | | | └---------------------┐
136   *                    | | | | | | | | | | | └---------------┐       |
137   *                    | | | | | | | | | | └---------------┐ |       |
138   *                    | | | | | | | | | └---------------┐ | |       |
139   *                    | | | | | | | | └---------------┐ | | |       |
140   *                    | | | | | | | |           | | | | | | |       |
141   *                    | | | | | | | |           | | | | | | |       |
142   *    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
143   *      3                   2                   1                   0
144   *
145   *   This pattern is the same one used for 'gpr4' gpr encoding type, except for
146   * the input value 3, that is mapped to the output value 0 instead of 11.
147   *
148   *   Used in handling following instructions:
149   *
150   *     - MOVE.BALC
151   *     - MOVEP
152   *     - SW[4X4]
153   */
154  static uint64 decode_gpr_gpr4_zero(uint64 d, Dis_info *info)
155  {
156      static uint64 register_list[] = {  8,  9, 10,  0,  4,  5,  6,  7,
157                                        16, 17, 18, 19, 20, 21, 22, 23 };
158      return renumber_registers(d, register_list,
159                 sizeof(register_list) / sizeof(register_list[0]), info);
160  }
161  
162  
163  /*
164   * decode_gpr_gpr3() - decoder for 'gpr3' gpr encoding type
165   *
166   *   Map a 3-bit code to the 5-bit register space according to this pattern:
167   *
168   *                            7 6 5 4 3 2 1 0
169   *                            | | | | | | | |
170   *                            | | | | | | | |
171   *                            | | | └-----------------------┐
172   *                            | | └-----------------------┐ |
173   *                            | └-----------------------┐ | |
174   *                            └-----------------------┐ | | |
175   *                                    | | | |         | | | |
176   *                            ┌-------┘ | | |         | | | |
177   *                            | ┌-------┘ | |         | | | |
178   *                            | | ┌-------┘ |         | | | |
179   *                            | | | ┌-------┘         | | | |
180   *                            | | | |                 | | | |
181   *    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
182   *      3                   2                   1                   0
183   *
184   *   Used in handling following instructions:
185   *
186   *     - ADDIU[R1.SP]
187   *     - ADDIU[R2]
188   *     - ADDU[16]
189   *     - AND[16]
190   *     - ANDI[16]
191   *     - BEQC[16]
192   *     - BEQZC[16]
193   *     - BNEC[16]
194   *     - BNEZC[16]
195   *     - LB[16]
196   *     - LBU[16]
197   *     - LH[16]
198   *     - LHU[16]
199   *     - LI[16]
200   *     - LW[16]
201   *     - LW[GP16]
202   *     - LWXS[16]
203   *     - NOT[16]
204   *     - OR[16]
205   *     - SB[16]
206   *     - SH[16]
207   *     - SLL[16]
208   *     - SRL[16]
209   *     - SUBU[16]
210   *     - SW[16]
211   *     - XOR[16]
212   */
213  static uint64 decode_gpr_gpr3(uint64 d, Dis_info *info)
214  {
215      static uint64 register_list[] = { 16, 17, 18, 19,  4,  5,  6,  7 };
216      return renumber_registers(d, register_list,
217                 sizeof(register_list) / sizeof(register_list[0]), info);
218  }
219  
220  
221  /*
222   * decode_gpr_gpr3_src_store() - decoder for 'gpr3.src.store' gpr encoding
223   *     type
224   *
225   *   Map a 3-bit code to the 5-bit register space according to this pattern:
226   *
227   *                            7 6 5 4 3 2 1 0
228   *                            | | | | | | | |
229   *                            | | | | | | | └-----------------------┐
230   *                            | | | └-----------------------┐       |
231   *                            | | └-----------------------┐ |       |
232   *                            | └-----------------------┐ | |       |
233   *                            └-----------------------┐ | | |       |
234   *                                    | | |           | | | |       |
235   *                            ┌-------┘ | |           | | | |       |
236   *                            | ┌-------┘ |           | | | |       |
237   *                            | | ┌-------┘           | | | |       |
238   *                            | | |                   | | | |       |
239   *                            | | |                   | | | |       |
240   *    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
241   *      3                   2                   1                   0
242   *
243   *   This pattern is the same one used for 'gpr3' gpr encoding type, except for
244   * the input value 0, that is mapped to the output value 0 instead of 16.
245   *
246   *   Used in handling following instructions:
247   *
248   *     - SB[16]
249   *     - SH[16]
250   *     - SW[16]
251   *     - SW[GP16]
252   */
253  static uint64 decode_gpr_gpr3_src_store(uint64 d, Dis_info *info)
254  {
255      static uint64 register_list[] = {  0, 17, 18, 19,  4,  5,  6,  7 };
256      return renumber_registers(d, register_list,
257                 sizeof(register_list) / sizeof(register_list[0]), info);
258  }
259  
260  
261  /*
262   * decode_gpr_gpr2_reg1() - decoder for 'gpr2.reg1' gpr encoding type
263   *
264   *   Map a 2-bit code to the 5-bit register space according to this pattern:
265   *
266   *                                3 2 1 0
267   *                                | | | |
268   *                                | | | |
269   *                                | | | └-------------------┐
270   *                                | | └-------------------┐ |
271   *                                | └-------------------┐ | |
272   *                                └-------------------┐ | | |
273   *                                                    | | | |
274   *                                                    | | | |
275   *    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
276   *      3                   2                   1                   0
277   *
278   *   Used in handling following instructions:
279   *
280   *     - MOVEP
281   *     - MOVEP[REV]
282   */
283  static uint64 decode_gpr_gpr2_reg1(uint64 d, Dis_info *info)
284  {
285      static uint64 register_list[] = {  4,  5,  6,  7 };
286      return renumber_registers(d, register_list,
287                 sizeof(register_list) / sizeof(register_list[0]), info);
288  }
289  
290  
291  /*
292   * decode_gpr_gpr2_reg2() - decoder for 'gpr2.reg2' gpr encoding type
293   *
294   *   Map a 2-bit code to the 5-bit register space according to this pattern:
295   *
296   *                                3 2 1 0
297   *                                | | | |
298   *                                | | | |
299   *                                | | | └-----------------┐
300   *                                | | └-----------------┐ |
301   *                                | └-----------------┐ | |
302   *                                └-----------------┐ | | |
303   *                                                  | | | |
304   *                                                  | | | |
305   *    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
306   *      3                   2                   1                   0
307   *
308   *   Used in handling following instructions:
309   *
310   *     - MOVEP
311   *     - MOVEP[REV]
312   */
313  static uint64 decode_gpr_gpr2_reg2(uint64 d, Dis_info *info)
314  {
315      static uint64 register_list[] = {  5,  6,  7,  8 };
316      return renumber_registers(d, register_list,
317                 sizeof(register_list) / sizeof(register_list[0]), info);
318  }
319  
320  
321  /*
322   * decode_gpr_gpr1() - decoder for 'gpr1' gpr encoding type
323   *
324   *   Map a 1-bit code to the 5-bit register space according to this pattern:
325   *
326   *                                  1 0
327   *                                  | |
328   *                                  | |
329   *                                  | └---------------------┐
330   *                                  └---------------------┐ |
331   *                                                        | |
332   *                                                        | |
333   *                                                        | |
334   *                                                        | |
335   *    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
336   *      3                   2                   1                   0
337   *
338   *   Used in handling following instruction:
339   *
340   *     - MOVE.BALC
341   */
342  static uint64 decode_gpr_gpr1(uint64 d, Dis_info *info)
343  {
344      static uint64 register_list[] = {  4,  5 };
345      return renumber_registers(d, register_list,
346                 sizeof(register_list) / sizeof(register_list[0]), info);
347  }
348  
349  
350  static int64 neg_copy(uint64 d)
351  {
352      return 0ll - d;
353  }
354  
355  
356  static uint64 encode_count3_from_count(uint64 d)
357  {
358      IMGASSERTONCE(d < 8);
359      return d == 0ull ? 8ull : d;
360  }
361  
362  
363  static uint64 encode_shift3_from_shift(uint64 d)
364  {
365      IMGASSERTONCE(d < 8);
366      return d == 0ull ? 8ull : d;
367  }
368  
369  
370  /* special value for load literal */
371  static int64 encode_eu_from_s_li16(uint64 d)
372  {
373      IMGASSERTONCE(d < 128);
374      return d == 127 ? -1 : (int64)d;
375  }
376  
377  
378  static uint64 encode_msbd_from_size(uint64 d)
379  {
380      IMGASSERTONCE(d < 32);
381      return d + 1;
382  }
383  
384  
385  static uint64 encode_eu_from_u_andi16(uint64 d)
386  {
387      IMGASSERTONCE(d < 16);
388      if (d == 12) {
389          return 0x00ffull;
390      }
391      if (d == 13) {
392          return 0xffffull;
393      }
394      return d;
395  }
396  
397  
398  /* save16 / restore16   ???? */
399  static uint64 encode_rt1_from_rt(uint64 d)
400  {
401      return d ? 31 : 30;
402  }
403  
404  
405  static const char *GPR(uint64 reg, Dis_info *info)
406  {
407      static const char *gpr_reg[32] = {
408          "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
409          "a4",   "a5",   "a6",   "a7",   "r12",  "r13",  "r14",  "r15",
410          "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
411          "r24",  "r25",  "k0",   "k1",   "gp",   "sp",   "fp",   "ra"
412      };
413  
414      if (reg < 32) {
415          return gpr_reg[reg];
416      }
417  
418      info->fprintf_func(info->stream, "Invalid GPR register index %" PRIu64,
419                         reg);
420      siglongjmp(info->buf, 1);
421  }
422  
423  
424  static char *save_restore_list(uint64 rt, uint64 count, uint64 gp,
425                                 Dis_info *info)
426  {
427      char *reg_list[34];
428      reg_list[0] = (char *)"";
429  
430      assert(count <= 32);
431      for (uint64 counter = 0; counter != count; counter++) {
432          bool use_gp = gp && (counter == count - 1);
433          uint64 this_rt = use_gp ? 28 : ((rt & 0x10) | (rt + counter)) & 0x1f;
434          /* glib usage below requires casting away const */
435          reg_list[counter + 1] = (char *)GPR(this_rt, info);
436      }
437      reg_list[count + 1] = NULL;
438  
439      return g_strjoinv(",", reg_list);
440  }
441  
442  
443  static const char *FPR(uint64 reg, Dis_info *info)
444  {
445      static const char *fpr_reg[32] = {
446          "f0",  "f1",  "f2",  "f3",  "f4",  "f5",  "f6",  "f7",
447          "f8",  "f9",  "f10", "f11", "f12", "f13", "f14", "f15",
448          "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
449          "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
450      };
451  
452      if (reg < 32) {
453          return fpr_reg[reg];
454      }
455  
456      info->fprintf_func(info->stream, "Invalid FPR register index %" PRIu64,
457                         reg);
458      siglongjmp(info->buf, 1);
459  }
460  
461  
462  static const char *AC(uint64 reg, Dis_info *info)
463  {
464      static const char *ac_reg[4] = {
465          "ac0",  "ac1",  "ac2",  "ac3"
466      };
467  
468      if (reg < 4) {
469          return ac_reg[reg];
470      }
471  
472      info->fprintf_func(info->stream, "Invalid AC register index %" PRIu64,
473                         reg);
474      siglongjmp(info->buf, 1);
475  }
476  
477  
478  static char *ADDRESS(uint64 value, int instruction_size, Dis_info *info)
479  {
480      /* token for string replace */
481      img_address address = info->m_pc + value + instruction_size;
482      /* symbol replacement */
483      return to_string(address);
484  }
485  
486  
487  static uint64 extract_op_code_value(const uint16 *data, int size)
488  {
489      switch (size) {
490      case 16:
491          return data[0];
492      case 32:
493          return ((uint64)data[0] << 16) | data[1];
494      case 48:
495          return ((uint64)data[0] << 32) | ((uint64)data[1] << 16) | data[2];
496      default:
497          return data[0];
498      }
499  }
500  
501  
502  static uint64 extract_code_18_to_0(uint64 instruction)
503  {
504      uint64 value = 0;
505      value |= extract_bits(instruction, 0, 19);
506      return value;
507  }
508  
509  
510  static uint64 extract_shift3_2_1_0(uint64 instruction)
511  {
512      uint64 value = 0;
513      value |= extract_bits(instruction, 0, 3);
514      return value;
515  }
516  
517  
518  static uint64 extract_u_11_10_9_8_7_6_5_4_3__s3(uint64 instruction)
519  {
520      uint64 value = 0;
521      value |= extract_bits(instruction, 3, 9) << 3;
522      return value;
523  }
524  
525  
526  static uint64 extract_count_3_2_1_0(uint64 instruction)
527  {
528      uint64 value = 0;
529      value |= extract_bits(instruction, 0, 4);
530      return value;
531  }
532  
533  
534  static uint64 extract_rtz3_9_8_7(uint64 instruction)
535  {
536      uint64 value = 0;
537      value |= extract_bits(instruction, 7, 3);
538      return value;
539  }
540  
541  
542  static uint64 extract_u_17_to_1__s1(uint64 instruction)
543  {
544      uint64 value = 0;
545      value |= extract_bits(instruction, 1, 17) << 1;
546      return value;
547  }
548  
549  
550  static int64 extract_s__se9_20_19_18_17_16_15_14_13_12_11(uint64 instruction)
551  {
552      int64 value = 0;
553      value |= extract_bits(instruction, 11, 10);
554      value = sign_extend(value, 9);
555      return value;
556  }
557  
558  
559  static int64 extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(uint64 instruction)
560  {
561      int64 value = 0;
562      value |= extract_bits(instruction, 0, 1) << 11;
563      value |= extract_bits(instruction, 1, 10) << 1;
564      value = sign_extend(value, 11);
565      return value;
566  }
567  
568  
569  static uint64 extract_u_10(uint64 instruction)
570  {
571      uint64 value = 0;
572      value |= extract_bits(instruction, 10, 1);
573      return value;
574  }
575  
576  
577  static uint64 extract_rtz4_27_26_25_23_22_21(uint64 instruction)
578  {
579      uint64 value = 0;
580      value |= extract_bits(instruction, 21, 3);
581      value |= extract_bits(instruction, 25, 1) << 3;
582      return value;
583  }
584  
585  
586  static uint64 extract_sa_15_14_13_12_11(uint64 instruction)
587  {
588      uint64 value = 0;
589      value |= extract_bits(instruction, 11, 5);
590      return value;
591  }
592  
593  
594  static uint64 extract_shift_4_3_2_1_0(uint64 instruction)
595  {
596      uint64 value = 0;
597      value |= extract_bits(instruction, 0, 5);
598      return value;
599  }
600  
601  
602  static uint64 extract_shiftx_10_9_8_7__s1(uint64 instruction)
603  {
604      uint64 value = 0;
605      value |= extract_bits(instruction, 7, 4) << 1;
606      return value;
607  }
608  
609  
610  static uint64 extract_hint_25_24_23_22_21(uint64 instruction)
611  {
612      uint64 value = 0;
613      value |= extract_bits(instruction, 21, 5);
614      return value;
615  }
616  
617  
618  static uint64 extract_count3_14_13_12(uint64 instruction)
619  {
620      uint64 value = 0;
621      value |= extract_bits(instruction, 12, 3);
622      return value;
623  }
624  
625  
626  static int64 extract_s__se31_0_11_to_2_20_to_12_s12(uint64 instruction)
627  {
628      int64 value = 0;
629      value |= extract_bits(instruction, 0, 1) << 31;
630      value |= extract_bits(instruction, 2, 10) << 21;
631      value |= extract_bits(instruction, 12, 9) << 12;
632      value = sign_extend(value, 31);
633      return value;
634  }
635  
636  
637  static int64 extract_s__se7_0_6_5_4_3_2_1_s1(uint64 instruction)
638  {
639      int64 value = 0;
640      value |= extract_bits(instruction, 0, 1) << 7;
641      value |= extract_bits(instruction, 1, 6) << 1;
642      value = sign_extend(value, 7);
643      return value;
644  }
645  
646  
647  static uint64 extract_u2_10_9(uint64 instruction)
648  {
649      uint64 value = 0;
650      value |= extract_bits(instruction, 9, 2);
651      return value;
652  }
653  
654  
655  static uint64 extract_code_25_24_23_22_21_20_19_18_17_16(uint64 instruction)
656  {
657      uint64 value = 0;
658      value |= extract_bits(instruction, 16, 10);
659      return value;
660  }
661  
662  
663  static uint64 extract_rs_20_19_18_17_16(uint64 instruction)
664  {
665      uint64 value = 0;
666      value |= extract_bits(instruction, 16, 5);
667      return value;
668  }
669  
670  
671  static uint64 extract_u_2_1__s1(uint64 instruction)
672  {
673      uint64 value = 0;
674      value |= extract_bits(instruction, 1, 2) << 1;
675      return value;
676  }
677  
678  
679  static uint64 extract_stripe_6(uint64 instruction)
680  {
681      uint64 value = 0;
682      value |= extract_bits(instruction, 6, 1);
683      return value;
684  }
685  
686  
687  static uint64 extract_ac_15_14(uint64 instruction)
688  {
689      uint64 value = 0;
690      value |= extract_bits(instruction, 14, 2);
691      return value;
692  }
693  
694  
695  static uint64 extract_shift_20_19_18_17_16(uint64 instruction)
696  {
697      uint64 value = 0;
698      value |= extract_bits(instruction, 16, 5);
699      return value;
700  }
701  
702  
703  static uint64 extract_rdl_25_24(uint64 instruction)
704  {
705      uint64 value = 0;
706      value |= extract_bits(instruction, 24, 1);
707      return value;
708  }
709  
710  
711  static int64 extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(uint64 instruction)
712  {
713      int64 value = 0;
714      value |= extract_bits(instruction, 0, 1) << 10;
715      value |= extract_bits(instruction, 1, 9) << 1;
716      value = sign_extend(value, 10);
717      return value;
718  }
719  
720  
721  static uint64 extract_eu_6_5_4_3_2_1_0(uint64 instruction)
722  {
723      uint64 value = 0;
724      value |= extract_bits(instruction, 0, 7);
725      return value;
726  }
727  
728  
729  static uint64 extract_shift_5_4_3_2_1_0(uint64 instruction)
730  {
731      uint64 value = 0;
732      value |= extract_bits(instruction, 0, 6);
733      return value;
734  }
735  
736  
737  static uint64 extract_count_19_18_17_16(uint64 instruction)
738  {
739      uint64 value = 0;
740      value |= extract_bits(instruction, 16, 4);
741      return value;
742  }
743  
744  
745  static uint64 extract_code_2_1_0(uint64 instruction)
746  {
747      uint64 value = 0;
748      value |= extract_bits(instruction, 0, 3);
749      return value;
750  }
751  
752  
753  static uint64 extract_u_11_10_9_8_7_6_5_4_3_2_1_0(uint64 instruction)
754  {
755      uint64 value = 0;
756      value |= extract_bits(instruction, 0, 12);
757      return value;
758  }
759  
760  
761  static uint64 extract_rs_4_3_2_1_0(uint64 instruction)
762  {
763      uint64 value = 0;
764      value |= extract_bits(instruction, 0, 5);
765      return value;
766  }
767  
768  
769  static uint64 extract_u_20_to_3__s3(uint64 instruction)
770  {
771      uint64 value = 0;
772      value |= extract_bits(instruction, 3, 18) << 3;
773      return value;
774  }
775  
776  
777  static uint64 extract_u_3_2_1_0__s2(uint64 instruction)
778  {
779      uint64 value = 0;
780      value |= extract_bits(instruction, 0, 4) << 2;
781      return value;
782  }
783  
784  
785  static uint64 extract_cofun_25_24_23(uint64 instruction)
786  {
787      uint64 value = 0;
788      value |= extract_bits(instruction, 3, 23);
789      return value;
790  }
791  
792  
793  static uint64 extract_u_2_1_0__s2(uint64 instruction)
794  {
795      uint64 value = 0;
796      value |= extract_bits(instruction, 0, 3) << 2;
797      return value;
798  }
799  
800  
801  static uint64 extract_rd3_3_2_1(uint64 instruction)
802  {
803      uint64 value = 0;
804      value |= extract_bits(instruction, 1, 3);
805      return value;
806  }
807  
808  
809  static uint64 extract_sa_15_14_13_12(uint64 instruction)
810  {
811      uint64 value = 0;
812      value |= extract_bits(instruction, 12, 4);
813      return value;
814  }
815  
816  
817  static uint64 extract_rt_25_24_23_22_21(uint64 instruction)
818  {
819      uint64 value = 0;
820      value |= extract_bits(instruction, 21, 5);
821      return value;
822  }
823  
824  
825  static uint64 extract_ru_7_6_5_4_3(uint64 instruction)
826  {
827      uint64 value = 0;
828      value |= extract_bits(instruction, 3, 5);
829      return value;
830  }
831  
832  
833  static uint64 extract_u_17_to_0(uint64 instruction)
834  {
835      uint64 value = 0;
836      value |= extract_bits(instruction, 0, 18);
837      return value;
838  }
839  
840  
841  static uint64 extract_rsz4_4_2_1_0(uint64 instruction)
842  {
843      uint64 value = 0;
844      value |= extract_bits(instruction, 0, 3);
845      value |= extract_bits(instruction, 4, 1) << 3;
846      return value;
847  }
848  
849  
850  static int64 extract_s__se21_0_20_to_1_s1(uint64 instruction)
851  {
852      int64 value = 0;
853      value |= extract_bits(instruction, 0, 1) << 21;
854      value |= extract_bits(instruction, 1, 20) << 1;
855      value = sign_extend(value, 21);
856      return value;
857  }
858  
859  
860  static uint64 extract_op_25_to_3(uint64 instruction)
861  {
862      uint64 value = 0;
863      value |= extract_bits(instruction, 3, 23);
864      return value;
865  }
866  
867  
868  static uint64 extract_rs4_4_2_1_0(uint64 instruction)
869  {
870      uint64 value = 0;
871      value |= extract_bits(instruction, 0, 3);
872      value |= extract_bits(instruction, 4, 1) << 3;
873      return value;
874  }
875  
876  
877  static uint64 extract_bit_23_22_21(uint64 instruction)
878  {
879      uint64 value = 0;
880      value |= extract_bits(instruction, 21, 3);
881      return value;
882  }
883  
884  
885  static uint64 extract_rt_41_40_39_38_37(uint64 instruction)
886  {
887      uint64 value = 0;
888      value |= extract_bits(instruction, 37, 5);
889      return value;
890  }
891  
892  
893  static int64 extract_shift__se5_21_20_19_18_17_16(uint64 instruction)
894  {
895      int64 value = 0;
896      value |= extract_bits(instruction, 16, 6);
897      value = sign_extend(value, 5);
898      return value;
899  }
900  
901  
902  static uint64 extract_rd2_3_8(uint64 instruction)
903  {
904      uint64 value = 0;
905      value |= extract_bits(instruction, 3, 1) << 1;
906      value |= extract_bits(instruction, 8, 1);
907      return value;
908  }
909  
910  
911  static uint64 extract_code_17_to_0(uint64 instruction)
912  {
913      uint64 value = 0;
914      value |= extract_bits(instruction, 0, 18);
915      return value;
916  }
917  
918  
919  static uint64 extract_size_20_19_18_17_16(uint64 instruction)
920  {
921      uint64 value = 0;
922      value |= extract_bits(instruction, 16, 5);
923      return value;
924  }
925  
926  
927  static int64 extract_s__se8_15_7_6_5_4_3_2_s2(uint64 instruction)
928  {
929      int64 value = 0;
930      value |= extract_bits(instruction, 2, 6) << 2;
931      value |= extract_bits(instruction, 15, 1) << 8;
932      value = sign_extend(value, 8);
933      return value;
934  }
935  
936  
937  static uint64 extract_u_15_to_0(uint64 instruction)
938  {
939      uint64 value = 0;
940      value |= extract_bits(instruction, 0, 16);
941      return value;
942  }
943  
944  
945  static uint64 extract_fs_20_19_18_17_16(uint64 instruction)
946  {
947      uint64 value = 0;
948      value |= extract_bits(instruction, 16, 5);
949      return value;
950  }
951  
952  
953  static int64 extract_s__se8_15_7_6_5_4_3_2_1_0(uint64 instruction)
954  {
955      int64 value = 0;
956      value |= extract_bits(instruction, 0, 8);
957      value |= extract_bits(instruction, 15, 1) << 8;
958      value = sign_extend(value, 8);
959      return value;
960  }
961  
962  
963  static uint64 extract_stype_20_19_18_17_16(uint64 instruction)
964  {
965      uint64 value = 0;
966      value |= extract_bits(instruction, 16, 5);
967      return value;
968  }
969  
970  
971  static uint64 extract_rtl_11(uint64 instruction)
972  {
973      uint64 value = 0;
974      value |= extract_bits(instruction, 9, 1);
975      return value;
976  }
977  
978  
979  static uint64 extract_hs_20_19_18_17_16(uint64 instruction)
980  {
981      uint64 value = 0;
982      value |= extract_bits(instruction, 16, 5);
983      return value;
984  }
985  
986  
987  static uint64 extract_sel_13_12_11(uint64 instruction)
988  {
989      uint64 value = 0;
990      value |= extract_bits(instruction, 11, 3);
991      return value;
992  }
993  
994  
995  static uint64 extract_lsb_4_3_2_1_0(uint64 instruction)
996  {
997      uint64 value = 0;
998      value |= extract_bits(instruction, 0, 5);
999      return value;
1000  }
1001  
1002  
1003  static uint64 extract_gp_2(uint64 instruction)
1004  {
1005      uint64 value = 0;
1006      value |= extract_bits(instruction, 2, 1);
1007      return value;
1008  }
1009  
1010  
1011  static uint64 extract_rt3_9_8_7(uint64 instruction)
1012  {
1013      uint64 value = 0;
1014      value |= extract_bits(instruction, 7, 3);
1015      return value;
1016  }
1017  
1018  
1019  static uint64 extract_ft_25_24_23_22_21(uint64 instruction)
1020  {
1021      uint64 value = 0;
1022      value |= extract_bits(instruction, 21, 5);
1023      return value;
1024  }
1025  
1026  
1027  static uint64 extract_u_17_16_15_14_13_12_11(uint64 instruction)
1028  {
1029      uint64 value = 0;
1030      value |= extract_bits(instruction, 11, 7);
1031      return value;
1032  }
1033  
1034  
1035  static uint64 extract_cs_20_19_18_17_16(uint64 instruction)
1036  {
1037      uint64 value = 0;
1038      value |= extract_bits(instruction, 16, 5);
1039      return value;
1040  }
1041  
1042  
1043  static uint64 extract_rt4_9_7_6_5(uint64 instruction)
1044  {
1045      uint64 value = 0;
1046      value |= extract_bits(instruction, 5, 3);
1047      value |= extract_bits(instruction, 9, 1) << 3;
1048      return value;
1049  }
1050  
1051  
1052  static uint64 extract_msbt_10_9_8_7_6(uint64 instruction)
1053  {
1054      uint64 value = 0;
1055      value |= extract_bits(instruction, 6, 5);
1056      return value;
1057  }
1058  
1059  
1060  static uint64 extract_u_5_4_3_2_1_0__s2(uint64 instruction)
1061  {
1062      uint64 value = 0;
1063      value |= extract_bits(instruction, 0, 6) << 2;
1064      return value;
1065  }
1066  
1067  
1068  static uint64 extract_sa_15_14_13(uint64 instruction)
1069  {
1070      uint64 value = 0;
1071      value |= extract_bits(instruction, 13, 3);
1072      return value;
1073  }
1074  
1075  
1076  static int64 extract_s__se14_0_13_to_1_s1(uint64 instruction)
1077  {
1078      int64 value = 0;
1079      value |= extract_bits(instruction, 0, 1) << 14;
1080      value |= extract_bits(instruction, 1, 13) << 1;
1081      value = sign_extend(value, 14);
1082      return value;
1083  }
1084  
1085  
1086  static uint64 extract_rs3_6_5_4(uint64 instruction)
1087  {
1088      uint64 value = 0;
1089      value |= extract_bits(instruction, 4, 3);
1090      return value;
1091  }
1092  
1093  
1094  static uint64 extract_u_31_to_0__s32(uint64 instruction)
1095  {
1096      uint64 value = 0;
1097      value |= extract_bits(instruction, 0, 32) << 32;
1098      return value;
1099  }
1100  
1101  
1102  static uint64 extract_shift_10_9_8_7_6(uint64 instruction)
1103  {
1104      uint64 value = 0;
1105      value |= extract_bits(instruction, 6, 5);
1106      return value;
1107  }
1108  
1109  
1110  static uint64 extract_cs_25_24_23_22_21(uint64 instruction)
1111  {
1112      uint64 value = 0;
1113      value |= extract_bits(instruction, 21, 5);
1114      return value;
1115  }
1116  
1117  
1118  static uint64 extract_shiftx_11_10_9_8_7_6(uint64 instruction)
1119  {
1120      uint64 value = 0;
1121      value |= extract_bits(instruction, 6, 6);
1122      return value;
1123  }
1124  
1125  
1126  static uint64 extract_rt_9_8_7_6_5(uint64 instruction)
1127  {
1128      uint64 value = 0;
1129      value |= extract_bits(instruction, 5, 5);
1130      return value;
1131  }
1132  
1133  
1134  static uint64 extract_op_25_24_23_22_21(uint64 instruction)
1135  {
1136      uint64 value = 0;
1137      value |= extract_bits(instruction, 21, 5);
1138      return value;
1139  }
1140  
1141  
1142  static uint64 extract_u_6_5_4_3_2_1_0__s2(uint64 instruction)
1143  {
1144      uint64 value = 0;
1145      value |= extract_bits(instruction, 0, 7) << 2;
1146      return value;
1147  }
1148  
1149  
1150  static uint64 extract_bit_16_15_14_13_12_11(uint64 instruction)
1151  {
1152      uint64 value = 0;
1153      value |= extract_bits(instruction, 11, 6);
1154      return value;
1155  }
1156  
1157  
1158  static uint64 extract_mask_20_19_18_17_16_15_14(uint64 instruction)
1159  {
1160      uint64 value = 0;
1161      value |= extract_bits(instruction, 14, 7);
1162      return value;
1163  }
1164  
1165  
1166  static uint64 extract_eu_3_2_1_0(uint64 instruction)
1167  {
1168      uint64 value = 0;
1169      value |= extract_bits(instruction, 0, 4);
1170      return value;
1171  }
1172  
1173  
1174  static uint64 extract_u_7_6_5_4__s4(uint64 instruction)
1175  {
1176      uint64 value = 0;
1177      value |= extract_bits(instruction, 4, 4) << 4;
1178      return value;
1179  }
1180  
1181  
1182  static int64 extract_s__se8_15_7_6_5_4_3_s3(uint64 instruction)
1183  {
1184      int64 value = 0;
1185      value |= extract_bits(instruction, 3, 5) << 3;
1186      value |= extract_bits(instruction, 15, 1) << 8;
1187      value = sign_extend(value, 8);
1188      return value;
1189  }
1190  
1191  
1192  static uint64 extract_ft_15_14_13_12_11(uint64 instruction)
1193  {
1194      uint64 value = 0;
1195      value |= extract_bits(instruction, 11, 5);
1196      return value;
1197  }
1198  
1199  
1200  static int64 extract_s__se31_15_to_0_31_to_16(uint64 instruction)
1201  {
1202      int64 value = 0;
1203      value |= extract_bits(instruction, 0, 16) << 16;
1204      value |= extract_bits(instruction, 16, 16);
1205      value = sign_extend(value, 31);
1206      return value;
1207  }
1208  
1209  
1210  static uint64 extract_u_20_19_18_17_16_15_14_13(uint64 instruction)
1211  {
1212      uint64 value = 0;
1213      value |= extract_bits(instruction, 13, 8);
1214      return value;
1215  }
1216  
1217  
1218  static uint64 extract_u_17_to_2__s2(uint64 instruction)
1219  {
1220      uint64 value = 0;
1221      value |= extract_bits(instruction, 2, 16) << 2;
1222      return value;
1223  }
1224  
1225  
1226  static uint64 extract_rd_15_14_13_12_11(uint64 instruction)
1227  {
1228      uint64 value = 0;
1229      value |= extract_bits(instruction, 11, 5);
1230      return value;
1231  }
1232  
1233  
1234  static uint64 extract_c0s_20_19_18_17_16(uint64 instruction)
1235  {
1236      uint64 value = 0;
1237      value |= extract_bits(instruction, 16, 5);
1238      return value;
1239  }
1240  
1241  
1242  static uint64 extract_code_1_0(uint64 instruction)
1243  {
1244      uint64 value = 0;
1245      value |= extract_bits(instruction, 0, 2);
1246      return value;
1247  }
1248  
1249  
1250  static int64 extract_s__se25_0_24_to_1_s1(uint64 instruction)
1251  {
1252      int64 value = 0;
1253      value |= extract_bits(instruction, 0, 1) << 25;
1254      value |= extract_bits(instruction, 1, 24) << 1;
1255      value = sign_extend(value, 25);
1256      return value;
1257  }
1258  
1259  
1260  static uint64 extract_u_1_0(uint64 instruction)
1261  {
1262      uint64 value = 0;
1263      value |= extract_bits(instruction, 0, 2);
1264      return value;
1265  }
1266  
1267  
1268  static uint64 extract_u_3_8__s2(uint64 instruction)
1269  {
1270      uint64 value = 0;
1271      value |= extract_bits(instruction, 3, 1) << 3;
1272      value |= extract_bits(instruction, 8, 1) << 2;
1273      return value;
1274  }
1275  
1276  
1277  static uint64 extract_fd_15_14_13_12_11(uint64 instruction)
1278  {
1279      uint64 value = 0;
1280      value |= extract_bits(instruction, 11, 5);
1281      return value;
1282  }
1283  
1284  
1285  static uint64 extract_u_4_3_2_1_0__s2(uint64 instruction)
1286  {
1287      uint64 value = 0;
1288      value |= extract_bits(instruction, 0, 5) << 2;
1289      return value;
1290  }
1291  
1292  
1293  static uint64 extract_rtz4_9_7_6_5(uint64 instruction)
1294  {
1295      uint64 value = 0;
1296      value |= extract_bits(instruction, 5, 3);
1297      value |= extract_bits(instruction, 9, 1) << 3;
1298      return value;
1299  }
1300  
1301  
1302  static uint64 extract_sel_15_14_13_12_11(uint64 instruction)
1303  {
1304      uint64 value = 0;
1305      value |= extract_bits(instruction, 11, 5);
1306      return value;
1307  }
1308  
1309  
1310  static uint64 extract_ct_25_24_23_22_21(uint64 instruction)
1311  {
1312      uint64 value = 0;
1313      value |= extract_bits(instruction, 21, 5);
1314      return value;
1315  }
1316  
1317  
1318  static uint64 extract_u_20_to_2__s2(uint64 instruction)
1319  {
1320      uint64 value = 0;
1321      value |= extract_bits(instruction, 2, 19) << 2;
1322      return value;
1323  }
1324  
1325  
1326  static int64 extract_s__se3_4_2_1_0(uint64 instruction)
1327  {
1328      int64 value = 0;
1329      value |= extract_bits(instruction, 0, 3);
1330      value |= extract_bits(instruction, 4, 1) << 3;
1331      value = sign_extend(value, 3);
1332      return value;
1333  }
1334  
1335  
1336  static uint64 extract_u_3_2_1_0__s1(uint64 instruction)
1337  {
1338      uint64 value = 0;
1339      value |= extract_bits(instruction, 0, 4) << 1;
1340      return value;
1341  }
1342  
1343  
1344  
1345  static bool ADDIU_32__cond(uint64 instruction)
1346  {
1347      uint64 rt = extract_rt_25_24_23_22_21(instruction);
1348      return rt != 0;
1349  }
1350  
1351  
1352  static bool ADDIU_RS5__cond(uint64 instruction)
1353  {
1354      uint64 rt = extract_rt_9_8_7_6_5(instruction);
1355      return rt != 0;
1356  }
1357  
1358  
1359  static bool BALRSC_cond(uint64 instruction)
1360  {
1361      uint64 rt = extract_rt_25_24_23_22_21(instruction);
1362      return rt != 0;
1363  }
1364  
1365  
1366  static bool BEQC_16__cond(uint64 instruction)
1367  {
1368      uint64 rs3 = extract_rs3_6_5_4(instruction);
1369      uint64 rt3 = extract_rt3_9_8_7(instruction);
1370      uint64 u = extract_u_3_2_1_0__s1(instruction);
1371      return rs3 < rt3 && u != 0;
1372  }
1373  
1374  
1375  static bool BNEC_16__cond(uint64 instruction)
1376  {
1377      uint64 rs3 = extract_rs3_6_5_4(instruction);
1378      uint64 rt3 = extract_rt3_9_8_7(instruction);
1379      uint64 u = extract_u_3_2_1_0__s1(instruction);
1380      return rs3 >= rt3 && u != 0;
1381  }
1382  
1383  
1384  static bool MOVE_cond(uint64 instruction)
1385  {
1386      uint64 rt = extract_rt_9_8_7_6_5(instruction);
1387      return rt != 0;
1388  }
1389  
1390  
1391  static bool P16_BR1_cond(uint64 instruction)
1392  {
1393      uint64 u = extract_u_3_2_1_0__s1(instruction);
1394      return u != 0;
1395  }
1396  
1397  
1398  static bool PREF_S9__cond(uint64 instruction)
1399  {
1400      uint64 hint = extract_hint_25_24_23_22_21(instruction);
1401      return hint != 31;
1402  }
1403  
1404  
1405  static bool PREFE_cond(uint64 instruction)
1406  {
1407      uint64 hint = extract_hint_25_24_23_22_21(instruction);
1408      return hint != 31;
1409  }
1410  
1411  
1412  static bool SLTU_cond(uint64 instruction)
1413  {
1414      uint64 rd = extract_rd_15_14_13_12_11(instruction);
1415      return rd != 0;
1416  }
1417  
1418  
1419  
1420  /*
1421   * ABS.D fd, fs - Floating Point Absolute Value
1422   *
1423   *   3         2         1
1424   *  10987654321098765432109876543210
1425   *  010001     00000          000101
1426   *    fmt -----
1427   *               fs -----
1428   *                    fd -----
1429   */
1430  static char *ABS_D(uint64 instruction, Dis_info *info)
1431  {
1432      uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1433      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1434  
1435      const char *fs = FPR(fs_value, info);
1436      const char *fd = FPR(fd_value, info);
1437  
1438      return img_format("ABS.D %s, %s", fd, fs);
1439  }
1440  
1441  
1442  /*
1443   * ABS.S fd, fs - Floating Point Absolute Value
1444   *
1445   *   3         2         1
1446   *  10987654321098765432109876543210
1447   *  010001     00000          000101
1448   *    fmt -----
1449   *               fd -----
1450   *                    fs -----
1451   */
1452  static char *ABS_S(uint64 instruction, Dis_info *info)
1453  {
1454      uint64 fd_value = extract_ft_25_24_23_22_21(instruction);
1455      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1456  
1457      const char *fs = FPR(fs_value, info);
1458      const char *fd = FPR(fd_value, info);
1459  
1460      return img_format("ABS.S %s, %s", fd, fs);
1461  }
1462  
1463  
1464  /*
1465   * [DSP] ABSQ_S.PH rt, rs - Find absolute value of two fractional halfwords
1466   *         with 16-bit saturation
1467   *
1468   *   3         2         1
1469   *  10987654321098765432109876543210
1470   *  001000          0001000100111111
1471   *     rt -----
1472   *          rs -----
1473   */
1474  static char *ABSQ_S_PH(uint64 instruction, Dis_info *info)
1475  {
1476      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1477      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1478  
1479      const char *rt = GPR(rt_value, info);
1480      const char *rs = GPR(rs_value, info);
1481  
1482      return img_format("ABSQ_S.PH %s, %s", rt, rs);
1483  }
1484  
1485  
1486  /*
1487   * [DSP] ABSQ_S.QB rt, rs - Find absolute value of four fractional byte values
1488   *         with 8-bit saturation
1489   *
1490   *   3         2         1
1491   *  10987654321098765432109876543210
1492   *  001000          0000000100111111
1493   *     rt -----
1494   *          rs -----
1495   */
1496  static char *ABSQ_S_QB(uint64 instruction, Dis_info *info)
1497  {
1498      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1499      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1500  
1501      const char *rt = GPR(rt_value, info);
1502      const char *rs = GPR(rs_value, info);
1503  
1504      return img_format("ABSQ_S.QB %s, %s", rt, rs);
1505  }
1506  
1507  
1508  /*
1509   * [DSP] ABSQ_S.W rt, rs - Find absolute value of fractional word with 32-bit
1510   *         saturation
1511   *
1512   *   3         2         1
1513   *  10987654321098765432109876543210
1514   *  001000          0010000100111111
1515   *     rt -----
1516   *          rs -----
1517   */
1518  static char *ABSQ_S_W(uint64 instruction, Dis_info *info)
1519  {
1520      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1521      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1522  
1523      const char *rt = GPR(rt_value, info);
1524      const char *rs = GPR(rs_value, info);
1525  
1526      return img_format("ABSQ_S.W %s, %s", rt, rs);
1527  }
1528  
1529  
1530  /*
1531   *
1532   *
1533   *   3         2         1
1534   *  10987654321098765432109876543210
1535   *  001000          0010000100111111
1536   *     rt -----
1537   *          rs -----
1538   */
1539  static char *ACLR(uint64 instruction, Dis_info *info)
1540  {
1541      uint64 bit_value = extract_bit_23_22_21(instruction);
1542      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1543      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
1544  
1545      const char *rs = GPR(rs_value, info);
1546  
1547      return img_format("ACLR 0x%" PRIx64 ", %" PRId64 "(%s)",
1548                        bit_value, s_value, rs);
1549  }
1550  
1551  
1552  /*
1553   *
1554   *
1555   *   3         2         1
1556   *  10987654321098765432109876543210
1557   *  001000          0010000100111111
1558   *     rt -----
1559   *          rs -----
1560   */
1561  static char *ADD(uint64 instruction, Dis_info *info)
1562  {
1563      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1564      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1565      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1566  
1567      const char *rd = GPR(rd_value, info);
1568      const char *rs = GPR(rs_value, info);
1569      const char *rt = GPR(rt_value, info);
1570  
1571      return img_format("ADD %s, %s, %s", rd, rs, rt);
1572  }
1573  
1574  
1575  /*
1576   * ADD.D fd, fs, ft - Floating Point Add
1577   *
1578   *   3         2         1
1579   *  10987654321098765432109876543210
1580   *  010001                    000101
1581   *    fmt -----
1582   *          ft -----
1583   *               fs -----
1584   *                    fd -----
1585   */
1586  static char *ADD_D(uint64 instruction, Dis_info *info)
1587  {
1588      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1589      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1590      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1591  
1592      const char *ft = FPR(ft_value, info);
1593      const char *fs = FPR(fs_value, info);
1594      const char *fd = FPR(fd_value, info);
1595  
1596      return img_format("ADD.D %s, %s, %s", fd, fs, ft);
1597  }
1598  
1599  
1600  /*
1601   * ADD.S fd, fs, ft - Floating Point Add
1602   *
1603   *   3         2         1
1604   *  10987654321098765432109876543210
1605   *  010001                    000101
1606   *    fmt -----
1607   *          ft -----
1608   *               fs -----
1609   *                    fd -----
1610   */
1611  static char *ADD_S(uint64 instruction, Dis_info *info)
1612  {
1613      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
1614      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
1615      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
1616  
1617      const char *ft = FPR(ft_value, info);
1618      const char *fs = FPR(fs_value, info);
1619      const char *fd = FPR(fd_value, info);
1620  
1621      return img_format("ADD.S %s, %s, %s", fd, fs, ft);
1622  }
1623  
1624  
1625  /*
1626   *
1627   *
1628   *   3         2         1
1629   *  10987654321098765432109876543210
1630   *  001000          0010000100111111
1631   *     rt -----
1632   *          rs -----
1633   */
1634  static char *ADDIU_32_(uint64 instruction, Dis_info *info)
1635  {
1636      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1637      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1638      uint64 u_value = extract_u_15_to_0(instruction);
1639  
1640      const char *rt = GPR(rt_value, info);
1641      const char *rs = GPR(rs_value, info);
1642  
1643      return img_format("ADDIU %s, %s, 0x%" PRIx64, rt, rs, u_value);
1644  }
1645  
1646  
1647  /*
1648   *
1649   *
1650   *   3         2         1
1651   *  10987654321098765432109876543210
1652   *  001000          0010000100111111
1653   *     rt -----
1654   *          rs -----
1655   */
1656  static char *ADDIU_48_(uint64 instruction, Dis_info *info)
1657  {
1658      uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
1659      int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
1660  
1661      const char *rt = GPR(rt_value, info);
1662  
1663      return img_format("ADDIU %s, %" PRId64, rt, s_value);
1664  }
1665  
1666  
1667  /*
1668   *
1669   *
1670   *   3         2         1
1671   *  10987654321098765432109876543210
1672   *  001000          0010000100111111
1673   *     rt -----
1674   *          rs -----
1675   */
1676  static char *ADDIU_GP48_(uint64 instruction, Dis_info *info)
1677  {
1678      uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
1679      int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
1680  
1681      const char *rt = GPR(rt_value, info);
1682  
1683      return img_format("ADDIU %s, $%d, %" PRId64, rt, 28, s_value);
1684  }
1685  
1686  
1687  /*
1688   *
1689   *
1690   *   3         2         1
1691   *  10987654321098765432109876543210
1692   *  001000          0010000100111111
1693   *     rt -----
1694   *          rs -----
1695   */
1696  static char *ADDIU_GP_B_(uint64 instruction, Dis_info *info)
1697  {
1698      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1699      uint64 u_value = extract_u_17_to_0(instruction);
1700  
1701      const char *rt = GPR(rt_value, info);
1702  
1703      return img_format("ADDIU %s, $%d, 0x%" PRIx64, rt, 28, u_value);
1704  }
1705  
1706  
1707  /*
1708   *
1709   *
1710   *   3         2         1
1711   *  10987654321098765432109876543210
1712   *  001000          0010000100111111
1713   *     rt -----
1714   *          rs -----
1715   */
1716  static char *ADDIU_GP_W_(uint64 instruction, Dis_info *info)
1717  {
1718      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1719      uint64 u_value = extract_u_20_to_2__s2(instruction);
1720  
1721      const char *rt = GPR(rt_value, info);
1722  
1723      return img_format("ADDIU %s, $%d, 0x%" PRIx64, rt, 28, u_value);
1724  }
1725  
1726  
1727  /*
1728   *
1729   *
1730   *   3         2         1
1731   *  10987654321098765432109876543210
1732   *  001000          0010000100111111
1733   *     rt -----
1734   *          rs -----
1735   */
1736  static char *ADDIU_NEG_(uint64 instruction, Dis_info *info)
1737  {
1738      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1739      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1740      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
1741  
1742      const char *rt = GPR(rt_value, info);
1743      const char *rs = GPR(rs_value, info);
1744      int64 u = neg_copy(u_value);
1745  
1746      return img_format("ADDIU %s, %s, %" PRId64, rt, rs, u);
1747  }
1748  
1749  
1750  /*
1751   *
1752   *
1753   *   3         2         1
1754   *  10987654321098765432109876543210
1755   *  001000          0010000100111111
1756   *     rt -----
1757   *          rs -----
1758   */
1759  static char *ADDIU_R1_SP_(uint64 instruction, Dis_info *info)
1760  {
1761      uint64 u_value = extract_u_5_4_3_2_1_0__s2(instruction);
1762      uint64 rt3_value = extract_rt3_9_8_7(instruction);
1763  
1764      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
1765  
1766      return img_format("ADDIU %s, $%d, 0x%" PRIx64, rt3, 29, u_value);
1767  }
1768  
1769  
1770  /*
1771   *
1772   *
1773   *   3         2         1
1774   *  10987654321098765432109876543210
1775   *  001000          0010000100111111
1776   *     rt -----
1777   *          rs -----
1778   */
1779  static char *ADDIU_R2_(uint64 instruction, Dis_info *info)
1780  {
1781      uint64 rt3_value = extract_rt3_9_8_7(instruction);
1782      uint64 rs3_value = extract_rs3_6_5_4(instruction);
1783      uint64 u_value = extract_u_2_1_0__s2(instruction);
1784  
1785      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
1786      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
1787  
1788      return img_format("ADDIU %s, %s, 0x%" PRIx64, rt3, rs3, u_value);
1789  }
1790  
1791  
1792  /*
1793   * ADDIU[RS5] rt, s5 - Add Signed Word and Set Carry Bit
1794   *
1795   *  5432109876543210
1796   *  100100      1
1797   *     rt -----
1798   *           s - ---
1799   */
1800  static char *ADDIU_RS5_(uint64 instruction, Dis_info *info)
1801  {
1802      uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
1803      int64 s_value = extract_s__se3_4_2_1_0(instruction);
1804  
1805      const char *rt = GPR(rt_value, info);
1806  
1807      return img_format("ADDIU %s, %" PRId64, rt, s_value);
1808  }
1809  
1810  
1811  /*
1812   *
1813   *
1814   *   3         2         1
1815   *  10987654321098765432109876543210
1816   *  001000               x1110000101
1817   *     rt -----
1818   *          rs -----
1819   *               rd -----
1820   */
1821  static char *ADDIUPC_32_(uint64 instruction, Dis_info *info)
1822  {
1823      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1824      int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
1825  
1826      const char *rt = GPR(rt_value, info);
1827      g_autofree char *s = ADDRESS(s_value, 4, info);
1828  
1829      return img_format("ADDIUPC %s, %s", rt, s);
1830  }
1831  
1832  
1833  /*
1834   *
1835   *
1836   *   3         2         1
1837   *  10987654321098765432109876543210
1838   *  001000               x1110000101
1839   *     rt -----
1840   *          rs -----
1841   *               rd -----
1842   */
1843  static char *ADDIUPC_48_(uint64 instruction, Dis_info *info)
1844  {
1845      uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
1846      int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
1847  
1848      const char *rt = GPR(rt_value, info);
1849      g_autofree char *s = ADDRESS(s_value, 6, info);
1850  
1851      return img_format("ADDIUPC %s, %s", rt, s);
1852  }
1853  
1854  
1855  /*
1856   * [DSP] ADDQ.PH rd, rt, rs - Add fractional halfword vectors
1857   *
1858   *   3         2         1
1859   *  10987654321098765432109876543210
1860   *  001000               00000001101
1861   *     rt -----
1862   *          rs -----
1863   *               rd -----
1864   */
1865  static char *ADDQ_PH(uint64 instruction, Dis_info *info)
1866  {
1867      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1868      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1869      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1870  
1871      const char *rd = GPR(rd_value, info);
1872      const char *rs = GPR(rs_value, info);
1873      const char *rt = GPR(rt_value, info);
1874  
1875      return img_format("ADDQ.PH %s, %s, %s", rd, rs, rt);
1876  }
1877  
1878  
1879  /*
1880   * [DSP] ADDQ_S.PH rd, rt, rs - Add fractional halfword vectors with 16-bit
1881   *         saturation
1882   *
1883   *   3         2         1
1884   *  10987654321098765432109876543210
1885   *  001000               10000001101
1886   *     rt -----
1887   *          rs -----
1888   *               rd -----
1889   */
1890  static char *ADDQ_S_PH(uint64 instruction, Dis_info *info)
1891  {
1892      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1893      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1894      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1895  
1896      const char *rd = GPR(rd_value, info);
1897      const char *rs = GPR(rs_value, info);
1898      const char *rt = GPR(rt_value, info);
1899  
1900      return img_format("ADDQ_S.PH %s, %s, %s", rd, rs, rt);
1901  }
1902  
1903  
1904  /*
1905   * [DSP] ADDQ_S.W rd, rt, rs - Add fractional words with 32-bit saturation
1906   *
1907   *   3         2         1
1908   *  10987654321098765432109876543210
1909   *  001000               x1100000101
1910   *     rt -----
1911   *          rs -----
1912   *               rd -----
1913   */
1914  static char *ADDQ_S_W(uint64 instruction, Dis_info *info)
1915  {
1916      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1917      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1918      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1919  
1920      const char *rd = GPR(rd_value, info);
1921      const char *rs = GPR(rs_value, info);
1922      const char *rt = GPR(rt_value, info);
1923  
1924      return img_format("ADDQ_S.W %s, %s, %s", rd, rs, rt);
1925  }
1926  
1927  
1928  /*
1929   * [DSP] ADDQH.PH rd, rt, rs - Add fractional halfword vectors and shift
1930   *         right to halve results
1931   *
1932   *   3         2         1
1933   *  10987654321098765432109876543210
1934   *  001000               00001001101
1935   *     rt -----
1936   *          rs -----
1937   *               rd -----
1938   */
1939  static char *ADDQH_PH(uint64 instruction, Dis_info *info)
1940  {
1941      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1942      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1943      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1944  
1945      const char *rd = GPR(rd_value, info);
1946      const char *rs = GPR(rs_value, info);
1947      const char *rt = GPR(rt_value, info);
1948  
1949      return img_format("ADDQH.PH %s, %s, %s", rd, rs, rt);
1950  }
1951  
1952  
1953  /*
1954   * [DSP] ADDQH_R.PH rd, rt, rs - Add fractional halfword vectors and shift
1955   *         right to halve results with rounding
1956   *
1957   *   3         2         1
1958   *  10987654321098765432109876543210
1959   *  001000               10001001101
1960   *     rt -----
1961   *          rs -----
1962   *               rd -----
1963   */
1964  static char *ADDQH_R_PH(uint64 instruction, Dis_info *info)
1965  {
1966      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1967      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1968      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1969  
1970      const char *rd = GPR(rd_value, info);
1971      const char *rs = GPR(rs_value, info);
1972      const char *rt = GPR(rt_value, info);
1973  
1974      return img_format("ADDQH_R.PH %s, %s, %s", rd, rs, rt);
1975  }
1976  
1977  
1978  /*
1979   * [DSP] ADDQH_R.W rd, rt, rs - Add fractional words and shift right to halve
1980   *         results with rounding
1981   *
1982   *   3         2         1
1983   *  10987654321098765432109876543210
1984   *  001000               00010001101
1985   *     rt -----
1986   *          rs -----
1987   *               rd -----
1988   */
1989  static char *ADDQH_R_W(uint64 instruction, Dis_info *info)
1990  {
1991      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
1992      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
1993      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
1994  
1995      const char *rd = GPR(rd_value, info);
1996      const char *rs = GPR(rs_value, info);
1997      const char *rt = GPR(rt_value, info);
1998  
1999      return img_format("ADDQH_R.W %s, %s, %s", rd, rs, rt);
2000  }
2001  
2002  
2003  /*
2004   * [DSP] ADDQH.W rd, rt, rs - Add fractional words and shift right to halve
2005   *         results
2006   *
2007   *   3         2         1
2008   *  10987654321098765432109876543210
2009   *  001000               10010001101
2010   *     rt -----
2011   *          rs -----
2012   *               rd -----
2013   */
2014  static char *ADDQH_W(uint64 instruction, Dis_info *info)
2015  {
2016      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2017      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2018      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2019  
2020      const char *rd = GPR(rd_value, info);
2021      const char *rs = GPR(rs_value, info);
2022      const char *rt = GPR(rt_value, info);
2023  
2024      return img_format("ADDQH.W %s, %s, %s", rd, rs, rt);
2025  }
2026  
2027  
2028  /*
2029   * [DSP] ADDSC rd, rt, rs - Add two signed words and set carry bit
2030   *
2031   *   3         2         1
2032   *  10987654321098765432109876543210
2033   *  001000               x1110000101
2034   *     rt -----
2035   *          rs -----
2036   *               rd -----
2037   */
2038  static char *ADDSC(uint64 instruction, Dis_info *info)
2039  {
2040      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2041      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2042      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2043  
2044      const char *rd = GPR(rd_value, info);
2045      const char *rs = GPR(rs_value, info);
2046      const char *rt = GPR(rt_value, info);
2047  
2048      return img_format("ADDSC %s, %s, %s", rd, rs, rt);
2049  }
2050  
2051  
2052  /*
2053   * ADDU[16] rd3, rs3, rt3 -
2054   *
2055   *  5432109876543210
2056   *  101100         0
2057   *    rt3 ---
2058   *       rs3 ---
2059   *          rd3 ---
2060   */
2061  static char *ADDU_16_(uint64 instruction, Dis_info *info)
2062  {
2063      uint64 rt3_value = extract_rt3_9_8_7(instruction);
2064      uint64 rs3_value = extract_rs3_6_5_4(instruction);
2065      uint64 rd3_value = extract_rd3_3_2_1(instruction);
2066  
2067      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2068      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2069      const char *rd3 = GPR(decode_gpr_gpr3(rd3_value, info), info);
2070  
2071      return img_format("ADDU %s, %s, %s", rd3, rs3, rt3);
2072  }
2073  
2074  
2075  /*
2076   *
2077   *
2078   *   3         2         1
2079   *  10987654321098765432109876543210
2080   *  001000               x1110000101
2081   *     rt -----
2082   *          rs -----
2083   *               rd -----
2084   */
2085  static char *ADDU_32_(uint64 instruction, Dis_info *info)
2086  {
2087      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2088      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2089      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2090  
2091      const char *rd = GPR(rd_value, info);
2092      const char *rs = GPR(rs_value, info);
2093      const char *rt = GPR(rt_value, info);
2094  
2095      return img_format("ADDU %s, %s, %s", rd, rs, rt);
2096  }
2097  
2098  
2099  /*
2100   *
2101   *
2102   *   3         2         1
2103   *  10987654321098765432109876543210
2104   *  001000               x1110000101
2105   *     rt -----
2106   *          rs -----
2107   *               rd -----
2108   */
2109  static char *ADDU_4X4_(uint64 instruction, Dis_info *info)
2110  {
2111      uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
2112      uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
2113  
2114      const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
2115      const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info);
2116  
2117      return img_format("ADDU %s, %s", rs4, rt4);
2118  }
2119  
2120  
2121  /*
2122   * [DSP] ADDU.PH rd, rt, rs - Add two pairs of unsigned halfwords
2123   *
2124   *   3         2         1
2125   *  10987654321098765432109876543210
2126   *  001000               00100001101
2127   *     rt -----
2128   *          rs -----
2129   *               rd -----
2130   */
2131  static char *ADDU_PH(uint64 instruction, Dis_info *info)
2132  {
2133      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2134      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2135      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2136  
2137      const char *rd = GPR(rd_value, info);
2138      const char *rs = GPR(rs_value, info);
2139      const char *rt = GPR(rt_value, info);
2140  
2141      return img_format("ADDU.PH %s, %s, %s", rd, rs, rt);
2142  }
2143  
2144  
2145  /*
2146   * ADDU.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2147   *
2148   *   3         2         1
2149   *  10987654321098765432109876543210
2150   *  001000               00011001101
2151   *     rt -----
2152   *          rs -----
2153   *               rd -----
2154   */
2155  static char *ADDU_QB(uint64 instruction, Dis_info *info)
2156  {
2157      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2158      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2159      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2160  
2161      const char *rd = GPR(rd_value, info);
2162      const char *rs = GPR(rs_value, info);
2163      const char *rt = GPR(rt_value, info);
2164  
2165      return img_format("ADDU.QB %s, %s, %s", rd, rs, rt);
2166  }
2167  
2168  
2169  /*
2170   * [DSP] ADDU_S.PH rd, rt, rs - Add two pairs of unsigned halfwords with 16-bit
2171   *         saturation
2172   *
2173   *   3         2         1
2174   *  10987654321098765432109876543210
2175   *  001000               10100001101
2176   *     rt -----
2177   *          rs -----
2178   *               rd -----
2179   */
2180  static char *ADDU_S_PH(uint64 instruction, Dis_info *info)
2181  {
2182      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2183      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2184      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2185  
2186      const char *rd = GPR(rd_value, info);
2187      const char *rs = GPR(rs_value, info);
2188      const char *rt = GPR(rt_value, info);
2189  
2190      return img_format("ADDU_S.PH %s, %s, %s", rd, rs, rt);
2191  }
2192  
2193  
2194  /*
2195   * ADDU_S.QB rd, rt, rs - Unsigned Add Quad Byte Vectors
2196   *
2197   *   3         2         1
2198   *  10987654321098765432109876543210
2199   *  001000               10011001101
2200   *     rt -----
2201   *          rs -----
2202   *               rd -----
2203   */
2204  static char *ADDU_S_QB(uint64 instruction, Dis_info *info)
2205  {
2206      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2207      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2208      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2209  
2210      const char *rd = GPR(rd_value, info);
2211      const char *rs = GPR(rs_value, info);
2212      const char *rt = GPR(rt_value, info);
2213  
2214      return img_format("ADDU_S.QB %s, %s, %s", rd, rs, rt);
2215  }
2216  
2217  
2218  /*
2219   * ADDUH.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2220   *                       to Halve Results
2221   *
2222   *   3         2         1
2223   *  10987654321098765432109876543210
2224   *  001000               00101001101
2225   *     rt -----
2226   *          rs -----
2227   *               rd -----
2228   */
2229  static char *ADDUH_QB(uint64 instruction, Dis_info *info)
2230  {
2231      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2232      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2233      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2234  
2235      const char *rd = GPR(rd_value, info);
2236      const char *rs = GPR(rs_value, info);
2237      const char *rt = GPR(rt_value, info);
2238  
2239      return img_format("ADDUH.QB %s, %s, %s", rd, rs, rt);
2240  }
2241  
2242  
2243  /*
2244   * ADDUH_R.QB rd, rt, rs - Unsigned Add Vector Quad-Bytes And Right Shift
2245   *                         to Halve Results
2246   *
2247   *   3         2         1
2248   *  10987654321098765432109876543210
2249   *  001000               10101001101
2250   *     rt -----
2251   *          rs -----
2252   *               rd -----
2253   */
2254  static char *ADDUH_R_QB(uint64 instruction, Dis_info *info)
2255  {
2256      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2257      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2258      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2259  
2260      const char *rd = GPR(rd_value, info);
2261      const char *rs = GPR(rs_value, info);
2262      const char *rt = GPR(rt_value, info);
2263  
2264      return img_format("ADDUH_R.QB %s, %s, %s", rd, rs, rt);
2265  }
2266  
2267  /*
2268   * ADDWC rd, rt, rs - Add Word with Carry Bit
2269   *
2270   *   3         2         1
2271   *  10987654321098765432109876543210
2272   *  001000               x1111000101
2273   *     rt -----
2274   *          rs -----
2275   *               rd -----
2276   */
2277  static char *ADDWC(uint64 instruction, Dis_info *info)
2278  {
2279      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2280      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2281      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2282  
2283      const char *rd = GPR(rd_value, info);
2284      const char *rs = GPR(rs_value, info);
2285      const char *rt = GPR(rt_value, info);
2286  
2287      return img_format("ADDWC %s, %s, %s", rd, rs, rt);
2288  }
2289  
2290  
2291  /*
2292   *
2293   *
2294   *   3         2         1
2295   *  10987654321098765432109876543210
2296   *  001000               x1110000101
2297   *     rt -----
2298   *          rs -----
2299   *               rd -----
2300   */
2301  static char *ALUIPC(uint64 instruction, Dis_info *info)
2302  {
2303      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2304      int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
2305  
2306      const char *rt = GPR(rt_value, info);
2307      g_autofree char *s = ADDRESS(s_value, 4, info);
2308  
2309      return img_format("ALUIPC %s, %%pcrel_hi(%s)", rt, s);
2310  }
2311  
2312  
2313  /*
2314   * AND[16] rt3, rs3 -
2315   *
2316   *  5432109876543210
2317   *  101100
2318   *    rt3 ---
2319   *       rs3 ---
2320   *           eu ----
2321   */
2322  static char *AND_16_(uint64 instruction, Dis_info *info)
2323  {
2324      uint64 rt3_value = extract_rt3_9_8_7(instruction);
2325      uint64 rs3_value = extract_rs3_6_5_4(instruction);
2326  
2327      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2328      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2329  
2330      return img_format("AND %s, %s", rs3, rt3);
2331  }
2332  
2333  
2334  /*
2335   *
2336   *
2337   *   3         2         1
2338   *  10987654321098765432109876543210
2339   *  001000               x1110000101
2340   *     rt -----
2341   *          rs -----
2342   *               rd -----
2343   */
2344  static char *AND_32_(uint64 instruction, Dis_info *info)
2345  {
2346      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2347      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2348      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
2349  
2350      const char *rd = GPR(rd_value, info);
2351      const char *rs = GPR(rs_value, info);
2352      const char *rt = GPR(rt_value, info);
2353  
2354      return img_format("AND %s, %s, %s", rd, rs, rt);
2355  }
2356  
2357  
2358  /*
2359   * ANDI rt, rs, u -
2360   *
2361   *  5432109876543210
2362   *  101100
2363   *    rt3 ---
2364   *       rs3 ---
2365   *           eu ----
2366   */
2367  static char *ANDI_16_(uint64 instruction, Dis_info *info)
2368  {
2369      uint64 rt3_value = extract_rt3_9_8_7(instruction);
2370      uint64 rs3_value = extract_rs3_6_5_4(instruction);
2371      uint64 eu_value = extract_eu_3_2_1_0(instruction);
2372  
2373      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2374      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2375      uint64 eu = encode_eu_from_u_andi16(eu_value);
2376  
2377      return img_format("ANDI %s, %s, 0x%" PRIx64, rt3, rs3, eu);
2378  }
2379  
2380  
2381  /*
2382   *
2383   *
2384   *   3         2         1
2385   *  10987654321098765432109876543210
2386   *  001000               x1110000101
2387   *     rt -----
2388   *          rs -----
2389   *               rd -----
2390   */
2391  static char *ANDI_32_(uint64 instruction, Dis_info *info)
2392  {
2393      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2394      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2395      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
2396  
2397      const char *rt = GPR(rt_value, info);
2398      const char *rs = GPR(rs_value, info);
2399  
2400      return img_format("ANDI %s, %s, 0x%" PRIx64, rt, rs, u_value);
2401  }
2402  
2403  
2404  /*
2405   *
2406   *
2407   *   3         2         1
2408   *  10987654321098765432109876543210
2409   *  001000               x1110000101
2410   *     rt -----
2411   *          rs -----
2412   *               rd -----
2413   */
2414  static char *APPEND(uint64 instruction, Dis_info *info)
2415  {
2416      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2417      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2418      uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
2419  
2420      const char *rt = GPR(rt_value, info);
2421      const char *rs = GPR(rs_value, info);
2422  
2423      return img_format("APPEND %s, %s, 0x%" PRIx64, rt, rs, sa_value);
2424  }
2425  
2426  
2427  /*
2428   *
2429   *
2430   *   3         2         1
2431   *  10987654321098765432109876543210
2432   *  001000               x1110000101
2433   *     rt -----
2434   *          rs -----
2435   *               rd -----
2436   */
2437  static char *ASET(uint64 instruction, Dis_info *info)
2438  {
2439      uint64 bit_value = extract_bit_23_22_21(instruction);
2440      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2441      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
2442  
2443      const char *rs = GPR(rs_value, info);
2444  
2445      return img_format("ASET 0x%" PRIx64 ", %" PRId64 "(%s)",
2446                        bit_value, s_value, rs);
2447  }
2448  
2449  
2450  /*
2451   *
2452   *
2453   *   3         2         1
2454   *  10987654321098765432109876543210
2455   *  001000               x1110000101
2456   *     rt -----
2457   *          rs -----
2458   *               rd -----
2459   */
2460  static char *BALC_16_(uint64 instruction, Dis_info *info)
2461  {
2462      int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2463  
2464      g_autofree char *s = ADDRESS(s_value, 2, info);
2465  
2466      return img_format("BALC %s", s);
2467  }
2468  
2469  
2470  /*
2471   *
2472   *
2473   *   3         2         1
2474   *  10987654321098765432109876543210
2475   *  001000               x1110000101
2476   *     rt -----
2477   *          rs -----
2478   *               rd -----
2479   */
2480  static char *BALC_32_(uint64 instruction, Dis_info *info)
2481  {
2482      int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2483  
2484      g_autofree char *s = ADDRESS(s_value, 4, info);
2485  
2486      return img_format("BALC %s", s);
2487  }
2488  
2489  
2490  /*
2491   *
2492   *
2493   *   3         2         1
2494   *  10987654321098765432109876543210
2495   *  001000               x1110000101
2496   *     rt -----
2497   *          rs -----
2498   *               rd -----
2499   */
2500  static char *BALRSC(uint64 instruction, Dis_info *info)
2501  {
2502      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2503      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2504  
2505      const char *rt = GPR(rt_value, info);
2506      const char *rs = GPR(rs_value, info);
2507  
2508      return img_format("BALRSC %s, %s", rt, rs);
2509  }
2510  
2511  
2512  /*
2513   *
2514   *
2515   *   3         2         1
2516   *  10987654321098765432109876543210
2517   *  001000               x1110000101
2518   *     rt -----
2519   *          rs -----
2520   *               rd -----
2521   */
2522  static char *BBEQZC(uint64 instruction, Dis_info *info)
2523  {
2524      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2525      uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2526      int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2527  
2528      const char *rt = GPR(rt_value, info);
2529      g_autofree char *s = ADDRESS(s_value, 4, info);
2530  
2531      return img_format("BBEQZC %s, 0x%" PRIx64 ", %s", rt, bit_value, s);
2532  }
2533  
2534  
2535  /*
2536   *
2537   *
2538   *   3         2         1
2539   *  10987654321098765432109876543210
2540   *  001000               x1110000101
2541   *     rt -----
2542   *          rs -----
2543   *               rd -----
2544   */
2545  static char *BBNEZC(uint64 instruction, Dis_info *info)
2546  {
2547      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2548      uint64 bit_value = extract_bit_16_15_14_13_12_11(instruction);
2549      int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2550  
2551      const char *rt = GPR(rt_value, info);
2552      g_autofree char *s = ADDRESS(s_value, 4, info);
2553  
2554      return img_format("BBNEZC %s, 0x%" PRIx64 ", %s", rt, bit_value, s);
2555  }
2556  
2557  
2558  /*
2559   *
2560   *
2561   *   3         2         1
2562   *  10987654321098765432109876543210
2563   *  001000               x1110000101
2564   *     rt -----
2565   *          rs -----
2566   *               rd -----
2567   */
2568  static char *BC_16_(uint64 instruction, Dis_info *info)
2569  {
2570      int64 s_value = extract_s__se10_0_9_8_7_6_5_4_3_2_1_s1(instruction);
2571  
2572      g_autofree char *s = ADDRESS(s_value, 2, info);
2573  
2574      return img_format("BC %s", s);
2575  }
2576  
2577  
2578  /*
2579   *
2580   *
2581   *   3         2         1
2582   *  10987654321098765432109876543210
2583   *  001000               x1110000101
2584   *     rt -----
2585   *          rs -----
2586   *               rd -----
2587   */
2588  static char *BC_32_(uint64 instruction, Dis_info *info)
2589  {
2590      int64 s_value = extract_s__se25_0_24_to_1_s1(instruction);
2591  
2592      g_autofree char *s = ADDRESS(s_value, 4, info);
2593  
2594      return img_format("BC %s", s);
2595  }
2596  
2597  
2598  /*
2599   *
2600   *
2601   *   3         2         1
2602   *  10987654321098765432109876543210
2603   *  001000               x1110000101
2604   *     rt -----
2605   *          rs -----
2606   *               rd -----
2607   */
2608  static char *BC1EQZC(uint64 instruction, Dis_info *info)
2609  {
2610      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
2611      int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2612  
2613      const char *ft = FPR(ft_value, info);
2614      g_autofree char *s = ADDRESS(s_value, 4, info);
2615  
2616      return img_format("BC1EQZC %s, %s", ft, s);
2617  }
2618  
2619  
2620  /*
2621   *
2622   *
2623   *   3         2         1
2624   *  10987654321098765432109876543210
2625   *  001000               x1110000101
2626   *     rt -----
2627   *          rs -----
2628   *               rd -----
2629   */
2630  static char *BC1NEZC(uint64 instruction, Dis_info *info)
2631  {
2632      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
2633      int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2634  
2635      const char *ft = FPR(ft_value, info);
2636      g_autofree char *s = ADDRESS(s_value, 4, info);
2637  
2638      return img_format("BC1NEZC %s, %s", ft, s);
2639  }
2640  
2641  
2642  /*
2643   *
2644   *
2645   *   3         2         1
2646   *  10987654321098765432109876543210
2647   *  001000               x1110000101
2648   *     rt -----
2649   *          rs -----
2650   *               rd -----
2651   */
2652  static char *BC2EQZC(uint64 instruction, Dis_info *info)
2653  {
2654      uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
2655      int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2656  
2657      g_autofree char *s = ADDRESS(s_value, 4, info);
2658  
2659      return img_format("BC2EQZC CP%" PRIu64 ", %s", ct_value, s);
2660  }
2661  
2662  
2663  /*
2664   *
2665   *
2666   *   3         2         1
2667   *  10987654321098765432109876543210
2668   *  001000               x1110000101
2669   *     rt -----
2670   *          rs -----
2671   *               rd -----
2672   */
2673  static char *BC2NEZC(uint64 instruction, Dis_info *info)
2674  {
2675      uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
2676      int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2677  
2678      g_autofree char *s = ADDRESS(s_value, 4, info);
2679  
2680      return img_format("BC2NEZC CP%" PRIu64 ", %s", ct_value, s);
2681  }
2682  
2683  
2684  /*
2685   *
2686   *
2687   *   3         2         1
2688   *  10987654321098765432109876543210
2689   *  001000               x1110000101
2690   *     rt -----
2691   *          rs -----
2692   *               rd -----
2693   */
2694  static char *BEQC_16_(uint64 instruction, Dis_info *info)
2695  {
2696      uint64 rt3_value = extract_rt3_9_8_7(instruction);
2697      uint64 rs3_value = extract_rs3_6_5_4(instruction);
2698      uint64 u_value = extract_u_3_2_1_0__s1(instruction);
2699  
2700      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2701      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2702      g_autofree char *u = ADDRESS(u_value, 2, info);
2703  
2704      return img_format("BEQC %s, %s, %s", rs3, rt3, u);
2705  }
2706  
2707  
2708  /*
2709   *
2710   *
2711   *   3         2         1
2712   *  10987654321098765432109876543210
2713   *  001000               x1110000101
2714   *     rt -----
2715   *          rs -----
2716   *               rd -----
2717   */
2718  static char *BEQC_32_(uint64 instruction, Dis_info *info)
2719  {
2720      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2721      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2722      int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2723  
2724      const char *rs = GPR(rs_value, info);
2725      const char *rt = GPR(rt_value, info);
2726      g_autofree char *s = ADDRESS(s_value, 4, info);
2727  
2728      return img_format("BEQC %s, %s, %s", rs, rt, s);
2729  }
2730  
2731  
2732  /*
2733   *
2734   *
2735   *   3         2         1
2736   *  10987654321098765432109876543210
2737   *  001000               x1110000101
2738   *     rt -----
2739   *          rs -----
2740   *               rd -----
2741   */
2742  static char *BEQIC(uint64 instruction, Dis_info *info)
2743  {
2744      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2745      uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2746      int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2747  
2748      const char *rt = GPR(rt_value, info);
2749      g_autofree char *s = ADDRESS(s_value, 4, info);
2750  
2751      return img_format("BEQIC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
2752  }
2753  
2754  
2755  /*
2756   *
2757   *
2758   *   3         2         1
2759   *  10987654321098765432109876543210
2760   *  001000               x1110000101
2761   *     rt -----
2762   *          rs -----
2763   *               rd -----
2764   */
2765  static char *BEQZC_16_(uint64 instruction, Dis_info *info)
2766  {
2767      uint64 rt3_value = extract_rt3_9_8_7(instruction);
2768      int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
2769  
2770      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2771      g_autofree char *s = ADDRESS(s_value, 2, info);
2772  
2773      return img_format("BEQZC %s, %s", rt3, s);
2774  }
2775  
2776  
2777  /*
2778   *
2779   *
2780   *   3         2         1
2781   *  10987654321098765432109876543210
2782   *  001000               x1110000101
2783   *     rt -----
2784   *          rs -----
2785   *               rd -----
2786   */
2787  static char *BGEC(uint64 instruction, Dis_info *info)
2788  {
2789      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2790      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2791      int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2792  
2793      const char *rs = GPR(rs_value, info);
2794      const char *rt = GPR(rt_value, info);
2795      g_autofree char *s = ADDRESS(s_value, 4, info);
2796  
2797      return img_format("BGEC %s, %s, %s", rs, rt, s);
2798  }
2799  
2800  
2801  /*
2802   *
2803   *
2804   *   3         2         1
2805   *  10987654321098765432109876543210
2806   *  001000               x1110000101
2807   *     rt -----
2808   *          rs -----
2809   *               rd -----
2810   */
2811  static char *BGEIC(uint64 instruction, Dis_info *info)
2812  {
2813      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2814      uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2815      int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2816  
2817      const char *rt = GPR(rt_value, info);
2818      g_autofree char *s = ADDRESS(s_value, 4, info);
2819  
2820      return img_format("BGEIC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
2821  }
2822  
2823  
2824  /*
2825   *
2826   *
2827   *   3         2         1
2828   *  10987654321098765432109876543210
2829   *  001000               x1110000101
2830   *     rt -----
2831   *          rs -----
2832   *               rd -----
2833   */
2834  static char *BGEIUC(uint64 instruction, Dis_info *info)
2835  {
2836      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2837      uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2838      int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2839  
2840      const char *rt = GPR(rt_value, info);
2841      g_autofree char *s = ADDRESS(s_value, 4, info);
2842  
2843      return img_format("BGEIUC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
2844  }
2845  
2846  
2847  /*
2848   *
2849   *
2850   *   3         2         1
2851   *  10987654321098765432109876543210
2852   *  001000               x1110000101
2853   *     rt -----
2854   *          rs -----
2855   *               rd -----
2856   */
2857  static char *BGEUC(uint64 instruction, Dis_info *info)
2858  {
2859      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2860      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2861      int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2862  
2863      const char *rs = GPR(rs_value, info);
2864      const char *rt = GPR(rt_value, info);
2865      g_autofree char *s = ADDRESS(s_value, 4, info);
2866  
2867      return img_format("BGEUC %s, %s, %s", rs, rt, s);
2868  }
2869  
2870  
2871  /*
2872   *
2873   *
2874   *   3         2         1
2875   *  10987654321098765432109876543210
2876   *  001000               x1110000101
2877   *     rt -----
2878   *          rs -----
2879   *               rd -----
2880   */
2881  static char *BLTC(uint64 instruction, Dis_info *info)
2882  {
2883      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2884      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2885      int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2886  
2887      const char *rs = GPR(rs_value, info);
2888      const char *rt = GPR(rt_value, info);
2889      g_autofree char *s = ADDRESS(s_value, 4, info);
2890  
2891      return img_format("BLTC %s, %s, %s", rs, rt, s);
2892  }
2893  
2894  
2895  /*
2896   *
2897   *
2898   *   3         2         1
2899   *  10987654321098765432109876543210
2900   *  001000               x1110000101
2901   *     rt -----
2902   *          rs -----
2903   *               rd -----
2904   */
2905  static char *BLTIC(uint64 instruction, Dis_info *info)
2906  {
2907      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2908      uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2909      int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2910  
2911      const char *rt = GPR(rt_value, info);
2912      g_autofree char *s = ADDRESS(s_value, 4, info);
2913  
2914      return img_format("BLTIC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
2915  }
2916  
2917  
2918  /*
2919   *
2920   *
2921   *   3         2         1
2922   *  10987654321098765432109876543210
2923   *  001000               x1110000101
2924   *     rt -----
2925   *          rs -----
2926   *               rd -----
2927   */
2928  static char *BLTIUC(uint64 instruction, Dis_info *info)
2929  {
2930      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2931      uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
2932      int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
2933  
2934      const char *rt = GPR(rt_value, info);
2935      g_autofree char *s = ADDRESS(s_value, 4, info);
2936  
2937      return img_format("BLTIUC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
2938  }
2939  
2940  
2941  /*
2942   *
2943   *
2944   *   3         2         1
2945   *  10987654321098765432109876543210
2946   *  001000               x1110000101
2947   *     rt -----
2948   *          rs -----
2949   *               rd -----
2950   */
2951  static char *BLTUC(uint64 instruction, Dis_info *info)
2952  {
2953      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
2954      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
2955      int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
2956  
2957      const char *rs = GPR(rs_value, info);
2958      const char *rt = GPR(rt_value, info);
2959      g_autofree char *s = ADDRESS(s_value, 4, info);
2960  
2961      return img_format("BLTUC %s, %s, %s", rs, rt, s);
2962  }
2963  
2964  
2965  /*
2966   *
2967   *
2968   *   3         2         1
2969   *  10987654321098765432109876543210
2970   *  001000               x1110000101
2971   *     rt -----
2972   *          rs -----
2973   *               rd -----
2974   */
2975  static char *BNEC_16_(uint64 instruction, Dis_info *info)
2976  {
2977      uint64 rt3_value = extract_rt3_9_8_7(instruction);
2978      uint64 rs3_value = extract_rs3_6_5_4(instruction);
2979      uint64 u_value = extract_u_3_2_1_0__s1(instruction);
2980  
2981      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
2982      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
2983      g_autofree char *u = ADDRESS(u_value, 2, info);
2984  
2985      return img_format("BNEC %s, %s, %s", rs3, rt3, u);
2986  }
2987  
2988  
2989  /*
2990   *
2991   *
2992   *   3         2         1
2993   *  10987654321098765432109876543210
2994   *  001000               x1110000101
2995   *     rt -----
2996   *          rs -----
2997   *               rd -----
2998   */
2999  static char *BNEC_32_(uint64 instruction, Dis_info *info)
3000  {
3001      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3002      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3003      int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3004  
3005      const char *rs = GPR(rs_value, info);
3006      const char *rt = GPR(rt_value, info);
3007      g_autofree char *s = ADDRESS(s_value, 4, info);
3008  
3009      return img_format("BNEC %s, %s, %s", rs, rt, s);
3010  }
3011  
3012  
3013  /*
3014   *
3015   *
3016   *   3         2         1
3017   *  10987654321098765432109876543210
3018   *  001000               x1110000101
3019   *     rt -----
3020   *          rs -----
3021   *               rd -----
3022   */
3023  static char *BNEIC(uint64 instruction, Dis_info *info)
3024  {
3025      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3026      uint64 u_value = extract_u_17_16_15_14_13_12_11(instruction);
3027      int64 s_value = extract_s__se11_0_10_9_8_7_6_5_4_3_2_1_0_s1(instruction);
3028  
3029      const char *rt = GPR(rt_value, info);
3030      g_autofree char *s = ADDRESS(s_value, 4, info);
3031  
3032      return img_format("BNEIC %s, 0x%" PRIx64 ", %s", rt, u_value, s);
3033  }
3034  
3035  
3036  /*
3037   *
3038   *
3039   *   3         2         1
3040   *  10987654321098765432109876543210
3041   *  001000               x1110000101
3042   *     rt -----
3043   *          rs -----
3044   *               rd -----
3045   */
3046  static char *BNEZC_16_(uint64 instruction, Dis_info *info)
3047  {
3048      uint64 rt3_value = extract_rt3_9_8_7(instruction);
3049      int64 s_value = extract_s__se7_0_6_5_4_3_2_1_s1(instruction);
3050  
3051      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
3052      g_autofree char *s = ADDRESS(s_value, 2, info);
3053  
3054      return img_format("BNEZC %s, %s", rt3, s);
3055  }
3056  
3057  
3058  /*
3059   * [DSP] BPOSGE32C offset - Branch on greater than or equal to value 32 in
3060   *   DSPControl Pos field
3061   *
3062   *   3         2         1
3063   *  10987654321098765432109876543210
3064   *  100010xxxxx0010001
3065   *            s[13:1] -------------
3066   *                           s[14] -
3067   */
3068  static char *BPOSGE32C(uint64 instruction, Dis_info *info)
3069  {
3070      int64 s_value = extract_s__se14_0_13_to_1_s1(instruction);
3071  
3072      g_autofree char *s = ADDRESS(s_value, 4, info);
3073  
3074      return img_format("BPOSGE32C %s", s);
3075  }
3076  
3077  
3078  /*
3079   *
3080   *
3081   *   3         2         1
3082   *  10987654321098765432109876543210
3083   *  001000               x1110000101
3084   *     rt -----
3085   *          rs -----
3086   *               rd -----
3087   */
3088  static char *BREAK_16_(uint64 instruction, Dis_info *info)
3089  {
3090      uint64 code_value = extract_code_2_1_0(instruction);
3091  
3092  
3093      return img_format("BREAK 0x%" PRIx64, code_value);
3094  }
3095  
3096  
3097  /*
3098   * BREAK code - Break. Cause a Breakpoint exception
3099   *
3100   *   3         2         1
3101   *  10987654321098765432109876543210
3102   *  001000               x1110000101
3103   *     rt -----
3104   *          rs -----
3105   *               rd -----
3106   */
3107  static char *BREAK_32_(uint64 instruction, Dis_info *info)
3108  {
3109      uint64 code_value = extract_code_18_to_0(instruction);
3110  
3111  
3112      return img_format("BREAK 0x%" PRIx64, code_value);
3113  }
3114  
3115  
3116  /*
3117   *
3118   *
3119   *   3         2         1
3120   *  10987654321098765432109876543210
3121   *  001000               x1110000101
3122   *     rt -----
3123   *          rs -----
3124   *               rd -----
3125   */
3126  static char *BRSC(uint64 instruction, Dis_info *info)
3127  {
3128      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3129  
3130      const char *rs = GPR(rs_value, info);
3131  
3132      return img_format("BRSC %s", rs);
3133  }
3134  
3135  
3136  /*
3137   *
3138   *
3139   *   3         2         1
3140   *  10987654321098765432109876543210
3141   *  001000               x1110000101
3142   *     rt -----
3143   *          rs -----
3144   *               rd -----
3145   */
3146  static char *CACHE(uint64 instruction, Dis_info *info)
3147  {
3148      uint64 op_value = extract_op_25_24_23_22_21(instruction);
3149      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3150      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3151  
3152      const char *rs = GPR(rs_value, info);
3153  
3154      return img_format("CACHE 0x%" PRIx64 ", %" PRId64 "(%s)",
3155                        op_value, s_value, rs);
3156  }
3157  
3158  
3159  /*
3160   *
3161   *
3162   *   3         2         1
3163   *  10987654321098765432109876543210
3164   *  001000               x1110000101
3165   *     rt -----
3166   *          rs -----
3167   *               rd -----
3168   */
3169  static char *CACHEE(uint64 instruction, Dis_info *info)
3170  {
3171      uint64 op_value = extract_op_25_24_23_22_21(instruction);
3172      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3173      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
3174  
3175      const char *rs = GPR(rs_value, info);
3176  
3177      return img_format("CACHEE 0x%" PRIx64 ", %" PRId64 "(%s)",
3178                        op_value, s_value, rs);
3179  }
3180  
3181  
3182  /*
3183   *
3184   *
3185   *   3         2         1
3186   *  10987654321098765432109876543210
3187   *  001000               x1110000101
3188   *     rt -----
3189   *          rs -----
3190   *               rd -----
3191   */
3192  static char *CEIL_L_D(uint64 instruction, Dis_info *info)
3193  {
3194      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3195      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3196  
3197      const char *ft = FPR(ft_value, info);
3198      const char *fs = FPR(fs_value, info);
3199  
3200      return img_format("CEIL.L.D %s, %s", ft, fs);
3201  }
3202  
3203  
3204  /*
3205   *
3206   *
3207   *   3         2         1
3208   *  10987654321098765432109876543210
3209   *  001000               x1110000101
3210   *     rt -----
3211   *          rs -----
3212   *               rd -----
3213   */
3214  static char *CEIL_L_S(uint64 instruction, Dis_info *info)
3215  {
3216      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3217      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3218  
3219      const char *ft = FPR(ft_value, info);
3220      const char *fs = FPR(fs_value, info);
3221  
3222      return img_format("CEIL.L.S %s, %s", ft, fs);
3223  }
3224  
3225  
3226  /*
3227   *
3228   *
3229   *   3         2         1
3230   *  10987654321098765432109876543210
3231   *  001000               x1110000101
3232   *     rt -----
3233   *          rs -----
3234   *               rd -----
3235   */
3236  static char *CEIL_W_D(uint64 instruction, Dis_info *info)
3237  {
3238      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3239      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3240  
3241      const char *ft = FPR(ft_value, info);
3242      const char *fs = FPR(fs_value, info);
3243  
3244      return img_format("CEIL.W.D %s, %s", ft, fs);
3245  }
3246  
3247  
3248  /*
3249   *
3250   *
3251   *   3         2         1
3252   *  10987654321098765432109876543210
3253   *  001000               x1110000101
3254   *     rt -----
3255   *          rs -----
3256   *               rd -----
3257   */
3258  static char *CEIL_W_S(uint64 instruction, Dis_info *info)
3259  {
3260      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3261      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3262  
3263      const char *ft = FPR(ft_value, info);
3264      const char *fs = FPR(fs_value, info);
3265  
3266      return img_format("CEIL.W.S %s, %s", ft, fs);
3267  }
3268  
3269  
3270  /*
3271   *
3272   *
3273   *   3         2         1
3274   *  10987654321098765432109876543210
3275   *  001000               x1110000101
3276   *     rt -----
3277   *          rs -----
3278   *               rd -----
3279   */
3280  static char *CFC1(uint64 instruction, Dis_info *info)
3281  {
3282      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3283      uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3284  
3285      const char *rt = GPR(rt_value, info);
3286  
3287      return img_format("CFC1 %s, CP%" PRIu64, rt, cs_value);
3288  }
3289  
3290  
3291  /*
3292   *
3293   *
3294   *   3         2         1
3295   *  10987654321098765432109876543210
3296   *  001000               x1110000101
3297   *     rt -----
3298   *          rs -----
3299   *               rd -----
3300   */
3301  static char *CFC2(uint64 instruction, Dis_info *info)
3302  {
3303      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3304      uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
3305  
3306      const char *rt = GPR(rt_value, info);
3307  
3308      return img_format("CFC2 %s, CP%" PRIu64, rt, cs_value);
3309  }
3310  
3311  
3312  /*
3313   *
3314   *
3315   *   3         2         1
3316   *  10987654321098765432109876543210
3317   *  001000               x1110000101
3318   *     rt -----
3319   *          rs -----
3320   *               rd -----
3321   */
3322  static char *CLASS_D(uint64 instruction, Dis_info *info)
3323  {
3324      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3325      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3326  
3327      const char *ft = FPR(ft_value, info);
3328      const char *fs = FPR(fs_value, info);
3329  
3330      return img_format("CLASS.D %s, %s", ft, fs);
3331  }
3332  
3333  
3334  /*
3335   *
3336   *
3337   *   3         2         1
3338   *  10987654321098765432109876543210
3339   *  001000               x1110000101
3340   *     rt -----
3341   *          rs -----
3342   *               rd -----
3343   */
3344  static char *CLASS_S(uint64 instruction, Dis_info *info)
3345  {
3346      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3347      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3348  
3349      const char *ft = FPR(ft_value, info);
3350      const char *fs = FPR(fs_value, info);
3351  
3352      return img_format("CLASS.S %s, %s", ft, fs);
3353  }
3354  
3355  
3356  /*
3357   *
3358   *
3359   *   3         2         1
3360   *  10987654321098765432109876543210
3361   *  001000               x1110000101
3362   *     rt -----
3363   *          rs -----
3364   *               rd -----
3365   */
3366  static char *CLO(uint64 instruction, Dis_info *info)
3367  {
3368      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3369      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3370  
3371      const char *rt = GPR(rt_value, info);
3372      const char *rs = GPR(rs_value, info);
3373  
3374      return img_format("CLO %s, %s", rt, rs);
3375  }
3376  
3377  
3378  /*
3379   *
3380   *
3381   *   3         2         1
3382   *  10987654321098765432109876543210
3383   *  001000               x1110000101
3384   *     rt -----
3385   *          rs -----
3386   *               rd -----
3387   */
3388  static char *CLZ(uint64 instruction, Dis_info *info)
3389  {
3390      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3391      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3392  
3393      const char *rt = GPR(rt_value, info);
3394      const char *rs = GPR(rs_value, info);
3395  
3396      return img_format("CLZ %s, %s", rt, rs);
3397  }
3398  
3399  
3400  /*
3401   *
3402   *
3403   *   3         2         1
3404   *  10987654321098765432109876543210
3405   *  001000               x1110000101
3406   *     rt -----
3407   *          rs -----
3408   *               rd -----
3409   */
3410  static char *CMP_AF_D(uint64 instruction, Dis_info *info)
3411  {
3412      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3413      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3414      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3415  
3416      const char *fd = FPR(fd_value, info);
3417      const char *fs = FPR(fs_value, info);
3418      const char *ft = FPR(ft_value, info);
3419  
3420      return img_format("CMP.AF.D %s, %s, %s", fd, fs, ft);
3421  }
3422  
3423  
3424  /*
3425   *
3426   *
3427   *   3         2         1
3428   *  10987654321098765432109876543210
3429   *  001000               x1110000101
3430   *     rt -----
3431   *          rs -----
3432   *               rd -----
3433   */
3434  static char *CMP_AF_S(uint64 instruction, Dis_info *info)
3435  {
3436      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3437      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3438      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3439  
3440      const char *fd = FPR(fd_value, info);
3441      const char *fs = FPR(fs_value, info);
3442      const char *ft = FPR(ft_value, info);
3443  
3444      return img_format("CMP.AF.S %s, %s, %s", fd, fs, ft);
3445  }
3446  
3447  
3448  /*
3449   *
3450   *
3451   *   3         2         1
3452   *  10987654321098765432109876543210
3453   *  001000               x1110000101
3454   *     rt -----
3455   *          rs -----
3456   *               rd -----
3457   */
3458  static char *CMP_EQ_D(uint64 instruction, Dis_info *info)
3459  {
3460      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3461      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3462      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3463  
3464      const char *fd = FPR(fd_value, info);
3465      const char *fs = FPR(fs_value, info);
3466      const char *ft = FPR(ft_value, info);
3467  
3468      return img_format("CMP.EQ.D %s, %s, %s", fd, fs, ft);
3469  }
3470  
3471  
3472  /*
3473   * [DSP] CMP.EQ.PH rs, rt - Compare vectors of signed integer halfword values
3474   *
3475   *   3         2         1
3476   *  10987654321098765432109876543210
3477   *  001000          xxxxxx0000000101
3478   *     rt -----
3479   *          rs -----
3480   */
3481  static char *CMP_EQ_PH(uint64 instruction, Dis_info *info)
3482  {
3483      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3484      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3485  
3486      const char *rs = GPR(rs_value, info);
3487      const char *rt = GPR(rt_value, info);
3488  
3489      return img_format("CMP.EQ.PH %s, %s", rs, rt);
3490  }
3491  
3492  
3493  /*
3494   *
3495   *
3496   *   3         2         1
3497   *  10987654321098765432109876543210
3498   *  001000               x1110000101
3499   *     rt -----
3500   *          rs -----
3501   *               rd -----
3502   */
3503  static char *CMP_EQ_S(uint64 instruction, Dis_info *info)
3504  {
3505      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3506      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3507      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3508  
3509      const char *fd = FPR(fd_value, info);
3510      const char *fs = FPR(fs_value, info);
3511      const char *ft = FPR(ft_value, info);
3512  
3513      return img_format("CMP.EQ.S %s, %s, %s", fd, fs, ft);
3514  }
3515  
3516  
3517  /*
3518   *
3519   *
3520   *   3         2         1
3521   *  10987654321098765432109876543210
3522   *  001000               x1110000101
3523   *     rt -----
3524   *          rs -----
3525   *               rd -----
3526   */
3527  static char *CMP_LE_D(uint64 instruction, Dis_info *info)
3528  {
3529      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3530      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3531      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3532  
3533      const char *fd = FPR(fd_value, info);
3534      const char *fs = FPR(fs_value, info);
3535      const char *ft = FPR(ft_value, info);
3536  
3537      return img_format("CMP.LE.D %s, %s, %s", fd, fs, ft);
3538  }
3539  
3540  
3541  /*
3542   * [DSP] CMP.LE.PH rs, rt - Compare vectors of signed integer halfword values
3543   *
3544   *   3         2         1
3545   *  10987654321098765432109876543210
3546   *  001000          xxxxxx0010000101
3547   *     rt -----
3548   *          rs -----
3549   */
3550  static char *CMP_LE_PH(uint64 instruction, Dis_info *info)
3551  {
3552      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3553      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3554  
3555      const char *rs = GPR(rs_value, info);
3556      const char *rt = GPR(rt_value, info);
3557  
3558      return img_format("CMP.LE.PH %s, %s", rs, rt);
3559  }
3560  
3561  
3562  /*
3563   *
3564   *
3565   *   3         2         1
3566   *  10987654321098765432109876543210
3567   *  001000               x1110000101
3568   *     rt -----
3569   *          rs -----
3570   *               rd -----
3571   */
3572  static char *CMP_LE_S(uint64 instruction, Dis_info *info)
3573  {
3574      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3575      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3576      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3577  
3578      const char *fd = FPR(fd_value, info);
3579      const char *fs = FPR(fs_value, info);
3580      const char *ft = FPR(ft_value, info);
3581  
3582      return img_format("CMP.LE.S %s, %s, %s", fd, fs, ft);
3583  }
3584  
3585  
3586  /*
3587   *
3588   *
3589   *   3         2         1
3590   *  10987654321098765432109876543210
3591   *  001000               x1110000101
3592   *     rt -----
3593   *          rs -----
3594   *               rd -----
3595   */
3596  static char *CMP_LT_D(uint64 instruction, Dis_info *info)
3597  {
3598      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3599      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3600      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3601  
3602      const char *fd = FPR(fd_value, info);
3603      const char *fs = FPR(fs_value, info);
3604      const char *ft = FPR(ft_value, info);
3605  
3606      return img_format("CMP.LT.D %s, %s, %s", fd, fs, ft);
3607  }
3608  
3609  
3610  /*
3611   * [DSP] CMP.LT.PH rs, rt - Compare vectors of signed integer halfword values
3612   *
3613   *   3         2         1
3614   *  10987654321098765432109876543210
3615   *  001000          xxxxxx0001000101
3616   *     rt -----
3617   *          rs -----
3618   */
3619  static char *CMP_LT_PH(uint64 instruction, Dis_info *info)
3620  {
3621      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
3622      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
3623  
3624      const char *rs = GPR(rs_value, info);
3625      const char *rt = GPR(rt_value, info);
3626  
3627      return img_format("CMP.LT.PH %s, %s", rs, rt);
3628  }
3629  
3630  
3631  /*
3632   *
3633   *
3634   *   3         2         1
3635   *  10987654321098765432109876543210
3636   *  001000               x1110000101
3637   *     rt -----
3638   *          rs -----
3639   *               rd -----
3640   */
3641  static char *CMP_LT_S(uint64 instruction, Dis_info *info)
3642  {
3643      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3644      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3645      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3646  
3647      const char *fd = FPR(fd_value, info);
3648      const char *fs = FPR(fs_value, info);
3649      const char *ft = FPR(ft_value, info);
3650  
3651      return img_format("CMP.LT.S %s, %s, %s", fd, fs, ft);
3652  }
3653  
3654  
3655  /*
3656   *
3657   *
3658   *   3         2         1
3659   *  10987654321098765432109876543210
3660   *  001000               x1110000101
3661   *     rt -----
3662   *          rs -----
3663   *               rd -----
3664   */
3665  static char *CMP_NE_D(uint64 instruction, Dis_info *info)
3666  {
3667      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3668      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3669      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3670  
3671      const char *fd = FPR(fd_value, info);
3672      const char *fs = FPR(fs_value, info);
3673      const char *ft = FPR(ft_value, info);
3674  
3675      return img_format("CMP.NE.D %s, %s, %s", fd, fs, ft);
3676  }
3677  
3678  
3679  /*
3680   *
3681   *
3682   *   3         2         1
3683   *  10987654321098765432109876543210
3684   *  001000               x1110000101
3685   *     rt -----
3686   *          rs -----
3687   *               rd -----
3688   */
3689  static char *CMP_NE_S(uint64 instruction, Dis_info *info)
3690  {
3691      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3692      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3693      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3694  
3695      const char *fd = FPR(fd_value, info);
3696      const char *fs = FPR(fs_value, info);
3697      const char *ft = FPR(ft_value, info);
3698  
3699      return img_format("CMP.NE.S %s, %s, %s", fd, fs, ft);
3700  }
3701  
3702  
3703  /*
3704   *
3705   *
3706   *   3         2         1
3707   *  10987654321098765432109876543210
3708   *  001000               x1110000101
3709   *     rt -----
3710   *          rs -----
3711   *               rd -----
3712   */
3713  static char *CMP_OR_D(uint64 instruction, Dis_info *info)
3714  {
3715      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3716      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3717      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3718  
3719      const char *fd = FPR(fd_value, info);
3720      const char *fs = FPR(fs_value, info);
3721      const char *ft = FPR(ft_value, info);
3722  
3723      return img_format("CMP.OR.D %s, %s, %s", fd, fs, ft);
3724  }
3725  
3726  
3727  /*
3728   *
3729   *
3730   *   3         2         1
3731   *  10987654321098765432109876543210
3732   *  001000               x1110000101
3733   *     rt -----
3734   *          rs -----
3735   *               rd -----
3736   */
3737  static char *CMP_OR_S(uint64 instruction, Dis_info *info)
3738  {
3739      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3740      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3741      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3742  
3743      const char *fd = FPR(fd_value, info);
3744      const char *fs = FPR(fs_value, info);
3745      const char *ft = FPR(ft_value, info);
3746  
3747      return img_format("CMP.OR.S %s, %s, %s", fd, fs, ft);
3748  }
3749  
3750  
3751  /*
3752   *
3753   *
3754   *   3         2         1
3755   *  10987654321098765432109876543210
3756   *  001000               x1110000101
3757   *     rt -----
3758   *          rs -----
3759   *               rd -----
3760   */
3761  static char *CMP_SAF_D(uint64 instruction, Dis_info *info)
3762  {
3763      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3764      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3765      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3766  
3767      const char *fd = FPR(fd_value, info);
3768      const char *fs = FPR(fs_value, info);
3769      const char *ft = FPR(ft_value, info);
3770  
3771      return img_format("CMP.SAF.D %s, %s, %s", fd, fs, ft);
3772  }
3773  
3774  
3775  /*
3776   *
3777   *
3778   *   3         2         1
3779   *  10987654321098765432109876543210
3780   *  001000               x1110000101
3781   *     rt -----
3782   *          rs -----
3783   *               rd -----
3784   */
3785  static char *CMP_SAF_S(uint64 instruction, Dis_info *info)
3786  {
3787      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3788      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3789      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3790  
3791      const char *fd = FPR(fd_value, info);
3792      const char *fs = FPR(fs_value, info);
3793      const char *ft = FPR(ft_value, info);
3794  
3795      return img_format("CMP.SAF.S %s, %s, %s", fd, fs, ft);
3796  }
3797  
3798  
3799  /*
3800   *
3801   *
3802   *   3         2         1
3803   *  10987654321098765432109876543210
3804   *  001000               x1110000101
3805   *     rt -----
3806   *          rs -----
3807   *               rd -----
3808   */
3809  static char *CMP_SEQ_D(uint64 instruction, Dis_info *info)
3810  {
3811      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3812      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3813      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3814  
3815      const char *fd = FPR(fd_value, info);
3816      const char *fs = FPR(fs_value, info);
3817      const char *ft = FPR(ft_value, info);
3818  
3819      return img_format("CMP.SEQ.D %s, %s, %s", fd, fs, ft);
3820  }
3821  
3822  
3823  /*
3824   *
3825   *
3826   *   3         2         1
3827   *  10987654321098765432109876543210
3828   *  001000               x1110000101
3829   *     rt -----
3830   *          rs -----
3831   *               rd -----
3832   */
3833  static char *CMP_SEQ_S(uint64 instruction, Dis_info *info)
3834  {
3835      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3836      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3837      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3838  
3839      const char *fd = FPR(fd_value, info);
3840      const char *fs = FPR(fs_value, info);
3841      const char *ft = FPR(ft_value, info);
3842  
3843      return img_format("CMP.SEQ.S %s, %s, %s", fd, fs, ft);
3844  }
3845  
3846  
3847  /*
3848   *
3849   *
3850   *   3         2         1
3851   *  10987654321098765432109876543210
3852   *  001000               x1110000101
3853   *     rt -----
3854   *          rs -----
3855   *               rd -----
3856   */
3857  static char *CMP_SLE_D(uint64 instruction, Dis_info *info)
3858  {
3859      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3860      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3861      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3862  
3863      const char *fd = FPR(fd_value, info);
3864      const char *fs = FPR(fs_value, info);
3865      const char *ft = FPR(ft_value, info);
3866  
3867      return img_format("CMP.SLE.D %s, %s, %s", fd, fs, ft);
3868  }
3869  
3870  
3871  /*
3872   *
3873   *
3874   *   3         2         1
3875   *  10987654321098765432109876543210
3876   *  001000               x1110000101
3877   *     rt -----
3878   *          rs -----
3879   *               rd -----
3880   */
3881  static char *CMP_SLE_S(uint64 instruction, Dis_info *info)
3882  {
3883      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3884      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3885      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3886  
3887      const char *fd = FPR(fd_value, info);
3888      const char *fs = FPR(fs_value, info);
3889      const char *ft = FPR(ft_value, info);
3890  
3891      return img_format("CMP.SLE.S %s, %s, %s", fd, fs, ft);
3892  }
3893  
3894  
3895  /*
3896   *
3897   *
3898   *   3         2         1
3899   *  10987654321098765432109876543210
3900   *  001000               x1110000101
3901   *     rt -----
3902   *          rs -----
3903   *               rd -----
3904   */
3905  static char *CMP_SLT_D(uint64 instruction, Dis_info *info)
3906  {
3907      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3908      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3909      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3910  
3911      const char *fd = FPR(fd_value, info);
3912      const char *fs = FPR(fs_value, info);
3913      const char *ft = FPR(ft_value, info);
3914  
3915      return img_format("CMP.SLT.D %s, %s, %s", fd, fs, ft);
3916  }
3917  
3918  
3919  /*
3920   *
3921   *
3922   *   3         2         1
3923   *  10987654321098765432109876543210
3924   *  001000               x1110000101
3925   *     rt -----
3926   *          rs -----
3927   *               rd -----
3928   */
3929  static char *CMP_SLT_S(uint64 instruction, Dis_info *info)
3930  {
3931      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3932      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3933      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3934  
3935      const char *fd = FPR(fd_value, info);
3936      const char *fs = FPR(fs_value, info);
3937      const char *ft = FPR(ft_value, info);
3938  
3939      return img_format("CMP.SLT.S %s, %s, %s", fd, fs, ft);
3940  }
3941  
3942  
3943  /*
3944   *
3945   *
3946   *   3         2         1
3947   *  10987654321098765432109876543210
3948   *  001000               x1110000101
3949   *     rt -----
3950   *          rs -----
3951   *               rd -----
3952   */
3953  static char *CMP_SNE_D(uint64 instruction, Dis_info *info)
3954  {
3955      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3956      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3957      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3958  
3959      const char *fd = FPR(fd_value, info);
3960      const char *fs = FPR(fs_value, info);
3961      const char *ft = FPR(ft_value, info);
3962  
3963      return img_format("CMP.SNE.D %s, %s, %s", fd, fs, ft);
3964  }
3965  
3966  
3967  /*
3968   *
3969   *
3970   *   3         2         1
3971   *  10987654321098765432109876543210
3972   *  001000               x1110000101
3973   *     rt -----
3974   *          rs -----
3975   *               rd -----
3976   */
3977  static char *CMP_SNE_S(uint64 instruction, Dis_info *info)
3978  {
3979      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
3980      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
3981      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
3982  
3983      const char *fd = FPR(fd_value, info);
3984      const char *fs = FPR(fs_value, info);
3985      const char *ft = FPR(ft_value, info);
3986  
3987      return img_format("CMP.SNE.S %s, %s, %s", fd, fs, ft);
3988  }
3989  
3990  
3991  /*
3992   *
3993   *
3994   *   3         2         1
3995   *  10987654321098765432109876543210
3996   *  001000               x1110000101
3997   *     rt -----
3998   *          rs -----
3999   *               rd -----
4000   */
4001  static char *CMP_SOR_D(uint64 instruction, Dis_info *info)
4002  {
4003      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4004      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4005      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4006  
4007      const char *fd = FPR(fd_value, info);
4008      const char *fs = FPR(fs_value, info);
4009      const char *ft = FPR(ft_value, info);
4010  
4011      return img_format("CMP.SOR.D %s, %s, %s", fd, fs, ft);
4012  }
4013  
4014  
4015  /*
4016   *
4017   *
4018   *   3         2         1
4019   *  10987654321098765432109876543210
4020   *  001000               x1110000101
4021   *     rt -----
4022   *          rs -----
4023   *               rd -----
4024   */
4025  static char *CMP_SOR_S(uint64 instruction, Dis_info *info)
4026  {
4027      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4028      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4029      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4030  
4031      const char *fd = FPR(fd_value, info);
4032      const char *fs = FPR(fs_value, info);
4033      const char *ft = FPR(ft_value, info);
4034  
4035      return img_format("CMP.SOR.S %s, %s, %s", fd, fs, ft);
4036  }
4037  
4038  
4039  /*
4040   *
4041   *
4042   *   3         2         1
4043   *  10987654321098765432109876543210
4044   *  001000               x1110000101
4045   *     rt -----
4046   *          rs -----
4047   *               rd -----
4048   */
4049  static char *CMP_SUEQ_D(uint64 instruction, Dis_info *info)
4050  {
4051      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4052      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4053      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4054  
4055      const char *fd = FPR(fd_value, info);
4056      const char *fs = FPR(fs_value, info);
4057      const char *ft = FPR(ft_value, info);
4058  
4059      return img_format("CMP.SUEQ.D %s, %s, %s", fd, fs, ft);
4060  }
4061  
4062  
4063  /*
4064   *
4065   *
4066   *   3         2         1
4067   *  10987654321098765432109876543210
4068   *  001000               x1110000101
4069   *     rt -----
4070   *          rs -----
4071   *               rd -----
4072   */
4073  static char *CMP_SUEQ_S(uint64 instruction, Dis_info *info)
4074  {
4075      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4076      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4077      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4078  
4079      const char *fd = FPR(fd_value, info);
4080      const char *fs = FPR(fs_value, info);
4081      const char *ft = FPR(ft_value, info);
4082  
4083      return img_format("CMP.SUEQ.S %s, %s, %s", fd, fs, ft);
4084  }
4085  
4086  
4087  /*
4088   *
4089   *
4090   *   3         2         1
4091   *  10987654321098765432109876543210
4092   *  001000               x1110000101
4093   *     rt -----
4094   *          rs -----
4095   *               rd -----
4096   */
4097  static char *CMP_SULE_D(uint64 instruction, Dis_info *info)
4098  {
4099      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4100      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4101      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4102  
4103      const char *fd = FPR(fd_value, info);
4104      const char *fs = FPR(fs_value, info);
4105      const char *ft = FPR(ft_value, info);
4106  
4107      return img_format("CMP.SULE.D %s, %s, %s", fd, fs, ft);
4108  }
4109  
4110  
4111  /*
4112   *
4113   *
4114   *   3         2         1
4115   *  10987654321098765432109876543210
4116   *  001000               x1110000101
4117   *     rt -----
4118   *          rs -----
4119   *               rd -----
4120   */
4121  static char *CMP_SULE_S(uint64 instruction, Dis_info *info)
4122  {
4123      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4124      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4125      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4126  
4127      const char *fd = FPR(fd_value, info);
4128      const char *fs = FPR(fs_value, info);
4129      const char *ft = FPR(ft_value, info);
4130  
4131      return img_format("CMP.SULE.S %s, %s, %s", fd, fs, ft);
4132  }
4133  
4134  
4135  /*
4136   *
4137   *
4138   *   3         2         1
4139   *  10987654321098765432109876543210
4140   *  001000               x1110000101
4141   *     rt -----
4142   *          rs -----
4143   *               rd -----
4144   */
4145  static char *CMP_SULT_D(uint64 instruction, Dis_info *info)
4146  {
4147      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4148      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4149      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4150  
4151      const char *fd = FPR(fd_value, info);
4152      const char *fs = FPR(fs_value, info);
4153      const char *ft = FPR(ft_value, info);
4154  
4155      return img_format("CMP.SULT.D %s, %s, %s", fd, fs, ft);
4156  }
4157  
4158  
4159  /*
4160   *
4161   *
4162   *   3         2         1
4163   *  10987654321098765432109876543210
4164   *  001000               x1110000101
4165   *     rt -----
4166   *          rs -----
4167   *               rd -----
4168   */
4169  static char *CMP_SULT_S(uint64 instruction, Dis_info *info)
4170  {
4171      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4172      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4173      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4174  
4175      const char *fd = FPR(fd_value, info);
4176      const char *fs = FPR(fs_value, info);
4177      const char *ft = FPR(ft_value, info);
4178  
4179      return img_format("CMP.SULT.S %s, %s, %s", fd, fs, ft);
4180  }
4181  
4182  
4183  /*
4184   *
4185   *
4186   *   3         2         1
4187   *  10987654321098765432109876543210
4188   *  001000               x1110000101
4189   *     rt -----
4190   *          rs -----
4191   *               rd -----
4192   */
4193  static char *CMP_SUN_D(uint64 instruction, Dis_info *info)
4194  {
4195      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4196      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4197      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4198  
4199      const char *fd = FPR(fd_value, info);
4200      const char *fs = FPR(fs_value, info);
4201      const char *ft = FPR(ft_value, info);
4202  
4203      return img_format("CMP.SUN.D %s, %s, %s", fd, fs, ft);
4204  }
4205  
4206  
4207  /*
4208   *
4209   *
4210   *   3         2         1
4211   *  10987654321098765432109876543210
4212   *  001000               x1110000101
4213   *     rt -----
4214   *          rs -----
4215   *               rd -----
4216   */
4217  static char *CMP_SUNE_D(uint64 instruction, Dis_info *info)
4218  {
4219      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4220      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4221      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4222  
4223      const char *fd = FPR(fd_value, info);
4224      const char *fs = FPR(fs_value, info);
4225      const char *ft = FPR(ft_value, info);
4226  
4227      return img_format("CMP.SUNE.D %s, %s, %s", fd, fs, ft);
4228  }
4229  
4230  
4231  /*
4232   *
4233   *
4234   *   3         2         1
4235   *  10987654321098765432109876543210
4236   *  001000               x1110000101
4237   *     rt -----
4238   *          rs -----
4239   *               rd -----
4240   */
4241  static char *CMP_SUNE_S(uint64 instruction, Dis_info *info)
4242  {
4243      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4244      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4245      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4246  
4247      const char *fd = FPR(fd_value, info);
4248      const char *fs = FPR(fs_value, info);
4249      const char *ft = FPR(ft_value, info);
4250  
4251      return img_format("CMP.SUNE.S %s, %s, %s", fd, fs, ft);
4252  }
4253  
4254  
4255  /*
4256   *
4257   *
4258   *   3         2         1
4259   *  10987654321098765432109876543210
4260   *  001000               x1110000101
4261   *     rt -----
4262   *          rs -----
4263   *               rd -----
4264   */
4265  static char *CMP_SUN_S(uint64 instruction, Dis_info *info)
4266  {
4267      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4268      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4269      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4270  
4271      const char *fd = FPR(fd_value, info);
4272      const char *fs = FPR(fs_value, info);
4273      const char *ft = FPR(ft_value, info);
4274  
4275      return img_format("CMP.SUN.S %s, %s, %s", fd, fs, ft);
4276  }
4277  
4278  
4279  /*
4280   *
4281   *
4282   *   3         2         1
4283   *  10987654321098765432109876543210
4284   *  001000               x1110000101
4285   *     rt -----
4286   *          rs -----
4287   *               rd -----
4288   */
4289  static char *CMP_UEQ_D(uint64 instruction, Dis_info *info)
4290  {
4291      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4292      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4293      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4294  
4295      const char *fd = FPR(fd_value, info);
4296      const char *fs = FPR(fs_value, info);
4297      const char *ft = FPR(ft_value, info);
4298  
4299      return img_format("CMP.UEQ.D %s, %s, %s", fd, fs, ft);
4300  }
4301  
4302  
4303  /*
4304   *
4305   *
4306   *   3         2         1
4307   *  10987654321098765432109876543210
4308   *  001000               x1110000101
4309   *     rt -----
4310   *          rs -----
4311   *               rd -----
4312   */
4313  static char *CMP_UEQ_S(uint64 instruction, Dis_info *info)
4314  {
4315      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4316      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4317      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4318  
4319      const char *fd = FPR(fd_value, info);
4320      const char *fs = FPR(fs_value, info);
4321      const char *ft = FPR(ft_value, info);
4322  
4323      return img_format("CMP.UEQ.S %s, %s, %s", fd, fs, ft);
4324  }
4325  
4326  
4327  /*
4328   *
4329   *
4330   *   3         2         1
4331   *  10987654321098765432109876543210
4332   *  001000               x1110000101
4333   *     rt -----
4334   *          rs -----
4335   *               rd -----
4336   */
4337  static char *CMP_ULE_D(uint64 instruction, Dis_info *info)
4338  {
4339      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4340      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4341      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4342  
4343      const char *fd = FPR(fd_value, info);
4344      const char *fs = FPR(fs_value, info);
4345      const char *ft = FPR(ft_value, info);
4346  
4347      return img_format("CMP.ULE.D %s, %s, %s", fd, fs, ft);
4348  }
4349  
4350  
4351  /*
4352   *
4353   *
4354   *   3         2         1
4355   *  10987654321098765432109876543210
4356   *  001000               x1110000101
4357   *     rt -----
4358   *          rs -----
4359   *               rd -----
4360   */
4361  static char *CMP_ULE_S(uint64 instruction, Dis_info *info)
4362  {
4363      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4364      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4365      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4366  
4367      const char *fd = FPR(fd_value, info);
4368      const char *fs = FPR(fs_value, info);
4369      const char *ft = FPR(ft_value, info);
4370  
4371      return img_format("CMP.ULE.S %s, %s, %s", fd, fs, ft);
4372  }
4373  
4374  
4375  /*
4376   *
4377   *
4378   *   3         2         1
4379   *  10987654321098765432109876543210
4380   *  001000               x1110000101
4381   *     rt -----
4382   *          rs -----
4383   *               rd -----
4384   */
4385  static char *CMP_ULT_D(uint64 instruction, Dis_info *info)
4386  {
4387      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4388      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4389      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4390  
4391      const char *fd = FPR(fd_value, info);
4392      const char *fs = FPR(fs_value, info);
4393      const char *ft = FPR(ft_value, info);
4394  
4395      return img_format("CMP.ULT.D %s, %s, %s", fd, fs, ft);
4396  }
4397  
4398  
4399  /*
4400   *
4401   *
4402   *   3         2         1
4403   *  10987654321098765432109876543210
4404   *  001000               x1110000101
4405   *     rt -----
4406   *          rs -----
4407   *               rd -----
4408   */
4409  static char *CMP_ULT_S(uint64 instruction, Dis_info *info)
4410  {
4411      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4412      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4413      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4414  
4415      const char *fd = FPR(fd_value, info);
4416      const char *fs = FPR(fs_value, info);
4417      const char *ft = FPR(ft_value, info);
4418  
4419      return img_format("CMP.ULT.S %s, %s, %s", fd, fs, ft);
4420  }
4421  
4422  
4423  /*
4424   *
4425   *
4426   *   3         2         1
4427   *  10987654321098765432109876543210
4428   *  001000               x1110000101
4429   *     rt -----
4430   *          rs -----
4431   *               rd -----
4432   */
4433  static char *CMP_UN_D(uint64 instruction, Dis_info *info)
4434  {
4435      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4436      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4437      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4438  
4439      const char *fd = FPR(fd_value, info);
4440      const char *fs = FPR(fs_value, info);
4441      const char *ft = FPR(ft_value, info);
4442  
4443      return img_format("CMP.UN.D %s, %s, %s", fd, fs, ft);
4444  }
4445  
4446  
4447  /*
4448   *
4449   *
4450   *   3         2         1
4451   *  10987654321098765432109876543210
4452   *  001000               x1110000101
4453   *     rt -----
4454   *          rs -----
4455   *               rd -----
4456   */
4457  static char *CMP_UNE_D(uint64 instruction, Dis_info *info)
4458  {
4459      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4460      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4461      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4462  
4463      const char *fd = FPR(fd_value, info);
4464      const char *fs = FPR(fs_value, info);
4465      const char *ft = FPR(ft_value, info);
4466  
4467      return img_format("CMP.UNE.D %s, %s, %s", fd, fs, ft);
4468  }
4469  
4470  
4471  /*
4472   *
4473   *
4474   *   3         2         1
4475   *  10987654321098765432109876543210
4476   *  001000               x1110000101
4477   *     rt -----
4478   *          rs -----
4479   *               rd -----
4480   */
4481  static char *CMP_UNE_S(uint64 instruction, Dis_info *info)
4482  {
4483      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4484      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4485      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4486  
4487      const char *fd = FPR(fd_value, info);
4488      const char *fs = FPR(fs_value, info);
4489      const char *ft = FPR(ft_value, info);
4490  
4491      return img_format("CMP.UNE.S %s, %s, %s", fd, fs, ft);
4492  }
4493  
4494  
4495  /*
4496   *
4497   *
4498   *   3         2         1
4499   *  10987654321098765432109876543210
4500   *  001000               x1110000101
4501   *     rt -----
4502   *          rs -----
4503   *               rd -----
4504   */
4505  static char *CMP_UN_S(uint64 instruction, Dis_info *info)
4506  {
4507      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4508      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4509      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
4510  
4511      const char *fd = FPR(fd_value, info);
4512      const char *fs = FPR(fs_value, info);
4513      const char *ft = FPR(ft_value, info);
4514  
4515      return img_format("CMP.UN.S %s, %s, %s", fd, fs, ft);
4516  }
4517  
4518  
4519  /*
4520   * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4521   *   four bytes and write result to GPR and DSPControl
4522   *
4523   *   3         2         1
4524   *  10987654321098765432109876543210
4525   *  001000               x0110000101
4526   *     rt -----
4527   *          rs -----
4528   *               rd -----
4529   */
4530  static char *CMPGDU_EQ_QB(uint64 instruction, Dis_info *info)
4531  {
4532      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4533      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4534      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4535  
4536      const char *rd = GPR(rd_value, info);
4537      const char *rs = GPR(rs_value, info);
4538      const char *rt = GPR(rt_value, info);
4539  
4540      return img_format("CMPGDU.EQ.QB %s, %s, %s", rd, rs, rt);
4541  }
4542  
4543  
4544  /*
4545   * [DSP] CMPGDU.LE.QB rd, rs, rt - Compare unsigned vector of
4546   *   four bytes and write result to GPR and DSPControl
4547   *
4548   *   3         2         1
4549   *  10987654321098765432109876543210
4550   *  001000               x1000000101
4551   *     rt -----
4552   *          rs -----
4553   *               rd -----
4554   */
4555  static char *CMPGDU_LE_QB(uint64 instruction, Dis_info *info)
4556  {
4557      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4558      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4559      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4560  
4561      const char *rd = GPR(rd_value, info);
4562      const char *rs = GPR(rs_value, info);
4563      const char *rt = GPR(rt_value, info);
4564  
4565      return img_format("CMPGDU.LE.QB %s, %s, %s", rd, rs, rt);
4566  }
4567  
4568  
4569  /*
4570   * [DSP] CMPGDU.EQ.QB rd, rs, rt - Compare unsigned vector of
4571   *   four bytes and write result to GPR and DSPControl
4572   *
4573   *   3         2         1
4574   *  10987654321098765432109876543210
4575   *  001000               x0111000101
4576   *     rt -----
4577   *          rs -----
4578   *               rd -----
4579   */
4580  static char *CMPGDU_LT_QB(uint64 instruction, Dis_info *info)
4581  {
4582      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4583      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4584      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4585  
4586      const char *rd = GPR(rd_value, info);
4587      const char *rs = GPR(rs_value, info);
4588      const char *rt = GPR(rt_value, info);
4589  
4590      return img_format("CMPGDU.LT.QB %s, %s, %s", rd, rs, rt);
4591  }
4592  
4593  
4594  /*
4595   * [DSP] CMPGU.EQ.QB rd, rs, rt - Compare vectors of unsigned
4596   *   byte values and write result to a GPR
4597   *
4598   *   3         2         1
4599   *  10987654321098765432109876543210
4600   *  001000               x0011000101
4601   *     rt -----
4602   *          rs -----
4603   *               rd -----
4604   */
4605  static char *CMPGU_EQ_QB(uint64 instruction, Dis_info *info)
4606  {
4607      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4608      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4609      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4610  
4611      const char *rd = GPR(rd_value, info);
4612      const char *rs = GPR(rs_value, info);
4613      const char *rt = GPR(rt_value, info);
4614  
4615      return img_format("CMPGU.EQ.QB %s, %s, %s", rd, rs, rt);
4616  }
4617  
4618  
4619  /*
4620   * [DSP] CMPGU.LE.QB rd, rs, rt - Compare vectors of unsigned
4621   *   byte values and write result to a GPR
4622   *
4623   *   3         2         1
4624   *  10987654321098765432109876543210
4625   *  001000               x0101000101
4626   *     rt -----
4627   *          rs -----
4628   *               rd -----
4629   */
4630  static char *CMPGU_LE_QB(uint64 instruction, Dis_info *info)
4631  {
4632      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4633      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4634      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4635  
4636      const char *rd = GPR(rd_value, info);
4637      const char *rs = GPR(rs_value, info);
4638      const char *rt = GPR(rt_value, info);
4639  
4640      return img_format("CMPGU.LE.QB %s, %s, %s", rd, rs, rt);
4641  }
4642  
4643  
4644  /*
4645   * [DSP] CMPGU.LT.QB rd, rs, rt - Compare vectors of unsigned
4646   *   byte values and write result to a GPR
4647   *
4648   *   3         2         1
4649   *  10987654321098765432109876543210
4650   *  001000               x0100000101
4651   *     rt -----
4652   *          rs -----
4653   *               rd -----
4654   */
4655  static char *CMPGU_LT_QB(uint64 instruction, Dis_info *info)
4656  {
4657      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4658      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4659      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
4660  
4661      const char *rd = GPR(rd_value, info);
4662      const char *rs = GPR(rs_value, info);
4663      const char *rt = GPR(rt_value, info);
4664  
4665      return img_format("CMPGU.LT.QB %s, %s, %s", rd, rs, rt);
4666  }
4667  
4668  
4669  /*
4670   * [DSP] CMPU.EQ.QB rd, rs, rt - Compare vectors of unsigned
4671   *   byte values
4672   *
4673   *   3         2         1
4674   *  10987654321098765432109876543210
4675   *  001000          xxxxxx1001000101
4676   *     rt -----
4677   *          rs -----
4678   */
4679  static char *CMPU_EQ_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  
4684      const char *rs = GPR(rs_value, info);
4685      const char *rt = GPR(rt_value, info);
4686  
4687      return img_format("CMPU.EQ.QB %s, %s", rs, rt);
4688  }
4689  
4690  
4691  /*
4692   * [DSP] CMPU.LE.QB rd, rs, rt - Compare vectors of unsigned
4693   *   byte values
4694   *
4695   *   3         2         1
4696   *  10987654321098765432109876543210
4697   *  001000          xxxxxx1011000101
4698   *     rt -----
4699   *          rs -----
4700   */
4701  static char *CMPU_LE_QB(uint64 instruction, Dis_info *info)
4702  {
4703      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4704      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4705  
4706      const char *rs = GPR(rs_value, info);
4707      const char *rt = GPR(rt_value, info);
4708  
4709      return img_format("CMPU.LE.QB %s, %s", rs, rt);
4710  }
4711  
4712  
4713  /*
4714   * [DSP] CMPU.LT.QB rd, rs, rt - Compare vectors of unsigned
4715   *   byte values
4716   *
4717   *   3         2         1
4718   *  10987654321098765432109876543210
4719   *  001000          xxxxxx1010000101
4720   *     rt -----
4721   *          rs -----
4722   */
4723  static char *CMPU_LT_QB(uint64 instruction, Dis_info *info)
4724  {
4725      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4726      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
4727  
4728      const char *rs = GPR(rs_value, info);
4729      const char *rt = GPR(rt_value, info);
4730  
4731      return img_format("CMPU.LT.QB %s, %s", rs, rt);
4732  }
4733  
4734  
4735  /*
4736   *
4737   *
4738   *   3         2         1
4739   *  10987654321098765432109876543210
4740   *  001000               x1110000101
4741   *     rt -----
4742   *          rs -----
4743   *               rd -----
4744   */
4745  static char *COP2_1(uint64 instruction, Dis_info *info)
4746  {
4747      uint64 cofun_value = extract_cofun_25_24_23(instruction);
4748  
4749  
4750      return img_format("COP2_1 0x%" PRIx64, cofun_value);
4751  }
4752  
4753  
4754  /*
4755   *
4756   *
4757   *   3         2         1
4758   *  10987654321098765432109876543210
4759   *  001000               x1110000101
4760   *     rt -----
4761   *          rs -----
4762   *               rd -----
4763   */
4764  static char *CTC1(uint64 instruction, Dis_info *info)
4765  {
4766      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4767      uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
4768  
4769      const char *rt = GPR(rt_value, info);
4770  
4771      return img_format("CTC1 %s, CP%" PRIu64, rt, cs_value);
4772  }
4773  
4774  
4775  /*
4776   *
4777   *
4778   *   3         2         1
4779   *  10987654321098765432109876543210
4780   *  001000               x1110000101
4781   *     rt -----
4782   *          rs -----
4783   *               rd -----
4784   */
4785  static char *CTC2(uint64 instruction, Dis_info *info)
4786  {
4787      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
4788      uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
4789  
4790      const char *rt = GPR(rt_value, info);
4791  
4792      return img_format("CTC2 %s, CP%" PRIu64, rt, cs_value);
4793  }
4794  
4795  
4796  /*
4797   *
4798   *
4799   *   3         2         1
4800   *  10987654321098765432109876543210
4801   *  001000               x1110000101
4802   *     rt -----
4803   *          rs -----
4804   *               rd -----
4805   */
4806  static char *CVT_D_L(uint64 instruction, Dis_info *info)
4807  {
4808      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4809      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4810  
4811      const char *ft = FPR(ft_value, info);
4812      const char *fs = FPR(fs_value, info);
4813  
4814      return img_format("CVT.D.L %s, %s", ft, fs);
4815  }
4816  
4817  
4818  /*
4819   *
4820   *
4821   *   3         2         1
4822   *  10987654321098765432109876543210
4823   *  001000               x1110000101
4824   *     rt -----
4825   *          rs -----
4826   *               rd -----
4827   */
4828  static char *CVT_D_S(uint64 instruction, Dis_info *info)
4829  {
4830      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4831      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4832  
4833      const char *ft = FPR(ft_value, info);
4834      const char *fs = FPR(fs_value, info);
4835  
4836      return img_format("CVT.D.S %s, %s", ft, fs);
4837  }
4838  
4839  
4840  /*
4841   *
4842   *
4843   *   3         2         1
4844   *  10987654321098765432109876543210
4845   *  001000               x1110000101
4846   *     rt -----
4847   *          rs -----
4848   *               rd -----
4849   */
4850  static char *CVT_D_W(uint64 instruction, Dis_info *info)
4851  {
4852      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4853      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4854  
4855      const char *ft = FPR(ft_value, info);
4856      const char *fs = FPR(fs_value, info);
4857  
4858      return img_format("CVT.D.W %s, %s", ft, fs);
4859  }
4860  
4861  
4862  /*
4863   *
4864   *
4865   *   3         2         1
4866   *  10987654321098765432109876543210
4867   *  001000               x1110000101
4868   *     rt -----
4869   *          rs -----
4870   *               rd -----
4871   */
4872  static char *CVT_L_D(uint64 instruction, Dis_info *info)
4873  {
4874      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4875      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4876  
4877      const char *ft = FPR(ft_value, info);
4878      const char *fs = FPR(fs_value, info);
4879  
4880      return img_format("CVT.L.D %s, %s", ft, fs);
4881  }
4882  
4883  
4884  /*
4885   *
4886   *
4887   *   3         2         1
4888   *  10987654321098765432109876543210
4889   *  001000               x1110000101
4890   *     rt -----
4891   *          rs -----
4892   *               rd -----
4893   */
4894  static char *CVT_L_S(uint64 instruction, Dis_info *info)
4895  {
4896      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4897      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4898  
4899      const char *ft = FPR(ft_value, info);
4900      const char *fs = FPR(fs_value, info);
4901  
4902      return img_format("CVT.L.S %s, %s", ft, fs);
4903  }
4904  
4905  
4906  /*
4907   *
4908   *
4909   *   3         2         1
4910   *  10987654321098765432109876543210
4911   *  001000               x1110000101
4912   *     rt -----
4913   *          rs -----
4914   *               rd -----
4915   */
4916  static char *CVT_S_D(uint64 instruction, Dis_info *info)
4917  {
4918      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4919      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4920  
4921      const char *ft = FPR(ft_value, info);
4922      const char *fs = FPR(fs_value, info);
4923  
4924      return img_format("CVT.S.D %s, %s", ft, fs);
4925  }
4926  
4927  
4928  /*
4929   *
4930   *
4931   *   3         2         1
4932   *  10987654321098765432109876543210
4933   *  001000               x1110000101
4934   *     rt -----
4935   *          rs -----
4936   *               rd -----
4937   */
4938  static char *CVT_S_L(uint64 instruction, Dis_info *info)
4939  {
4940      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4941      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4942  
4943      const char *ft = FPR(ft_value, info);
4944      const char *fs = FPR(fs_value, info);
4945  
4946      return img_format("CVT.S.L %s, %s", ft, fs);
4947  }
4948  
4949  
4950  /*
4951   *
4952   *
4953   *   3         2         1
4954   *  10987654321098765432109876543210
4955   *  001000               x1110000101
4956   *     rt -----
4957   *          rs -----
4958   *               rd -----
4959   */
4960  static char *CVT_S_PL(uint64 instruction, Dis_info *info)
4961  {
4962      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4963      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4964  
4965      const char *ft = FPR(ft_value, info);
4966      const char *fs = FPR(fs_value, info);
4967  
4968      return img_format("CVT.S.PL %s, %s", ft, fs);
4969  }
4970  
4971  
4972  /*
4973   *
4974   *
4975   *   3         2         1
4976   *  10987654321098765432109876543210
4977   *  001000               x1110000101
4978   *     rt -----
4979   *          rs -----
4980   *               rd -----
4981   */
4982  static char *CVT_S_PU(uint64 instruction, Dis_info *info)
4983  {
4984      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
4985      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
4986  
4987      const char *ft = FPR(ft_value, info);
4988      const char *fs = FPR(fs_value, info);
4989  
4990      return img_format("CVT.S.PU %s, %s", ft, fs);
4991  }
4992  
4993  
4994  /*
4995   *
4996   *
4997   *   3         2         1
4998   *  10987654321098765432109876543210
4999   *  001000               x1110000101
5000   *     rt -----
5001   *          rs -----
5002   *               rd -----
5003   */
5004  static char *CVT_S_W(uint64 instruction, Dis_info *info)
5005  {
5006      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5007      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5008  
5009      const char *ft = FPR(ft_value, info);
5010      const char *fs = FPR(fs_value, info);
5011  
5012      return img_format("CVT.S.W %s, %s", ft, fs);
5013  }
5014  
5015  
5016  /*
5017   *
5018   *
5019   *   3         2         1
5020   *  10987654321098765432109876543210
5021   *  001000               x1110000101
5022   *     rt -----
5023   *          rs -----
5024   *               rd -----
5025   */
5026  static char *CVT_W_D(uint64 instruction, Dis_info *info)
5027  {
5028      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5029      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5030  
5031      const char *ft = FPR(ft_value, info);
5032      const char *fs = FPR(fs_value, info);
5033  
5034      return img_format("CVT.W.D %s, %s", ft, fs);
5035  }
5036  
5037  
5038  /*
5039   *
5040   *
5041   *   3         2         1
5042   *  10987654321098765432109876543210
5043   *  001000               x1110000101
5044   *     rt -----
5045   *          rs -----
5046   *               rd -----
5047   */
5048  static char *CVT_W_S(uint64 instruction, Dis_info *info)
5049  {
5050      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5051      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5052  
5053      const char *ft = FPR(ft_value, info);
5054      const char *fs = FPR(fs_value, info);
5055  
5056      return img_format("CVT.W.S %s, %s", ft, fs);
5057  }
5058  
5059  
5060  /*
5061   *
5062   *
5063   *   3         2         1
5064   *  10987654321098765432109876543210
5065   *  001000               x1110000101
5066   *     rt -----
5067   *          rs -----
5068   *               rd -----
5069   */
5070  static char *DADDIU_48_(uint64 instruction, Dis_info *info)
5071  {
5072      uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
5073      int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
5074  
5075      const char *rt = GPR(rt_value, info);
5076  
5077      return img_format("DADDIU %s, %" PRId64, rt, s_value);
5078  }
5079  
5080  
5081  /*
5082   *
5083   *
5084   *   3         2         1
5085   *  10987654321098765432109876543210
5086   *  001000               x1110000101
5087   *     rt -----
5088   *          rs -----
5089   *               rd -----
5090   */
5091  static char *DADDIU_NEG_(uint64 instruction, Dis_info *info)
5092  {
5093      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5094      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5095      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5096  
5097      const char *rt = GPR(rt_value, info);
5098      const char *rs = GPR(rs_value, info);
5099      int64 u = neg_copy(u_value);
5100  
5101      return img_format("DADDIU %s, %s, %" PRId64, rt, rs, u);
5102  }
5103  
5104  
5105  /*
5106   *
5107   *
5108   *   3         2         1
5109   *  10987654321098765432109876543210
5110   *  001000               x1110000101
5111   *     rt -----
5112   *          rs -----
5113   *               rd -----
5114   */
5115  static char *DADDIU_U12_(uint64 instruction, Dis_info *info)
5116  {
5117      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5118      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5119      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
5120  
5121      const char *rt = GPR(rt_value, info);
5122      const char *rs = GPR(rs_value, info);
5123  
5124      return img_format("DADDIU %s, %s, 0x%" PRIx64, rt, rs, u_value);
5125  }
5126  
5127  
5128  /*
5129   *
5130   *
5131   *   3         2         1
5132   *  10987654321098765432109876543210
5133   *  001000               x1110000101
5134   *     rt -----
5135   *          rs -----
5136   *               rd -----
5137   */
5138  static char *DADD(uint64 instruction, Dis_info *info)
5139  {
5140      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5141      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5142      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5143  
5144      const char *rd = GPR(rd_value, info);
5145      const char *rs = GPR(rs_value, info);
5146      const char *rt = GPR(rt_value, info);
5147  
5148      return img_format("DADD %s, %s, %s", rd, rs, rt);
5149  }
5150  
5151  
5152  /*
5153   *
5154   *
5155   *   3         2         1
5156   *  10987654321098765432109876543210
5157   *  001000               x1110000101
5158   *     rt -----
5159   *          rs -----
5160   *               rd -----
5161   */
5162  static char *DADDU(uint64 instruction, Dis_info *info)
5163  {
5164      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5165      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5166      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5167  
5168      const char *rd = GPR(rd_value, info);
5169      const char *rs = GPR(rs_value, info);
5170      const char *rt = GPR(rt_value, info);
5171  
5172      return img_format("DADDU %s, %s, %s", rd, rs, rt);
5173  }
5174  
5175  
5176  /*
5177   *
5178   *
5179   *   3         2         1
5180   *  10987654321098765432109876543210
5181   *  001000               x1110000101
5182   *     rt -----
5183   *          rs -----
5184   *               rd -----
5185   */
5186  static char *DCLO(uint64 instruction, Dis_info *info)
5187  {
5188      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5189      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5190  
5191      const char *rt = GPR(rt_value, info);
5192      const char *rs = GPR(rs_value, info);
5193  
5194      return img_format("DCLO %s, %s", rt, rs);
5195  }
5196  
5197  
5198  /*
5199   *
5200   *
5201   *   3         2         1
5202   *  10987654321098765432109876543210
5203   *  001000               x1110000101
5204   *     rt -----
5205   *          rs -----
5206   *               rd -----
5207   */
5208  static char *DCLZ(uint64 instruction, Dis_info *info)
5209  {
5210      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5211      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5212  
5213      const char *rt = GPR(rt_value, info);
5214      const char *rs = GPR(rs_value, info);
5215  
5216      return img_format("DCLZ %s, %s", rt, rs);
5217  }
5218  
5219  
5220  /*
5221   *
5222   *
5223   *   3         2         1
5224   *  10987654321098765432109876543210
5225   *  001000               x1110000101
5226   *     rt -----
5227   *          rs -----
5228   *               rd -----
5229   */
5230  static char *DDIV(uint64 instruction, Dis_info *info)
5231  {
5232      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5233      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5234      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5235  
5236      const char *rd = GPR(rd_value, info);
5237      const char *rs = GPR(rs_value, info);
5238      const char *rt = GPR(rt_value, info);
5239  
5240      return img_format("DDIV %s, %s, %s", rd, rs, rt);
5241  }
5242  
5243  
5244  /*
5245   *
5246   *
5247   *   3         2         1
5248   *  10987654321098765432109876543210
5249   *  001000               x1110000101
5250   *     rt -----
5251   *          rs -----
5252   *               rd -----
5253   */
5254  static char *DDIVU(uint64 instruction, Dis_info *info)
5255  {
5256      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5257      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5258      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5259  
5260      const char *rd = GPR(rd_value, info);
5261      const char *rs = GPR(rs_value, info);
5262      const char *rt = GPR(rt_value, info);
5263  
5264      return img_format("DDIVU %s, %s, %s", rd, rs, rt);
5265  }
5266  
5267  
5268  /*
5269   *
5270   *
5271   *   3         2         1
5272   *  10987654321098765432109876543210
5273   *  001000               x1110000101
5274   *     rt -----
5275   *          rs -----
5276   *               rd -----
5277   */
5278  static char *DERET(uint64 instruction, Dis_info *info)
5279  {
5280      (void)instruction;
5281  
5282      return g_strdup("DERET ");
5283  }
5284  
5285  
5286  /*
5287   *
5288   *
5289   *   3         2         1
5290   *  10987654321098765432109876543210
5291   *  001000               x1110000101
5292   *     rt -----
5293   *          rs -----
5294   *               rd -----
5295   */
5296  static char *DEXTM(uint64 instruction, Dis_info *info)
5297  {
5298      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5299      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5300      uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5301      uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5302  
5303      const char *rt = GPR(rt_value, info);
5304      const char *rs = GPR(rs_value, info);
5305      uint64 msbd = encode_msbd_from_size(msbd_value);
5306  
5307      return img_format("DEXTM %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5308                        rt, rs, lsb_value, msbd);
5309  }
5310  
5311  
5312  /*
5313   *
5314   *
5315   *   3         2         1
5316   *  10987654321098765432109876543210
5317   *  001000               x1110000101
5318   *     rt -----
5319   *          rs -----
5320   *               rd -----
5321   */
5322  static char *DEXT(uint64 instruction, Dis_info *info)
5323  {
5324      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5325      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5326      uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5327      uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5328  
5329      const char *rt = GPR(rt_value, info);
5330      const char *rs = GPR(rs_value, info);
5331      uint64 msbd = encode_msbd_from_size(msbd_value);
5332  
5333      return img_format("DEXT %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5334                        rt, rs, lsb_value, msbd);
5335  }
5336  
5337  
5338  /*
5339   *
5340   *
5341   *   3         2         1
5342   *  10987654321098765432109876543210
5343   *  001000               x1110000101
5344   *     rt -----
5345   *          rs -----
5346   *               rd -----
5347   */
5348  static char *DEXTU(uint64 instruction, Dis_info *info)
5349  {
5350      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5351      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5352      uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5353      uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5354  
5355      const char *rt = GPR(rt_value, info);
5356      const char *rs = GPR(rs_value, info);
5357      uint64 msbd = encode_msbd_from_size(msbd_value);
5358  
5359      return img_format("DEXTU %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5360                        rt, rs, lsb_value, msbd);
5361  }
5362  
5363  
5364  /*
5365   *
5366   *
5367   *   3         2         1
5368   *  10987654321098765432109876543210
5369   *  001000               x1110000101
5370   *     rt -----
5371   *          rs -----
5372   *               rd -----
5373   */
5374  static char *DINSM(uint64 instruction, Dis_info *info)
5375  {
5376      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5377      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5378      uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5379      uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5380  
5381      const char *rt = GPR(rt_value, info);
5382      const char *rs = GPR(rs_value, info);
5383      /* !!!!!!!!!! - no conversion function */
5384  
5385      return img_format("DINSM %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5386                        rt, rs, lsb_value, msbd_value);
5387      /* hand edited */
5388  }
5389  
5390  
5391  /*
5392   *
5393   *
5394   *   3         2         1
5395   *  10987654321098765432109876543210
5396   *  001000               x1110000101
5397   *     rt -----
5398   *          rs -----
5399   *               rd -----
5400   */
5401  static char *DINS(uint64 instruction, Dis_info *info)
5402  {
5403      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5404      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5405      uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5406      uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5407  
5408      const char *rt = GPR(rt_value, info);
5409      const char *rs = GPR(rs_value, info);
5410      /* !!!!!!!!!! - no conversion function */
5411  
5412      return img_format("DINS %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5413                        rt, rs, lsb_value, msbd_value);
5414      /* hand edited */
5415  }
5416  
5417  
5418  /*
5419   *
5420   *
5421   *   3         2         1
5422   *  10987654321098765432109876543210
5423   *  001000               x1110000101
5424   *     rt -----
5425   *          rs -----
5426   *               rd -----
5427   */
5428  static char *DINSU(uint64 instruction, Dis_info *info)
5429  {
5430      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5431      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5432      uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
5433      uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
5434  
5435      const char *rt = GPR(rt_value, info);
5436      const char *rs = GPR(rs_value, info);
5437      /* !!!!!!!!!! - no conversion function */
5438  
5439      return img_format("DINSU %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
5440                        rt, rs, lsb_value, msbd_value);
5441      /* hand edited */
5442  }
5443  
5444  
5445  /*
5446   *
5447   *
5448   *   3         2         1
5449   *  10987654321098765432109876543210
5450   *  001000               x1110000101
5451   *     rt -----
5452   *          rs -----
5453   *               rd -----
5454   */
5455  static char *DI(uint64 instruction, Dis_info *info)
5456  {
5457      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5458  
5459      const char *rt = GPR(rt_value, info);
5460  
5461      return img_format("DI %s", rt);
5462  }
5463  
5464  
5465  /*
5466   *
5467   *
5468   *   3         2         1
5469   *  10987654321098765432109876543210
5470   *  001000               x1110000101
5471   *     rt -----
5472   *          rs -----
5473   *               rd -----
5474   */
5475  static char *DIV(uint64 instruction, Dis_info *info)
5476  {
5477      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5478      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5479      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5480  
5481      const char *rd = GPR(rd_value, info);
5482      const char *rs = GPR(rs_value, info);
5483      const char *rt = GPR(rt_value, info);
5484  
5485      return img_format("DIV %s, %s, %s", rd, rs, rt);
5486  }
5487  
5488  
5489  /*
5490   *
5491   *
5492   *   3         2         1
5493   *  10987654321098765432109876543210
5494   *  001000               x1110000101
5495   *     rt -----
5496   *          rs -----
5497   *               rd -----
5498   */
5499  static char *DIV_D(uint64 instruction, Dis_info *info)
5500  {
5501      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5502      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5503      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5504  
5505      const char *fd = FPR(fd_value, info);
5506      const char *fs = FPR(fs_value, info);
5507      const char *ft = FPR(ft_value, info);
5508  
5509      return img_format("DIV.D %s, %s, %s", fd, fs, ft);
5510  }
5511  
5512  
5513  /*
5514   *
5515   *
5516   *   3         2         1
5517   *  10987654321098765432109876543210
5518   *  001000               x1110000101
5519   *     rt -----
5520   *          rs -----
5521   *               rd -----
5522   */
5523  static char *DIV_S(uint64 instruction, Dis_info *info)
5524  {
5525      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
5526      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5527      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
5528  
5529      const char *fd = FPR(fd_value, info);
5530      const char *fs = FPR(fs_value, info);
5531      const char *ft = FPR(ft_value, info);
5532  
5533      return img_format("DIV.S %s, %s, %s", fd, fs, ft);
5534  }
5535  
5536  
5537  /*
5538   *
5539   *
5540   *   3         2         1
5541   *  10987654321098765432109876543210
5542   *  001000               x1110000101
5543   *     rt -----
5544   *          rs -----
5545   *               rd -----
5546   */
5547  static char *DIVU(uint64 instruction, Dis_info *info)
5548  {
5549      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5550      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5551      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5552  
5553      const char *rd = GPR(rd_value, info);
5554      const char *rs = GPR(rs_value, info);
5555      const char *rt = GPR(rt_value, info);
5556  
5557      return img_format("DIVU %s, %s, %s", rd, rs, rt);
5558  }
5559  
5560  
5561  /*
5562   *
5563   *
5564   *   3         2         1
5565   *  10987654321098765432109876543210
5566   *  001000               x1110000101
5567   *     rt -----
5568   *          rs -----
5569   *               rd -----
5570   */
5571  static char *DLSA(uint64 instruction, Dis_info *info)
5572  {
5573      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5574      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5575      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5576      uint64 u2_value = extract_u2_10_9(instruction);
5577  
5578      const char *rd = GPR(rd_value, info);
5579      const char *rs = GPR(rs_value, info);
5580      const char *rt = GPR(rt_value, info);
5581  
5582      return img_format("DLSA %s, %s, %s, 0x%" PRIx64, rd, rs, rt, u2_value);
5583  }
5584  
5585  
5586  /*
5587   *
5588   *
5589   *   3         2         1
5590   *  10987654321098765432109876543210
5591   *  001000               x1110000101
5592   *     rt -----
5593   *          rs -----
5594   *               rd -----
5595   */
5596  static char *DLUI_48_(uint64 instruction, Dis_info *info)
5597  {
5598      uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
5599      uint64 u_value = extract_u_31_to_0__s32(instruction);
5600  
5601      const char *rt = GPR(rt_value, info);
5602  
5603      return img_format("DLUI %s, 0x%" PRIx64, rt, u_value);
5604  }
5605  
5606  
5607  /*
5608   *
5609   *
5610   *   3         2         1
5611   *  10987654321098765432109876543210
5612   *  001000               x1110000101
5613   *     rt -----
5614   *          rs -----
5615   *               rd -----
5616   */
5617  static char *DMFC0(uint64 instruction, Dis_info *info)
5618  {
5619      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5620      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5621      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5622  
5623      const char *rt = GPR(rt_value, info);
5624  
5625      return img_format("DMFC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
5626                        rt, c0s_value, sel_value);
5627  }
5628  
5629  
5630  /*
5631   *
5632   *
5633   *   3         2         1
5634   *  10987654321098765432109876543210
5635   *  001000               x1110000101
5636   *     rt -----
5637   *          rs -----
5638   *               rd -----
5639   */
5640  static char *DMFC1(uint64 instruction, Dis_info *info)
5641  {
5642      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5643      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5644  
5645      const char *rt = GPR(rt_value, info);
5646      const char *fs = FPR(fs_value, info);
5647  
5648      return img_format("DMFC1 %s, %s", rt, fs);
5649  }
5650  
5651  
5652  /*
5653   *
5654   *
5655   *   3         2         1
5656   *  10987654321098765432109876543210
5657   *  001000               x1110000101
5658   *     rt -----
5659   *          rs -----
5660   *               rd -----
5661   */
5662  static char *DMFC2(uint64 instruction, Dis_info *info)
5663  {
5664      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5665      uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
5666  
5667      const char *rt = GPR(rt_value, info);
5668  
5669      return img_format("DMFC2 %s, CP%" PRIu64, rt, cs_value);
5670  }
5671  
5672  
5673  /*
5674   *
5675   *
5676   *   3         2         1
5677   *  10987654321098765432109876543210
5678   *  001000               x1110000101
5679   *     rt -----
5680   *          rs -----
5681   *               rd -----
5682   */
5683  static char *DMFGC0(uint64 instruction, Dis_info *info)
5684  {
5685      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5686      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5687      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5688  
5689      const char *rt = GPR(rt_value, info);
5690  
5691      return img_format("DMFGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
5692                        rt, c0s_value, sel_value);
5693  }
5694  
5695  
5696  /*
5697   *
5698   *
5699   *   3         2         1
5700   *  10987654321098765432109876543210
5701   *  001000               x1110000101
5702   *     rt -----
5703   *          rs -----
5704   *               rd -----
5705   */
5706  static char *DMOD(uint64 instruction, Dis_info *info)
5707  {
5708      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5709      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5710      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5711  
5712      const char *rd = GPR(rd_value, info);
5713      const char *rs = GPR(rs_value, info);
5714      const char *rt = GPR(rt_value, info);
5715  
5716      return img_format("DMOD %s, %s, %s", rd, rs, rt);
5717  }
5718  
5719  
5720  /*
5721   *
5722   *
5723   *   3         2         1
5724   *  10987654321098765432109876543210
5725   *  001000               x1110000101
5726   *     rt -----
5727   *          rs -----
5728   *               rd -----
5729   */
5730  static char *DMODU(uint64 instruction, Dis_info *info)
5731  {
5732      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5733      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5734      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5735  
5736      const char *rd = GPR(rd_value, info);
5737      const char *rs = GPR(rs_value, info);
5738      const char *rt = GPR(rt_value, info);
5739  
5740      return img_format("DMODU %s, %s, %s", rd, rs, rt);
5741  }
5742  
5743  
5744  /*
5745   *
5746   *
5747   *   3         2         1
5748   *  10987654321098765432109876543210
5749   *  001000               x1110000101
5750   *     rt -----
5751   *          rs -----
5752   *               rd -----
5753   */
5754  static char *DMTC0(uint64 instruction, Dis_info *info)
5755  {
5756      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5757      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5758      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5759  
5760      const char *rt = GPR(rt_value, info);
5761  
5762      return img_format("DMTC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
5763                        rt, c0s_value, sel_value);
5764  }
5765  
5766  
5767  /*
5768   *
5769   *
5770   *   3         2         1
5771   *  10987654321098765432109876543210
5772   *  001000               x1110000101
5773   *     rt -----
5774   *          rs -----
5775   *               rd -----
5776   */
5777  static char *DMTC1(uint64 instruction, Dis_info *info)
5778  {
5779      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5780      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
5781  
5782      const char *rt = GPR(rt_value, info);
5783      const char *fs = FPR(fs_value, info);
5784  
5785      return img_format("DMTC1 %s, %s", rt, fs);
5786  }
5787  
5788  
5789  /*
5790   *
5791   *
5792   *   3         2         1
5793   *  10987654321098765432109876543210
5794   *  001000               x1110000101
5795   *     rt -----
5796   *          rs -----
5797   *               rd -----
5798   */
5799  static char *DMTC2(uint64 instruction, Dis_info *info)
5800  {
5801      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5802      uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
5803  
5804      const char *rt = GPR(rt_value, info);
5805  
5806      return img_format("DMTC2 %s, CP%" PRIu64, rt, cs_value);
5807  }
5808  
5809  
5810  /*
5811   *
5812   *
5813   *   3         2         1
5814   *  10987654321098765432109876543210
5815   *  001000               x1110000101
5816   *     rt -----
5817   *          rs -----
5818   *               rd -----
5819   */
5820  static char *DMTGC0(uint64 instruction, Dis_info *info)
5821  {
5822      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5823      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
5824      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
5825  
5826      const char *rt = GPR(rt_value, info);
5827  
5828      return img_format("DMTGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
5829                        rt, c0s_value, sel_value);
5830  }
5831  
5832  
5833  /*
5834   *
5835   *
5836   *   3         2         1
5837   *  10987654321098765432109876543210
5838   *  001000               x1110000101
5839   *     rt -----
5840   *          rs -----
5841   *               rd -----
5842   */
5843  static char *DMT(uint64 instruction, Dis_info *info)
5844  {
5845      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5846  
5847      const char *rt = GPR(rt_value, info);
5848  
5849      return img_format("DMT %s", rt);
5850  }
5851  
5852  
5853  /*
5854   *
5855   *
5856   *   3         2         1
5857   *  10987654321098765432109876543210
5858   *  001000               x1110000101
5859   *     rt -----
5860   *          rs -----
5861   *               rd -----
5862   */
5863  static char *DMUH(uint64 instruction, Dis_info *info)
5864  {
5865      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5866      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5867      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5868  
5869      const char *rd = GPR(rd_value, info);
5870      const char *rs = GPR(rs_value, info);
5871      const char *rt = GPR(rt_value, info);
5872  
5873      return img_format("DMUH %s, %s, %s", rd, rs, rt);
5874  }
5875  
5876  
5877  /*
5878   *
5879   *
5880   *   3         2         1
5881   *  10987654321098765432109876543210
5882   *  001000               x1110000101
5883   *     rt -----
5884   *          rs -----
5885   *               rd -----
5886   */
5887  static char *DMUHU(uint64 instruction, Dis_info *info)
5888  {
5889      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5890      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5891      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5892  
5893      const char *rd = GPR(rd_value, info);
5894      const char *rs = GPR(rs_value, info);
5895      const char *rt = GPR(rt_value, info);
5896  
5897      return img_format("DMUHU %s, %s, %s", rd, rs, rt);
5898  }
5899  
5900  
5901  /*
5902   *
5903   *
5904   *   3         2         1
5905   *  10987654321098765432109876543210
5906   *  001000               x1110000101
5907   *     rt -----
5908   *          rs -----
5909   *               rd -----
5910   */
5911  static char *DMUL(uint64 instruction, Dis_info *info)
5912  {
5913      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5914      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5915      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5916  
5917      const char *rd = GPR(rd_value, info);
5918      const char *rs = GPR(rs_value, info);
5919      const char *rt = GPR(rt_value, info);
5920  
5921      return img_format("DMUL %s, %s, %s", rd, rs, rt);
5922  }
5923  
5924  
5925  /*
5926   *
5927   *
5928   *   3         2         1
5929   *  10987654321098765432109876543210
5930   *  001000               x1110000101
5931   *     rt -----
5932   *          rs -----
5933   *               rd -----
5934   */
5935  static char *DMULU(uint64 instruction, Dis_info *info)
5936  {
5937      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5938      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5939      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
5940  
5941      const char *rd = GPR(rd_value, info);
5942      const char *rs = GPR(rs_value, info);
5943      const char *rt = GPR(rt_value, info);
5944  
5945      return img_format("DMULU %s, %s, %s", rd, rs, rt);
5946  }
5947  
5948  
5949  /*
5950   * [DSP] DPA.W.PH ac, rs, rt - Dot product with accumulate on
5951   *   vector integer halfword elements
5952   *
5953   *   3         2         1
5954   *  10987654321098765432109876543210
5955   *  001000            00000010111111
5956   *     rt -----
5957   *          rs -----
5958   *               ac --
5959   */
5960  static char *DPA_W_PH(uint64 instruction, Dis_info *info)
5961  {
5962      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5963      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5964      uint64 ac_value = extract_ac_15_14(instruction);
5965  
5966      const char *ac = AC(ac_value, info);
5967      const char *rs = GPR(rs_value, info);
5968      const char *rt = GPR(rt_value, info);
5969  
5970      return img_format("DPA.W.PH %s, %s, %s", ac, rs, rt);
5971  }
5972  
5973  
5974  /*
5975   *
5976   *
5977   *   3         2         1
5978   *  10987654321098765432109876543210
5979   *  001000               x1110000101
5980   *     rt -----
5981   *          rs -----
5982   *               rd -----
5983   */
5984  static char *DPAQ_SA_L_W(uint64 instruction, Dis_info *info)
5985  {
5986      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
5987      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
5988      uint64 ac_value = extract_ac_15_14(instruction);
5989  
5990      const char *ac = AC(ac_value, info);
5991      const char *rs = GPR(rs_value, info);
5992      const char *rt = GPR(rt_value, info);
5993  
5994      return img_format("DPAQ_SA.L.W %s, %s, %s", ac, rs, rt);
5995  }
5996  
5997  
5998  /*
5999   *
6000   *
6001   *   3         2         1
6002   *  10987654321098765432109876543210
6003   *  001000               x1110000101
6004   *     rt -----
6005   *          rs -----
6006   *               rd -----
6007   */
6008  static char *DPAQ_S_W_PH(uint64 instruction, Dis_info *info)
6009  {
6010      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6011      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6012      uint64 ac_value = extract_ac_15_14(instruction);
6013  
6014      const char *ac = AC(ac_value, info);
6015      const char *rs = GPR(rs_value, info);
6016      const char *rt = GPR(rt_value, info);
6017  
6018      return img_format("DPAQ_S.W.PH %s, %s, %s", ac, rs, rt);
6019  }
6020  
6021  
6022  /*
6023   *
6024   *
6025   *   3         2         1
6026   *  10987654321098765432109876543210
6027   *  001000               x1110000101
6028   *     rt -----
6029   *          rs -----
6030   *               rd -----
6031   */
6032  static char *DPAQX_SA_W_PH(uint64 instruction, Dis_info *info)
6033  {
6034      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6035      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6036      uint64 ac_value = extract_ac_15_14(instruction);
6037  
6038      const char *ac = AC(ac_value, info);
6039      const char *rs = GPR(rs_value, info);
6040      const char *rt = GPR(rt_value, info);
6041  
6042      return img_format("DPAQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6043  }
6044  
6045  
6046  /*
6047   *
6048   *
6049   *   3         2         1
6050   *  10987654321098765432109876543210
6051   *  001000               x1110000101
6052   *     rt -----
6053   *          rs -----
6054   *               rd -----
6055   */
6056  static char *DPAQX_S_W_PH(uint64 instruction, Dis_info *info)
6057  {
6058      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6059      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6060      uint64 ac_value = extract_ac_15_14(instruction);
6061  
6062      const char *ac = AC(ac_value, info);
6063      const char *rs = GPR(rs_value, info);
6064      const char *rt = GPR(rt_value, info);
6065  
6066      return img_format("DPAQX_S.W.PH %s, %s, %s", ac, rs, rt);
6067  }
6068  
6069  
6070  /*
6071   *
6072   *
6073   *   3         2         1
6074   *  10987654321098765432109876543210
6075   *  001000               x1110000101
6076   *     rt -----
6077   *          rs -----
6078   *               rd -----
6079   */
6080  static char *DPAU_H_QBL(uint64 instruction, Dis_info *info)
6081  {
6082      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6083      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6084      uint64 ac_value = extract_ac_15_14(instruction);
6085  
6086      const char *ac = AC(ac_value, info);
6087      const char *rs = GPR(rs_value, info);
6088      const char *rt = GPR(rt_value, info);
6089  
6090      return img_format("DPAU.H.QBL %s, %s, %s", ac, rs, rt);
6091  }
6092  
6093  
6094  /*
6095   *
6096   *
6097   *   3         2         1
6098   *  10987654321098765432109876543210
6099   *  001000               x1110000101
6100   *     rt -----
6101   *          rs -----
6102   *               rd -----
6103   */
6104  static char *DPAU_H_QBR(uint64 instruction, Dis_info *info)
6105  {
6106      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6107      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6108      uint64 ac_value = extract_ac_15_14(instruction);
6109  
6110      const char *ac = AC(ac_value, info);
6111      const char *rs = GPR(rs_value, info);
6112      const char *rt = GPR(rt_value, info);
6113  
6114      return img_format("DPAU.H.QBR %s, %s, %s", ac, rs, rt);
6115  }
6116  
6117  
6118  /*
6119   *
6120   *
6121   *   3         2         1
6122   *  10987654321098765432109876543210
6123   *  001000               x1110000101
6124   *     rt -----
6125   *          rs -----
6126   *               rd -----
6127   */
6128  static char *DPAX_W_PH(uint64 instruction, Dis_info *info)
6129  {
6130      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6131      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6132      uint64 ac_value = extract_ac_15_14(instruction);
6133  
6134      const char *ac = AC(ac_value, info);
6135      const char *rs = GPR(rs_value, info);
6136      const char *rt = GPR(rt_value, info);
6137  
6138      return img_format("DPAX.W.PH %s, %s, %s", ac, rs, rt);
6139  }
6140  
6141  
6142  /*
6143   *
6144   *
6145   *   3         2         1
6146   *  10987654321098765432109876543210
6147   *  001000               x1110000101
6148   *     rt -----
6149   *          rs -----
6150   *               rd -----
6151   */
6152  static char *DPS_W_PH(uint64 instruction, Dis_info *info)
6153  {
6154      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6155      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6156      uint64 ac_value = extract_ac_15_14(instruction);
6157  
6158      const char *ac = AC(ac_value, info);
6159      const char *rs = GPR(rs_value, info);
6160      const char *rt = GPR(rt_value, info);
6161  
6162      return img_format("DPS.W.PH %s, %s, %s", ac, rs, rt);
6163  }
6164  
6165  
6166  /*
6167   *
6168   *
6169   *   3         2         1
6170   *  10987654321098765432109876543210
6171   *  001000               x1110000101
6172   *     rt -----
6173   *          rs -----
6174   *               rd -----
6175   */
6176  static char *DPSQ_SA_L_W(uint64 instruction, Dis_info *info)
6177  {
6178      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6179      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6180      uint64 ac_value = extract_ac_15_14(instruction);
6181  
6182      const char *ac = AC(ac_value, info);
6183      const char *rs = GPR(rs_value, info);
6184      const char *rt = GPR(rt_value, info);
6185  
6186      return img_format("DPSQ_SA.L.W %s, %s, %s", ac, rs, rt);
6187  }
6188  
6189  
6190  /*
6191   *
6192   *
6193   *   3         2         1
6194   *  10987654321098765432109876543210
6195   *  001000               x1110000101
6196   *     rt -----
6197   *          rs -----
6198   *               rd -----
6199   */
6200  static char *DPSQ_S_W_PH(uint64 instruction, Dis_info *info)
6201  {
6202      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6203      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6204      uint64 ac_value = extract_ac_15_14(instruction);
6205  
6206      const char *ac = AC(ac_value, info);
6207      const char *rs = GPR(rs_value, info);
6208      const char *rt = GPR(rt_value, info);
6209  
6210      return img_format("DPSQ_S.W.PH %s, %s, %s", ac, rs, rt);
6211  }
6212  
6213  
6214  /*
6215   *
6216   *
6217   *   3         2         1
6218   *  10987654321098765432109876543210
6219   *  001000               x1110000101
6220   *     rt -----
6221   *          rs -----
6222   *               rd -----
6223   */
6224  static char *DPSQX_SA_W_PH(uint64 instruction, Dis_info *info)
6225  {
6226      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6227      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6228      uint64 ac_value = extract_ac_15_14(instruction);
6229  
6230      const char *ac = AC(ac_value, info);
6231      const char *rs = GPR(rs_value, info);
6232      const char *rt = GPR(rt_value, info);
6233  
6234      return img_format("DPSQX_SA.W.PH %s, %s, %s", ac, rs, rt);
6235  }
6236  
6237  
6238  /*
6239   *
6240   *
6241   *   3         2         1
6242   *  10987654321098765432109876543210
6243   *  001000               x1110000101
6244   *     rt -----
6245   *          rs -----
6246   *               rd -----
6247   */
6248  static char *DPSQX_S_W_PH(uint64 instruction, Dis_info *info)
6249  {
6250      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6251      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6252      uint64 ac_value = extract_ac_15_14(instruction);
6253  
6254      const char *ac = AC(ac_value, info);
6255      const char *rs = GPR(rs_value, info);
6256      const char *rt = GPR(rt_value, info);
6257  
6258      return img_format("DPSQX_S.W.PH %s, %s, %s", ac, rs, rt);
6259  }
6260  
6261  
6262  /*
6263   *
6264   *
6265   *   3         2         1
6266   *  10987654321098765432109876543210
6267   *  001000               x1110000101
6268   *     rt -----
6269   *          rs -----
6270   *               rd -----
6271   */
6272  static char *DPSU_H_QBL(uint64 instruction, Dis_info *info)
6273  {
6274      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6275      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6276      uint64 ac_value = extract_ac_15_14(instruction);
6277  
6278      const char *ac = AC(ac_value, info);
6279      const char *rs = GPR(rs_value, info);
6280      const char *rt = GPR(rt_value, info);
6281  
6282      return img_format("DPSU.H.QBL %s, %s, %s", ac, rs, rt);
6283  }
6284  
6285  
6286  /*
6287   *
6288   *
6289   *   3         2         1
6290   *  10987654321098765432109876543210
6291   *  001000               x1110000101
6292   *     rt -----
6293   *          rs -----
6294   *               rd -----
6295   */
6296  static char *DPSU_H_QBR(uint64 instruction, Dis_info *info)
6297  {
6298      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6299      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6300      uint64 ac_value = extract_ac_15_14(instruction);
6301  
6302      const char *ac = AC(ac_value, info);
6303      const char *rs = GPR(rs_value, info);
6304      const char *rt = GPR(rt_value, info);
6305  
6306      return img_format("DPSU.H.QBR %s, %s, %s", ac, rs, rt);
6307  }
6308  
6309  
6310  /*
6311   *
6312   *
6313   *   3         2         1
6314   *  10987654321098765432109876543210
6315   *  001000               x1110000101
6316   *     rt -----
6317   *          rs -----
6318   *               rd -----
6319   */
6320  static char *DPSX_W_PH(uint64 instruction, Dis_info *info)
6321  {
6322      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6323      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6324      uint64 ac_value = extract_ac_15_14(instruction);
6325  
6326      const char *ac = AC(ac_value, info);
6327      const char *rs = GPR(rs_value, info);
6328      const char *rt = GPR(rt_value, info);
6329  
6330      return img_format("DPSX.W.PH %s, %s, %s", ac, rs, rt);
6331  }
6332  
6333  
6334  /*
6335   * DROTR -
6336   *
6337   *   3         2         1
6338   *  10987654321098765432109876543210
6339   *  001000               x1110000101
6340   *     rt -----
6341   *          rs -----
6342   *               rd -----
6343   */
6344  static char *DROTR(uint64 instruction, Dis_info *info)
6345  {
6346      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6347      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6348      uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6349  
6350      const char *rt = GPR(rt_value, info);
6351      const char *rs = GPR(rs_value, info);
6352  
6353      return img_format("DROTR %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6354  }
6355  
6356  
6357  /*
6358   * DROTR[32] -
6359   *
6360   *   3         2         1
6361   *  10987654321098765432109876543210
6362   *  10o000          1100xxx0110
6363   *     rt -----
6364   *          rs -----
6365   *                       shift -----
6366   */
6367  static char *DROTR32(uint64 instruction, Dis_info *info)
6368  {
6369      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6370      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6371      uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6372  
6373      const char *rt = GPR(rt_value, info);
6374      const char *rs = GPR(rs_value, info);
6375  
6376      return img_format("DROTR32 %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6377  }
6378  
6379  
6380  /*
6381   *
6382   *
6383   *   3         2         1
6384   *  10987654321098765432109876543210
6385   *  001000               x1110000101
6386   *     rt -----
6387   *          rs -----
6388   *               rd -----
6389   */
6390  static char *DROTRV(uint64 instruction, Dis_info *info)
6391  {
6392      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6393      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6394      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6395  
6396      const char *rd = GPR(rd_value, info);
6397      const char *rs = GPR(rs_value, info);
6398      const char *rt = GPR(rt_value, info);
6399  
6400      return img_format("DROTRV %s, %s, %s", rd, rs, rt);
6401  }
6402  
6403  
6404  /*
6405   *
6406   *
6407   *   3         2         1
6408   *  10987654321098765432109876543210
6409   *  001000               x1110000101
6410   *     rt -----
6411   *          rs -----
6412   *               rd -----
6413   */
6414  static char *DROTX(uint64 instruction, Dis_info *info)
6415  {
6416      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6417      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6418      uint64 shiftx_value = extract_shiftx_11_10_9_8_7_6(instruction);
6419      uint64 shift_value = extract_shift_5_4_3_2_1_0(instruction);
6420  
6421      const char *rt = GPR(rt_value, info);
6422      const char *rs = GPR(rs_value, info);
6423  
6424      return img_format("DROTX %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
6425                        rt, rs, shift_value, shiftx_value);
6426  }
6427  
6428  
6429  /*
6430   * DSLL -
6431   *
6432   *   3         2         1
6433   *  10987654321098765432109876543210
6434   *  10o000          1100xxx0000
6435   *     rt -----
6436   *          rs -----
6437   *                       shift -----
6438   */
6439  static char *DSLL(uint64 instruction, Dis_info *info)
6440  {
6441      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6442      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6443      uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6444  
6445      const char *rt = GPR(rt_value, info);
6446      const char *rs = GPR(rs_value, info);
6447  
6448      return img_format("DSLL %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6449  }
6450  
6451  
6452  /*
6453   * DSLL[32] -
6454   *
6455   *   3         2         1
6456   *  10987654321098765432109876543210
6457   *  10o000          1100xxx0000
6458   *     rt -----
6459   *          rs -----
6460   *                       shift -----
6461   */
6462  static char *DSLL32(uint64 instruction, Dis_info *info)
6463  {
6464      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6465      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6466      uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6467  
6468      const char *rt = GPR(rt_value, info);
6469      const char *rs = GPR(rs_value, info);
6470  
6471      return img_format("DSLL32 %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6472  }
6473  
6474  
6475  /*
6476   *
6477   *
6478   *   3         2         1
6479   *  10987654321098765432109876543210
6480   *  001000               x1110000101
6481   *     rt -----
6482   *          rs -----
6483   *               rd -----
6484   */
6485  static char *DSLLV(uint64 instruction, Dis_info *info)
6486  {
6487      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6488      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6489      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6490  
6491      const char *rd = GPR(rd_value, info);
6492      const char *rs = GPR(rs_value, info);
6493      const char *rt = GPR(rt_value, info);
6494  
6495      return img_format("DSLLV %s, %s, %s", rd, rs, rt);
6496  }
6497  
6498  
6499  /*
6500   * DSRA -
6501   *
6502   *   3         2         1
6503   *  10987654321098765432109876543210
6504   *  10o000          1100xxx0100
6505   *     rt -----
6506   *          rs -----
6507   *                       shift -----
6508   */
6509  static char *DSRA(uint64 instruction, Dis_info *info)
6510  {
6511      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6512      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6513      uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6514  
6515      const char *rt = GPR(rt_value, info);
6516      const char *rs = GPR(rs_value, info);
6517  
6518      return img_format("DSRA %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6519  }
6520  
6521  
6522  /*
6523   * DSRA[32] -
6524   *
6525   *   3         2         1
6526   *  10987654321098765432109876543210
6527   *  10o000          1100xxx0100
6528   *     rt -----
6529   *          rs -----
6530   *                       shift -----
6531   */
6532  static char *DSRA32(uint64 instruction, Dis_info *info)
6533  {
6534      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6535      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6536      uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6537  
6538      const char *rt = GPR(rt_value, info);
6539      const char *rs = GPR(rs_value, info);
6540  
6541      return img_format("DSRA32 %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6542  }
6543  
6544  
6545  /*
6546   *
6547   *
6548   *   3         2         1
6549   *  10987654321098765432109876543210
6550   *  001000               x1110000101
6551   *     rt -----
6552   *          rs -----
6553   *               rd -----
6554   */
6555  static char *DSRAV(uint64 instruction, Dis_info *info)
6556  {
6557      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6558      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6559      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6560  
6561      const char *rd = GPR(rd_value, info);
6562      const char *rs = GPR(rs_value, info);
6563      const char *rt = GPR(rt_value, info);
6564  
6565      return img_format("DSRAV %s, %s, %s", rd, rs, rt);
6566  }
6567  
6568  
6569  /*
6570   * DSRL -
6571   *
6572   *   3         2         1
6573   *  10987654321098765432109876543210
6574   *  10o000          1100xxx0100
6575   *     rt -----
6576   *          rs -----
6577   *                       shift -----
6578   */
6579  static char *DSRL(uint64 instruction, Dis_info *info)
6580  {
6581      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6582      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6583      uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6584  
6585      const char *rt = GPR(rt_value, info);
6586      const char *rs = GPR(rs_value, info);
6587  
6588      return img_format("DSRL %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6589  }
6590  
6591  
6592  /*
6593   * DSRL[32] -
6594   *
6595   *   3         2         1
6596   *  10987654321098765432109876543210
6597   *  10o000          1100xxx0010
6598   *     rt -----
6599   *          rs -----
6600   *                       shift -----
6601   */
6602  static char *DSRL32(uint64 instruction, Dis_info *info)
6603  {
6604      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6605      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6606      uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
6607  
6608      const char *rt = GPR(rt_value, info);
6609      const char *rs = GPR(rs_value, info);
6610  
6611      return img_format("DSRL32 %s, %s, 0x%" PRIx64, rt, rs, shift_value);
6612  }
6613  
6614  
6615  /*
6616   *
6617   *
6618   *   3         2         1
6619   *  10987654321098765432109876543210
6620   *  001000               x1110000101
6621   *     rt -----
6622   *          rs -----
6623   *               rd -----
6624   */
6625  static char *DSRLV(uint64 instruction, Dis_info *info)
6626  {
6627      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6628      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6629      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6630  
6631      const char *rd = GPR(rd_value, info);
6632      const char *rs = GPR(rs_value, info);
6633      const char *rt = GPR(rt_value, info);
6634  
6635      return img_format("DSRLV %s, %s, %s", rd, rs, rt);
6636  }
6637  
6638  
6639  /*
6640   *
6641   *
6642   *   3         2         1
6643   *  10987654321098765432109876543210
6644   *  001000               x1110000101
6645   *     rt -----
6646   *          rs -----
6647   *               rd -----
6648   */
6649  static char *DSUB(uint64 instruction, Dis_info *info)
6650  {
6651      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6652      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6653      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6654  
6655      const char *rd = GPR(rd_value, info);
6656      const char *rs = GPR(rs_value, info);
6657      const char *rt = GPR(rt_value, info);
6658  
6659      return img_format("DSUB %s, %s, %s", rd, rs, rt);
6660  }
6661  
6662  
6663  /*
6664   *
6665   *
6666   *   3         2         1
6667   *  10987654321098765432109876543210
6668   *  001000               x1110000101
6669   *     rt -----
6670   *          rs -----
6671   *               rd -----
6672   */
6673  static char *DSUBU(uint64 instruction, Dis_info *info)
6674  {
6675      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6676      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6677      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6678  
6679      const char *rd = GPR(rd_value, info);
6680      const char *rs = GPR(rs_value, info);
6681      const char *rt = GPR(rt_value, info);
6682  
6683      return img_format("DSUBU %s, %s, %s", rd, rs, rt);
6684  }
6685  
6686  
6687  /*
6688   *
6689   *
6690   *   3         2         1
6691   *  10987654321098765432109876543210
6692   *  001000               x1110000101
6693   *     rt -----
6694   *          rs -----
6695   *               rd -----
6696   */
6697  static char *DVPE(uint64 instruction, Dis_info *info)
6698  {
6699      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6700  
6701      const char *rt = GPR(rt_value, info);
6702  
6703      return img_format("DVPE %s", rt);
6704  }
6705  
6706  
6707  /*
6708   *
6709   *
6710   *   3         2         1
6711   *  10987654321098765432109876543210
6712   *  001000               x1110000101
6713   *     rt -----
6714   *          rs -----
6715   *               rd -----
6716   */
6717  static char *DVP(uint64 instruction, Dis_info *info)
6718  {
6719      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6720  
6721      const char *rt = GPR(rt_value, info);
6722  
6723      return img_format("DVP %s", rt);
6724  }
6725  
6726  
6727  /*
6728   *
6729   *
6730   *   3         2         1
6731   *  10987654321098765432109876543210
6732   *  001000               x1110000101
6733   *     rt -----
6734   *          rs -----
6735   *               rd -----
6736   */
6737  static char *EHB(uint64 instruction, Dis_info *info)
6738  {
6739      (void)instruction;
6740  
6741      return g_strdup("EHB ");
6742  }
6743  
6744  
6745  /*
6746   *
6747   *
6748   *   3         2         1
6749   *  10987654321098765432109876543210
6750   *  001000               x1110000101
6751   *     rt -----
6752   *          rs -----
6753   *               rd -----
6754   */
6755  static char *EI(uint64 instruction, Dis_info *info)
6756  {
6757      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6758  
6759      const char *rt = GPR(rt_value, info);
6760  
6761      return img_format("EI %s", rt);
6762  }
6763  
6764  
6765  /*
6766   *
6767   *
6768   *   3         2         1
6769   *  10987654321098765432109876543210
6770   *  001000               x1110000101
6771   *     rt -----
6772   *          rs -----
6773   *               rd -----
6774   */
6775  static char *EMT(uint64 instruction, Dis_info *info)
6776  {
6777      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6778  
6779      const char *rt = GPR(rt_value, info);
6780  
6781      return img_format("EMT %s", rt);
6782  }
6783  
6784  
6785  /*
6786   *
6787   *
6788   *   3         2         1
6789   *  10987654321098765432109876543210
6790   *  001000               x1110000101
6791   *     rt -----
6792   *          rs -----
6793   *               rd -----
6794   */
6795  static char *ERET(uint64 instruction, Dis_info *info)
6796  {
6797      (void)instruction;
6798  
6799      return g_strdup("ERET ");
6800  }
6801  
6802  
6803  /*
6804   *
6805   *
6806   *   3         2         1
6807   *  10987654321098765432109876543210
6808   *  001000               x1110000101
6809   *     rt -----
6810   *          rs -----
6811   *               rd -----
6812   */
6813  static char *ERETNC(uint64 instruction, Dis_info *info)
6814  {
6815      (void)instruction;
6816  
6817      return g_strdup("ERETNC ");
6818  }
6819  
6820  
6821  /*
6822   *
6823   *
6824   *   3         2         1
6825   *  10987654321098765432109876543210
6826   *  001000               x1110000101
6827   *     rt -----
6828   *          rs -----
6829   *               rd -----
6830   */
6831  static char *EVP(uint64 instruction, Dis_info *info)
6832  {
6833      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6834  
6835      const char *rt = GPR(rt_value, info);
6836  
6837      return img_format("EVP %s", rt);
6838  }
6839  
6840  
6841  /*
6842   *
6843   *
6844   *   3         2         1
6845   *  10987654321098765432109876543210
6846   *  001000               x1110000101
6847   *     rt -----
6848   *          rs -----
6849   *               rd -----
6850   */
6851  static char *EVPE(uint64 instruction, Dis_info *info)
6852  {
6853      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6854  
6855      const char *rt = GPR(rt_value, info);
6856  
6857      return img_format("EVPE %s", rt);
6858  }
6859  
6860  
6861  /*
6862   *
6863   *
6864   *   3         2         1
6865   *  10987654321098765432109876543210
6866   *  001000               x1110000101
6867   *     rt -----
6868   *          rs -----
6869   *               rd -----
6870   */
6871  static char *EXT(uint64 instruction, Dis_info *info)
6872  {
6873      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6874      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6875      uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
6876      uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
6877  
6878      const char *rt = GPR(rt_value, info);
6879      const char *rs = GPR(rs_value, info);
6880      uint64 msbd = encode_msbd_from_size(msbd_value);
6881  
6882      return img_format("EXT %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
6883                        rt, rs, lsb_value, msbd);
6884  }
6885  
6886  
6887  /*
6888   *
6889   *
6890   *   3         2         1
6891   *  10987654321098765432109876543210
6892   *  001000               x1110000101
6893   *     rt -----
6894   *          rs -----
6895   *               rd -----
6896   */
6897  static char *EXTD(uint64 instruction, Dis_info *info)
6898  {
6899      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6900      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6901      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6902      uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
6903  
6904      const char *rd = GPR(rd_value, info);
6905      const char *rs = GPR(rs_value, info);
6906      const char *rt = GPR(rt_value, info);
6907  
6908      return img_format("EXTD %s, %s, %s, 0x%" PRIx64, rd, rs, rt, shift_value);
6909  }
6910  
6911  
6912  /*
6913   *
6914   *
6915   *   3         2         1
6916   *  10987654321098765432109876543210
6917   *  001000               x1110000101
6918   *     rt -----
6919   *          rs -----
6920   *               rd -----
6921   */
6922  static char *EXTD32(uint64 instruction, Dis_info *info)
6923  {
6924      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6925      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
6926      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
6927      uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
6928  
6929      const char *rd = GPR(rd_value, info);
6930      const char *rs = GPR(rs_value, info);
6931      const char *rt = GPR(rt_value, info);
6932  
6933      return img_format("EXTD32 %s, %s, %s, 0x%" PRIx64, rd, rs, rt, shift_value);
6934  }
6935  
6936  
6937  /*
6938   *
6939   *
6940   *   3         2         1
6941   *  10987654321098765432109876543210
6942   *  001000               x1110000101
6943   *     rt -----
6944   *          rs -----
6945   *               rd -----
6946   */
6947  static char *EXTPDP(uint64 instruction, Dis_info *info)
6948  {
6949      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6950      uint64 size_value = extract_size_20_19_18_17_16(instruction);
6951      uint64 ac_value = extract_ac_15_14(instruction);
6952  
6953      const char *rt = GPR(rt_value, info);
6954      const char *ac = AC(ac_value, info);
6955  
6956      return img_format("EXTPDP %s, %s, 0x%" PRIx64, rt, ac, size_value);
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 *EXTPDPV(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 ac_value = extract_ac_15_14(instruction);
6975  
6976      const char *rt = GPR(rt_value, info);
6977      const char *ac = AC(ac_value, info);
6978      const char *rs = GPR(rs_value, info);
6979  
6980      return img_format("EXTPDPV %s, %s, %s", rt, ac, rs);
6981  }
6982  
6983  
6984  /*
6985   *
6986   *
6987   *   3         2         1
6988   *  10987654321098765432109876543210
6989   *  001000               x1110000101
6990   *     rt -----
6991   *          rs -----
6992   *               rd -----
6993   */
6994  static char *EXTP(uint64 instruction, Dis_info *info)
6995  {
6996      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
6997      uint64 size_value = extract_size_20_19_18_17_16(instruction);
6998      uint64 ac_value = extract_ac_15_14(instruction);
6999  
7000      const char *rt = GPR(rt_value, info);
7001      const char *ac = AC(ac_value, info);
7002  
7003      return img_format("EXTP %s, %s, 0x%" PRIx64, rt, ac, size_value);
7004  }
7005  
7006  
7007  /*
7008   *
7009   *
7010   *   3         2         1
7011   *  10987654321098765432109876543210
7012   *  001000               x1110000101
7013   *     rt -----
7014   *          rs -----
7015   *               rd -----
7016   */
7017  static char *EXTPV(uint64 instruction, Dis_info *info)
7018  {
7019      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7020      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7021      uint64 ac_value = extract_ac_15_14(instruction);
7022  
7023      const char *rt = GPR(rt_value, info);
7024      const char *ac = AC(ac_value, info);
7025      const char *rs = GPR(rs_value, info);
7026  
7027      return img_format("EXTPV %s, %s, %s", rt, ac, rs);
7028  }
7029  
7030  
7031  /*
7032   * [DSP] EXTR_RS.W rt, ac, shift - Extract word value from accumulator to GPR
7033   *   with right shift
7034   *
7035   *   3         2         1
7036   *  10987654321098765432109876543210
7037   *  001000            10111001111111
7038   *     rt -----
7039   *       shift -----
7040   *               ac --
7041   */
7042  static char *EXTR_RS_W(uint64 instruction, Dis_info *info)
7043  {
7044      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7045      uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7046      uint64 ac_value = extract_ac_15_14(instruction);
7047  
7048      const char *rt = GPR(rt_value, info);
7049      const char *ac = AC(ac_value, info);
7050  
7051      return img_format("EXTR_RS.W %s, %s, 0x%" PRIx64, rt, ac, shift_value);
7052  }
7053  
7054  
7055  /*
7056   * [DSP] EXTR_R.W rt, ac, shift - Extract word value from accumulator to GPR
7057   *   with right shift
7058   *
7059   *   3         2         1
7060   *  10987654321098765432109876543210
7061   *  001000            01111001111111
7062   *     rt -----
7063   *       shift -----
7064   *               ac --
7065   */
7066  static char *EXTR_R_W(uint64 instruction, Dis_info *info)
7067  {
7068      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7069      uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7070      uint64 ac_value = extract_ac_15_14(instruction);
7071  
7072      const char *rt = GPR(rt_value, info);
7073      const char *ac = AC(ac_value, info);
7074  
7075      return img_format("EXTR_R.W %s, %s, 0x%" PRIx64, rt, ac, shift_value);
7076  }
7077  
7078  
7079  /*
7080   * [DSP] EXTR_S.H rt, ac, shift - Extract halfword value from accumulator
7081   *   to GPR with right shift and saturate
7082   *
7083   *   3         2         1
7084   *  10987654321098765432109876543210
7085   *  001000            11111001111111
7086   *     rt -----
7087   *       shift -----
7088   *               ac --
7089   */
7090  static char *EXTR_S_H(uint64 instruction, Dis_info *info)
7091  {
7092      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7093      uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7094      uint64 ac_value = extract_ac_15_14(instruction);
7095  
7096      const char *rt = GPR(rt_value, info);
7097      const char *ac = AC(ac_value, info);
7098  
7099      return img_format("EXTR_S.H %s, %s, 0x%" PRIx64, rt, ac, shift_value);
7100  }
7101  
7102  
7103  /*
7104   * [DSP] EXTR.W rt, ac, shift - Extract word value from accumulator to GPR
7105   *   with right shift
7106   *
7107   *   3         2         1
7108   *  10987654321098765432109876543210
7109   *  001000            00111001111111
7110   *     rt -----
7111   *       shift -----
7112   *               ac --
7113   */
7114  static char *EXTR_W(uint64 instruction, Dis_info *info)
7115  {
7116      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7117      uint64 shift_value = extract_shift_20_19_18_17_16(instruction);
7118      uint64 ac_value = extract_ac_15_14(instruction);
7119  
7120      const char *rt = GPR(rt_value, info);
7121      const char *ac = AC(ac_value, info);
7122  
7123      return img_format("EXTR.W %s, %s, 0x%" PRIx64, rt, ac, shift_value);
7124  }
7125  
7126  
7127  /*
7128   * [DSP] EXTRV_RS.W rt, ac, rs - Extract word value with variable
7129   *   right shift from accumulator to GPR
7130   *
7131   *   3         2         1
7132   *  10987654321098765432109876543210
7133   *  001000            10111010111111
7134   *     rt -----
7135   *          rs -----
7136   *               ac --
7137   */
7138  static char *EXTRV_RS_W(uint64 instruction, Dis_info *info)
7139  {
7140      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7141      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7142      uint64 ac_value = extract_ac_15_14(instruction);
7143  
7144      const char *rt = GPR(rt_value, info);
7145      const char *ac = AC(ac_value, info);
7146      const char *rs = GPR(rs_value, info);
7147  
7148      return img_format("EXTRV_RS.W %s, %s, %s", rt, ac, rs);
7149  }
7150  
7151  
7152  /*
7153   * [DSP] EXTRV_R.W rt, ac, rs - Extract word value with variable
7154   *   right shift from accumulator to GPR
7155   *
7156   *   3         2         1
7157   *  10987654321098765432109876543210
7158   *  001000            01111010111111
7159   *     rt -----
7160   *          rs -----
7161   *               ac --
7162   */
7163  static char *EXTRV_R_W(uint64 instruction, Dis_info *info)
7164  {
7165      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7166      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7167      uint64 ac_value = extract_ac_15_14(instruction);
7168  
7169      const char *rt = GPR(rt_value, info);
7170      const char *ac = AC(ac_value, info);
7171      const char *rs = GPR(rs_value, info);
7172  
7173      return img_format("EXTRV_R.W %s, %s, %s", rt, ac, rs);
7174  }
7175  
7176  
7177  /*
7178   * [DSP] EXTRV_S.H rt, ac, rs - Extract halfword value variable from
7179   *   accumulator to GPR with right shift and saturate
7180   *
7181   *   3         2         1
7182   *  10987654321098765432109876543210
7183   *  001000            11111010111111
7184   *     rt -----
7185   *          rs -----
7186   *               ac --
7187   */
7188  static char *EXTRV_S_H(uint64 instruction, Dis_info *info)
7189  {
7190      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7191      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7192      uint64 ac_value = extract_ac_15_14(instruction);
7193  
7194      const char *rt = GPR(rt_value, info);
7195      const char *ac = AC(ac_value, info);
7196      const char *rs = GPR(rs_value, info);
7197  
7198      return img_format("EXTRV_S.H %s, %s, %s", rt, ac, rs);
7199  }
7200  
7201  
7202  /*
7203   * [DSP] EXTRV.W rt, ac, rs - Extract word value with variable
7204   *   right shift from accumulator to GPR
7205   *
7206   *   3         2         1
7207   *  10987654321098765432109876543210
7208   *  001000            00111010111111
7209   *     rt -----
7210   *          rs -----
7211   *               ac --
7212   */
7213  static char *EXTRV_W(uint64 instruction, Dis_info *info)
7214  {
7215      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7216      uint64 rs_value = extract_rs_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      const char *rs = GPR(rs_value, info);
7222  
7223      return img_format("EXTRV.W %s, %s, %s", rt, ac, rs);
7224  }
7225  
7226  
7227  /*
7228   * EXTW - Extract Word
7229   *
7230   *   3         2         1
7231   *  10987654321098765432109876543210
7232   *  001000                    011111
7233   *     rt -----
7234   *          rs -----
7235   *               rd -----
7236   *                 shift -----
7237   */
7238  static char *EXTW(uint64 instruction, Dis_info *info)
7239  {
7240      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7241      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7242      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7243      uint64 shift_value = extract_shift_10_9_8_7_6(instruction);
7244  
7245      const char *rd = GPR(rd_value, info);
7246      const char *rs = GPR(rs_value, info);
7247      const char *rt = GPR(rt_value, info);
7248  
7249      return img_format("EXTW %s, %s, %s, 0x%" PRIx64, rd, rs, rt, shift_value);
7250  }
7251  
7252  
7253  /*
7254   *
7255   *
7256   *   3         2         1
7257   *  10987654321098765432109876543210
7258   *  001000               x1110000101
7259   *     rt -----
7260   *          rs -----
7261   *               rd -----
7262   */
7263  static char *FLOOR_L_D(uint64 instruction, Dis_info *info)
7264  {
7265      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7266      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7267  
7268      const char *ft = FPR(ft_value, info);
7269      const char *fs = FPR(fs_value, info);
7270  
7271      return img_format("FLOOR.L.D %s, %s", ft, fs);
7272  }
7273  
7274  
7275  /*
7276   *
7277   *
7278   *   3         2         1
7279   *  10987654321098765432109876543210
7280   *  001000               x1110000101
7281   *     rt -----
7282   *          rs -----
7283   *               rd -----
7284   */
7285  static char *FLOOR_L_S(uint64 instruction, Dis_info *info)
7286  {
7287      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7288      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7289  
7290      const char *ft = FPR(ft_value, info);
7291      const char *fs = FPR(fs_value, info);
7292  
7293      return img_format("FLOOR.L.S %s, %s", ft, fs);
7294  }
7295  
7296  
7297  /*
7298   *
7299   *
7300   *   3         2         1
7301   *  10987654321098765432109876543210
7302   *  001000               x1110000101
7303   *     rt -----
7304   *          rs -----
7305   *               rd -----
7306   */
7307  static char *FLOOR_W_D(uint64 instruction, Dis_info *info)
7308  {
7309      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7310      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7311  
7312      const char *ft = FPR(ft_value, info);
7313      const char *fs = FPR(fs_value, info);
7314  
7315      return img_format("FLOOR.W.D %s, %s", ft, fs);
7316  }
7317  
7318  
7319  /*
7320   *
7321   *
7322   *   3         2         1
7323   *  10987654321098765432109876543210
7324   *  001000               x1110000101
7325   *     rt -----
7326   *          rs -----
7327   *               rd -----
7328   */
7329  static char *FLOOR_W_S(uint64 instruction, Dis_info *info)
7330  {
7331      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7332      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
7333  
7334      const char *ft = FPR(ft_value, info);
7335      const char *fs = FPR(fs_value, info);
7336  
7337      return img_format("FLOOR.W.S %s, %s", ft, fs);
7338  }
7339  
7340  
7341  /*
7342   *
7343   *
7344   *   3         2         1
7345   *  10987654321098765432109876543210
7346   *  001000               x1110000101
7347   *     rt -----
7348   *          rs -----
7349   *               rd -----
7350   */
7351  static char *FORK(uint64 instruction, Dis_info *info)
7352  {
7353      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7354      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7355      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7356  
7357      const char *rd = GPR(rd_value, info);
7358      const char *rs = GPR(rs_value, info);
7359      const char *rt = GPR(rt_value, info);
7360  
7361      return img_format("FORK %s, %s, %s", rd, rs, rt);
7362  }
7363  
7364  
7365  /*
7366   *
7367   *
7368   *   3         2         1
7369   *  10987654321098765432109876543210
7370   *  001000               x1110000101
7371   *     rt -----
7372   *          rs -----
7373   *               rd -----
7374   */
7375  static char *HYPCALL(uint64 instruction, Dis_info *info)
7376  {
7377      uint64 code_value = extract_code_17_to_0(instruction);
7378  
7379  
7380      return img_format("HYPCALL 0x%" PRIx64, code_value);
7381  }
7382  
7383  
7384  /*
7385   *
7386   *
7387   *   3         2         1
7388   *  10987654321098765432109876543210
7389   *  001000               x1110000101
7390   *     rt -----
7391   *          rs -----
7392   *               rd -----
7393   */
7394  static char *HYPCALL_16_(uint64 instruction, Dis_info *info)
7395  {
7396      uint64 code_value = extract_code_1_0(instruction);
7397  
7398  
7399      return img_format("HYPCALL 0x%" PRIx64, code_value);
7400  }
7401  
7402  
7403  /*
7404   *
7405   *
7406   *   3         2         1
7407   *  10987654321098765432109876543210
7408   *  001000               x1110000101
7409   *     rt -----
7410   *          rs -----
7411   *               rd -----
7412   */
7413  static char *INS(uint64 instruction, Dis_info *info)
7414  {
7415      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7416      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7417      uint64 msbd_value = extract_msbt_10_9_8_7_6(instruction);
7418      uint64 lsb_value = extract_lsb_4_3_2_1_0(instruction);
7419  
7420      const char *rt = GPR(rt_value, info);
7421      const char *rs = GPR(rs_value, info);
7422      /* !!!!!!!!!! - no conversion function */
7423  
7424      return img_format("INS %s, %s, 0x%" PRIx64 ", 0x%" PRIx64,
7425                        rt, rs, lsb_value, msbd_value);
7426      /* hand edited */
7427  }
7428  
7429  
7430  /*
7431   * [DSP] INSV rt, rs - Insert bit field variable
7432   *
7433   *   3         2         1
7434   *  10987654321098765432109876543210
7435   *  001000          0100000100111111
7436   *     rt -----
7437   *          rs -----
7438   */
7439  static char *INSV(uint64 instruction, Dis_info *info)
7440  {
7441      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7442      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7443  
7444      const char *rt = GPR(rt_value, info);
7445      const char *rs = GPR(rs_value, info);
7446  
7447      return img_format("INSV %s, %s", rt, rs);
7448  }
7449  
7450  
7451  /*
7452   *
7453   *
7454   *   3         2         1
7455   *  10987654321098765432109876543210
7456   *  001000               x1110000101
7457   *     rt -----
7458   *          rs -----
7459   *               rd -----
7460   */
7461  static char *IRET(uint64 instruction, Dis_info *info)
7462  {
7463      (void)instruction;
7464  
7465      return g_strdup("IRET ");
7466  }
7467  
7468  
7469  /*
7470   *
7471   *
7472   *   3         2         1
7473   *  10987654321098765432109876543210
7474   *  001000               x1110000101
7475   *     rt -----
7476   *          rs -----
7477   *               rd -----
7478   */
7479  static char *JALRC_16_(uint64 instruction, Dis_info *info)
7480  {
7481      uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7482  
7483      const char *rt = GPR(rt_value, info);
7484  
7485      return img_format("JALRC $%d, %s", 31, rt);
7486  }
7487  
7488  
7489  /*
7490   *
7491   *
7492   *   3         2         1
7493   *  10987654321098765432109876543210
7494   *  001000               x1110000101
7495   *     rt -----
7496   *          rs -----
7497   *               rd -----
7498   */
7499  static char *JALRC_32_(uint64 instruction, Dis_info *info)
7500  {
7501      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7502      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7503  
7504      const char *rt = GPR(rt_value, info);
7505      const char *rs = GPR(rs_value, info);
7506  
7507      return img_format("JALRC %s, %s", rt, rs);
7508  }
7509  
7510  
7511  /*
7512   *
7513   *
7514   *   3         2         1
7515   *  10987654321098765432109876543210
7516   *  001000               x1110000101
7517   *     rt -----
7518   *          rs -----
7519   *               rd -----
7520   */
7521  static char *JALRC_HB(uint64 instruction, Dis_info *info)
7522  {
7523      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7524      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7525  
7526      const char *rt = GPR(rt_value, info);
7527      const char *rs = GPR(rs_value, info);
7528  
7529      return img_format("JALRC.HB %s, %s", rt, rs);
7530  }
7531  
7532  
7533  /*
7534   *
7535   *
7536   *   3         2         1
7537   *  10987654321098765432109876543210
7538   *  001000               x1110000101
7539   *     rt -----
7540   *          rs -----
7541   *               rd -----
7542   */
7543  static char *JRC(uint64 instruction, Dis_info *info)
7544  {
7545      uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
7546  
7547      const char *rt = GPR(rt_value, info);
7548  
7549      return img_format("JRC %s", rt);
7550  }
7551  
7552  
7553  /*
7554   *
7555   *
7556   *   3         2         1
7557   *  10987654321098765432109876543210
7558   *  001000               x1110000101
7559   *     rt -----
7560   *          rs -----
7561   *               rd -----
7562   */
7563  static char *LB_16_(uint64 instruction, Dis_info *info)
7564  {
7565      uint64 rt3_value = extract_rt3_9_8_7(instruction);
7566      uint64 rs3_value = extract_rs3_6_5_4(instruction);
7567      uint64 u_value = extract_u_1_0(instruction);
7568  
7569      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
7570      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
7571  
7572      return img_format("LB %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
7573  }
7574  
7575  
7576  /*
7577   *
7578   *
7579   *   3         2         1
7580   *  10987654321098765432109876543210
7581   *  001000               x1110000101
7582   *     rt -----
7583   *          rs -----
7584   *               rd -----
7585   */
7586  static char *LB_GP_(uint64 instruction, Dis_info *info)
7587  {
7588      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7589      uint64 u_value = extract_u_17_to_0(instruction);
7590  
7591      const char *rt = GPR(rt_value, info);
7592  
7593      return img_format("LB %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
7594  }
7595  
7596  
7597  /*
7598   *
7599   *
7600   *   3         2         1
7601   *  10987654321098765432109876543210
7602   *  001000               x1110000101
7603   *     rt -----
7604   *          rs -----
7605   *               rd -----
7606   */
7607  static char *LB_S9_(uint64 instruction, Dis_info *info)
7608  {
7609      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7610      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7611      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7612  
7613      const char *rt = GPR(rt_value, info);
7614      const char *rs = GPR(rs_value, info);
7615  
7616      return img_format("LB %s, %" PRId64 "(%s)", rt, s_value, rs);
7617  }
7618  
7619  
7620  /*
7621   *
7622   *
7623   *   3         2         1
7624   *  10987654321098765432109876543210
7625   *  001000               x1110000101
7626   *     rt -----
7627   *          rs -----
7628   *               rd -----
7629   */
7630  static char *LB_U12_(uint64 instruction, Dis_info *info)
7631  {
7632      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7633      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7634      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
7635  
7636      const char *rt = GPR(rt_value, info);
7637      const char *rs = GPR(rs_value, info);
7638  
7639      return img_format("LB %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
7640  }
7641  
7642  
7643  /*
7644   *
7645   *
7646   *   3         2         1
7647   *  10987654321098765432109876543210
7648   *  001000               x1110000101
7649   *     rt -----
7650   *          rs -----
7651   *               rd -----
7652   */
7653  static char *LBE(uint64 instruction, Dis_info *info)
7654  {
7655      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7656      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7657      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7658  
7659      const char *rt = GPR(rt_value, info);
7660      const char *rs = GPR(rs_value, info);
7661  
7662      return img_format("LBE %s, %" PRId64 "(%s)", rt, s_value, rs);
7663  }
7664  
7665  
7666  /*
7667   *
7668   *
7669   *   3         2         1
7670   *  10987654321098765432109876543210
7671   *  001000               x1110000101
7672   *     rt -----
7673   *          rs -----
7674   *               rd -----
7675   */
7676  static char *LBU_16_(uint64 instruction, Dis_info *info)
7677  {
7678      uint64 rt3_value = extract_rt3_9_8_7(instruction);
7679      uint64 rs3_value = extract_rs3_6_5_4(instruction);
7680      uint64 u_value = extract_u_1_0(instruction);
7681  
7682      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
7683      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
7684  
7685      return img_format("LBU %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
7686  }
7687  
7688  
7689  /*
7690   *
7691   *
7692   *   3         2         1
7693   *  10987654321098765432109876543210
7694   *  001000               x1110000101
7695   *     rt -----
7696   *          rs -----
7697   *               rd -----
7698   */
7699  static char *LBU_GP_(uint64 instruction, Dis_info *info)
7700  {
7701      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7702      uint64 u_value = extract_u_17_to_0(instruction);
7703  
7704      const char *rt = GPR(rt_value, info);
7705  
7706      return img_format("LBU %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
7707  }
7708  
7709  
7710  /*
7711   *
7712   *
7713   *   3         2         1
7714   *  10987654321098765432109876543210
7715   *  001000               x1110000101
7716   *     rt -----
7717   *          rs -----
7718   *               rd -----
7719   */
7720  static char *LBU_S9_(uint64 instruction, Dis_info *info)
7721  {
7722      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7723      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7724      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7725  
7726      const char *rt = GPR(rt_value, info);
7727      const char *rs = GPR(rs_value, info);
7728  
7729      return img_format("LBU %s, %" PRId64 "(%s)", rt, s_value, rs);
7730  }
7731  
7732  
7733  /*
7734   *
7735   *
7736   *   3         2         1
7737   *  10987654321098765432109876543210
7738   *  001000               x1110000101
7739   *     rt -----
7740   *          rs -----
7741   *               rd -----
7742   */
7743  static char *LBU_U12_(uint64 instruction, Dis_info *info)
7744  {
7745      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7746      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7747      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
7748  
7749      const char *rt = GPR(rt_value, info);
7750      const char *rs = GPR(rs_value, info);
7751  
7752      return img_format("LBU %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
7753  }
7754  
7755  
7756  /*
7757   *
7758   *
7759   *   3         2         1
7760   *  10987654321098765432109876543210
7761   *  001000               x1110000101
7762   *     rt -----
7763   *          rs -----
7764   *               rd -----
7765   */
7766  static char *LBUE(uint64 instruction, Dis_info *info)
7767  {
7768      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7769      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7770      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7771  
7772      const char *rt = GPR(rt_value, info);
7773      const char *rs = GPR(rs_value, info);
7774  
7775      return img_format("LBUE %s, %" PRId64 "(%s)", rt, s_value, rs);
7776  }
7777  
7778  
7779  /*
7780   *
7781   *
7782   *   3         2         1
7783   *  10987654321098765432109876543210
7784   *  001000               x1110000101
7785   *     rt -----
7786   *          rs -----
7787   *               rd -----
7788   */
7789  static char *LBUX(uint64 instruction, Dis_info *info)
7790  {
7791      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7792      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7793      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7794  
7795      const char *rd = GPR(rd_value, info);
7796      const char *rs = GPR(rs_value, info);
7797      const char *rt = GPR(rt_value, info);
7798  
7799      return img_format("LBUX %s, %s(%s)", rd, rs, rt);
7800  }
7801  
7802  
7803  /*
7804   *
7805   *
7806   *   3         2         1
7807   *  10987654321098765432109876543210
7808   *  001000               x1110000101
7809   *     rt -----
7810   *          rs -----
7811   *               rd -----
7812   */
7813  static char *LBX(uint64 instruction, Dis_info *info)
7814  {
7815      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7816      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7817      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
7818  
7819      const char *rd = GPR(rd_value, info);
7820      const char *rs = GPR(rs_value, info);
7821      const char *rt = GPR(rt_value, info);
7822  
7823      return img_format("LBX %s, %s(%s)", rd, rs, rt);
7824  }
7825  
7826  
7827  /*
7828   *
7829   *
7830   *   3         2         1
7831   *  10987654321098765432109876543210
7832   *  001000               x1110000101
7833   *     rt -----
7834   *          rs -----
7835   *               rd -----
7836   */
7837  static char *LD_GP_(uint64 instruction, Dis_info *info)
7838  {
7839      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7840      uint64 u_value = extract_u_20_to_3__s3(instruction);
7841  
7842      const char *rt = GPR(rt_value, info);
7843  
7844      return img_format("LD %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
7845  }
7846  
7847  
7848  /*
7849   *
7850   *
7851   *   3         2         1
7852   *  10987654321098765432109876543210
7853   *  001000               x1110000101
7854   *     rt -----
7855   *          rs -----
7856   *               rd -----
7857   */
7858  static char *LD_S9_(uint64 instruction, Dis_info *info)
7859  {
7860      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7861      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7862      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7863  
7864      const char *rt = GPR(rt_value, info);
7865      const char *rs = GPR(rs_value, info);
7866  
7867      return img_format("LD %s, %" PRId64 "(%s)", rt, s_value, rs);
7868  }
7869  
7870  
7871  /*
7872   *
7873   *
7874   *   3         2         1
7875   *  10987654321098765432109876543210
7876   *  001000               x1110000101
7877   *     rt -----
7878   *          rs -----
7879   *               rd -----
7880   */
7881  static char *LD_U12_(uint64 instruction, Dis_info *info)
7882  {
7883      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7884      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7885      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
7886  
7887      const char *rt = GPR(rt_value, info);
7888      const char *rs = GPR(rs_value, info);
7889  
7890      return img_format("LD %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
7891  }
7892  
7893  
7894  /*
7895   *
7896   *
7897   *   3         2         1
7898   *  10987654321098765432109876543210
7899   *  001000               x1110000101
7900   *     rt -----
7901   *          rs -----
7902   *               rd -----
7903   */
7904  static char *LDC1_GP_(uint64 instruction, Dis_info *info)
7905  {
7906      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7907      uint64 u_value = extract_u_17_to_2__s2(instruction);
7908  
7909      const char *ft = FPR(ft_value, info);
7910  
7911      return img_format("LDC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28);
7912  }
7913  
7914  
7915  /*
7916   *
7917   *
7918   *   3         2         1
7919   *  10987654321098765432109876543210
7920   *  001000               x1110000101
7921   *     rt -----
7922   *          rs -----
7923   *               rd -----
7924   */
7925  static char *LDC1_S9_(uint64 instruction, Dis_info *info)
7926  {
7927      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7928      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7929      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
7930  
7931      const char *ft = FPR(ft_value, info);
7932      const char *rs = GPR(rs_value, info);
7933  
7934      return img_format("LDC1 %s, %" PRId64 "(%s)", ft, s_value, rs);
7935  }
7936  
7937  
7938  /*
7939   *
7940   *
7941   *   3         2         1
7942   *  10987654321098765432109876543210
7943   *  001000               x1110000101
7944   *     rt -----
7945   *          rs -----
7946   *               rd -----
7947   */
7948  static char *LDC1_U12_(uint64 instruction, Dis_info *info)
7949  {
7950      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
7951      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7952      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
7953  
7954      const char *ft = FPR(ft_value, info);
7955      const char *rs = GPR(rs_value, info);
7956  
7957      return img_format("LDC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs);
7958  }
7959  
7960  
7961  /*
7962   *
7963   *
7964   *   3         2         1
7965   *  10987654321098765432109876543210
7966   *  001000               x1110000101
7967   *     rt -----
7968   *          rs -----
7969   *               rd -----
7970   */
7971  static char *LDC1XS(uint64 instruction, Dis_info *info)
7972  {
7973      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7974      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7975      uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
7976  
7977      const char *ft = FPR(ft_value, info);
7978      const char *rs = GPR(rs_value, info);
7979      const char *rt = GPR(rt_value, info);
7980  
7981      return img_format("LDC1XS %s, %s(%s)", ft, rs, rt);
7982  }
7983  
7984  
7985  /*
7986   *
7987   *
7988   *   3         2         1
7989   *  10987654321098765432109876543210
7990   *  001000               x1110000101
7991   *     rt -----
7992   *          rs -----
7993   *               rd -----
7994   */
7995  static char *LDC1X(uint64 instruction, Dis_info *info)
7996  {
7997      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
7998      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
7999      uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8000  
8001      const char *ft = FPR(ft_value, info);
8002      const char *rs = GPR(rs_value, info);
8003      const char *rt = GPR(rt_value, info);
8004  
8005      return img_format("LDC1X %s, %s(%s)", ft, rs, rt);
8006  }
8007  
8008  
8009  /*
8010   *
8011   *
8012   *   3         2         1
8013   *  10987654321098765432109876543210
8014   *  001000               x1110000101
8015   *     rt -----
8016   *          rs -----
8017   *               rd -----
8018   */
8019  static char *LDC2(uint64 instruction, Dis_info *info)
8020  {
8021      uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
8022      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8023      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8024  
8025      const char *rs = GPR(rs_value, info);
8026  
8027      return img_format("LDC2 CP%" PRIu64 ", %" PRId64 "(%s)",
8028                        ct_value, s_value, rs);
8029  }
8030  
8031  
8032  /*
8033   *
8034   *
8035   *   3         2         1
8036   *  10987654321098765432109876543210
8037   *  001000               x1110000101
8038   *     rt -----
8039   *          rs -----
8040   *               rd -----
8041   */
8042  static char *LDM(uint64 instruction, Dis_info *info)
8043  {
8044      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8045      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8046      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8047      uint64 count3_value = extract_count3_14_13_12(instruction);
8048  
8049      const char *rt = GPR(rt_value, info);
8050      const char *rs = GPR(rs_value, info);
8051      uint64 count3 = encode_count3_from_count(count3_value);
8052  
8053      return img_format("LDM %s, %" PRId64 "(%s), 0x%" PRIx64,
8054                        rt, s_value, rs, count3);
8055  }
8056  
8057  
8058  /*
8059   *
8060   *
8061   *   3         2         1
8062   *  10987654321098765432109876543210
8063   *  001000               x1110000101
8064   *     rt -----
8065   *          rs -----
8066   *               rd -----
8067   */
8068  static char *LDPC_48_(uint64 instruction, Dis_info *info)
8069  {
8070      uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8071      int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8072  
8073      const char *rt = GPR(rt_value, info);
8074      g_autofree char *s = ADDRESS(s_value, 6, info);
8075  
8076      return img_format("LDPC %s, %s", rt, s);
8077  }
8078  
8079  
8080  /*
8081   *
8082   *
8083   *   3         2         1
8084   *  10987654321098765432109876543210
8085   *  001000               x1110000101
8086   *     rt -----
8087   *          rs -----
8088   *               rd -----
8089   */
8090  static char *LDX(uint64 instruction, Dis_info *info)
8091  {
8092      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8093      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8094      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8095  
8096      const char *rd = GPR(rd_value, info);
8097      const char *rs = GPR(rs_value, info);
8098      const char *rt = GPR(rt_value, info);
8099  
8100      return img_format("LDX %s, %s(%s)", rd, rs, rt);
8101  }
8102  
8103  
8104  /*
8105   *
8106   *
8107   *   3         2         1
8108   *  10987654321098765432109876543210
8109   *  001000               x1110000101
8110   *     rt -----
8111   *          rs -----
8112   *               rd -----
8113   */
8114  static char *LDXS(uint64 instruction, Dis_info *info)
8115  {
8116      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8117      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8118      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8119  
8120      const char *rd = GPR(rd_value, info);
8121      const char *rs = GPR(rs_value, info);
8122      const char *rt = GPR(rt_value, info);
8123  
8124      return img_format("LDXS %s, %s(%s)", rd, rs, rt);
8125  }
8126  
8127  
8128  /*
8129   *
8130   *
8131   *   3         2         1
8132   *  10987654321098765432109876543210
8133   *  001000               x1110000101
8134   *     rt -----
8135   *          rs -----
8136   *               rd -----
8137   */
8138  static char *LH_16_(uint64 instruction, Dis_info *info)
8139  {
8140      uint64 rt3_value = extract_rt3_9_8_7(instruction);
8141      uint64 rs3_value = extract_rs3_6_5_4(instruction);
8142      uint64 u_value = extract_u_2_1__s1(instruction);
8143  
8144      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8145      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
8146  
8147      return img_format("LH %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
8148  }
8149  
8150  
8151  /*
8152   *
8153   *
8154   *   3         2         1
8155   *  10987654321098765432109876543210
8156   *  001000               x1110000101
8157   *     rt -----
8158   *          rs -----
8159   *               rd -----
8160   */
8161  static char *LH_GP_(uint64 instruction, Dis_info *info)
8162  {
8163      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8164      uint64 u_value = extract_u_17_to_1__s1(instruction);
8165  
8166      const char *rt = GPR(rt_value, info);
8167  
8168      return img_format("LH %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
8169  }
8170  
8171  
8172  /*
8173   *
8174   *
8175   *   3         2         1
8176   *  10987654321098765432109876543210
8177   *  001000               x1110000101
8178   *     rt -----
8179   *          rs -----
8180   *               rd -----
8181   */
8182  static char *LH_S9_(uint64 instruction, Dis_info *info)
8183  {
8184      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8185      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8186      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8187  
8188      const char *rt = GPR(rt_value, info);
8189      const char *rs = GPR(rs_value, info);
8190  
8191      return img_format("LH %s, %" PRId64 "(%s)", rt, s_value, rs);
8192  }
8193  
8194  
8195  /*
8196   *
8197   *
8198   *   3         2         1
8199   *  10987654321098765432109876543210
8200   *  001000               x1110000101
8201   *     rt -----
8202   *          rs -----
8203   *               rd -----
8204   */
8205  static char *LH_U12_(uint64 instruction, Dis_info *info)
8206  {
8207      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8208      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8209      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8210  
8211      const char *rt = GPR(rt_value, info);
8212      const char *rs = GPR(rs_value, info);
8213  
8214      return img_format("LH %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
8215  }
8216  
8217  
8218  /*
8219   *
8220   *
8221   *   3         2         1
8222   *  10987654321098765432109876543210
8223   *  001000               x1110000101
8224   *     rt -----
8225   *          rs -----
8226   *               rd -----
8227   */
8228  static char *LHE(uint64 instruction, Dis_info *info)
8229  {
8230      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8231      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8232      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8233  
8234      const char *rt = GPR(rt_value, info);
8235      const char *rs = GPR(rs_value, info);
8236  
8237      return img_format("LHE %s, %" PRId64 "(%s)", rt, s_value, rs);
8238  }
8239  
8240  
8241  /*
8242   *
8243   *
8244   *   3         2         1
8245   *  10987654321098765432109876543210
8246   *  001000               x1110000101
8247   *     rt -----
8248   *          rs -----
8249   *               rd -----
8250   */
8251  static char *LHU_16_(uint64 instruction, Dis_info *info)
8252  {
8253      uint64 rt3_value = extract_rt3_9_8_7(instruction);
8254      uint64 rs3_value = extract_rs3_6_5_4(instruction);
8255      uint64 u_value = extract_u_2_1__s1(instruction);
8256  
8257      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8258      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
8259  
8260      return img_format("LHU %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
8261  }
8262  
8263  
8264  /*
8265   *
8266   *
8267   *   3         2         1
8268   *  10987654321098765432109876543210
8269   *  001000               x1110000101
8270   *     rt -----
8271   *          rs -----
8272   *               rd -----
8273   */
8274  static char *LHU_GP_(uint64 instruction, Dis_info *info)
8275  {
8276      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8277      uint64 u_value = extract_u_17_to_1__s1(instruction);
8278  
8279      const char *rt = GPR(rt_value, info);
8280  
8281      return img_format("LHU %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
8282  }
8283  
8284  
8285  /*
8286   *
8287   *
8288   *   3         2         1
8289   *  10987654321098765432109876543210
8290   *  001000               x1110000101
8291   *     rt -----
8292   *          rs -----
8293   *               rd -----
8294   */
8295  static char *LHU_S9_(uint64 instruction, Dis_info *info)
8296  {
8297      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8298      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8299      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8300  
8301      const char *rt = GPR(rt_value, info);
8302      const char *rs = GPR(rs_value, info);
8303  
8304      return img_format("LHU %s, %" PRId64 "(%s)", rt, s_value, rs);
8305  }
8306  
8307  
8308  /*
8309   *
8310   *
8311   *   3         2         1
8312   *  10987654321098765432109876543210
8313   *  001000               x1110000101
8314   *     rt -----
8315   *          rs -----
8316   *               rd -----
8317   */
8318  static char *LHU_U12_(uint64 instruction, Dis_info *info)
8319  {
8320      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8321      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8322      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8323  
8324      const char *rt = GPR(rt_value, info);
8325      const char *rs = GPR(rs_value, info);
8326  
8327      return img_format("LHU %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
8328  }
8329  
8330  
8331  /*
8332   *
8333   *
8334   *   3         2         1
8335   *  10987654321098765432109876543210
8336   *  001000               x1110000101
8337   *     rt -----
8338   *          rs -----
8339   *               rd -----
8340   */
8341  static char *LHUE(uint64 instruction, Dis_info *info)
8342  {
8343      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8344      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8345      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8346  
8347      const char *rt = GPR(rt_value, info);
8348      const char *rs = GPR(rs_value, info);
8349  
8350      return img_format("LHUE %s, %" PRId64 "(%s)", rt, s_value, rs);
8351  }
8352  
8353  
8354  /*
8355   *
8356   *
8357   *   3         2         1
8358   *  10987654321098765432109876543210
8359   *  001000               x1110000101
8360   *     rt -----
8361   *          rs -----
8362   *               rd -----
8363   */
8364  static char *LHUX(uint64 instruction, Dis_info *info)
8365  {
8366      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8367      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8368      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8369  
8370      const char *rd = GPR(rd_value, info);
8371      const char *rs = GPR(rs_value, info);
8372      const char *rt = GPR(rt_value, info);
8373  
8374      return img_format("LHUX %s, %s(%s)", rd, rs, rt);
8375  }
8376  
8377  
8378  /*
8379   *
8380   *
8381   *   3         2         1
8382   *  10987654321098765432109876543210
8383   *  001000               x1110000101
8384   *     rt -----
8385   *          rs -----
8386   *               rd -----
8387   */
8388  static char *LHUXS(uint64 instruction, Dis_info *info)
8389  {
8390      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8391      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8392      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8393  
8394      const char *rd = GPR(rd_value, info);
8395      const char *rs = GPR(rs_value, info);
8396      const char *rt = GPR(rt_value, info);
8397  
8398      return img_format("LHUXS %s, %s(%s)", rd, rs, rt);
8399  }
8400  
8401  
8402  /*
8403   *
8404   *
8405   *   3         2         1
8406   *  10987654321098765432109876543210
8407   *  001000               x1110000101
8408   *     rt -----
8409   *          rs -----
8410   *               rd -----
8411   */
8412  static char *LHXS(uint64 instruction, Dis_info *info)
8413  {
8414      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8415      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8416      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8417  
8418      const char *rd = GPR(rd_value, info);
8419      const char *rs = GPR(rs_value, info);
8420      const char *rt = GPR(rt_value, info);
8421  
8422      return img_format("LHXS %s, %s(%s)", rd, rs, rt);
8423  }
8424  
8425  
8426  /*
8427   *
8428   *
8429   *   3         2         1
8430   *  10987654321098765432109876543210
8431   *  001000               x1110000101
8432   *     rt -----
8433   *          rs -----
8434   *               rd -----
8435   */
8436  static char *LHX(uint64 instruction, Dis_info *info)
8437  {
8438      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8439      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8440      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8441  
8442      const char *rd = GPR(rd_value, info);
8443      const char *rs = GPR(rs_value, info);
8444      const char *rt = GPR(rt_value, info);
8445  
8446      return img_format("LHX %s, %s(%s)", rd, rs, rt);
8447  }
8448  
8449  
8450  /*
8451   *
8452   *
8453   *   3         2         1
8454   *  10987654321098765432109876543210
8455   *  001000               x1110000101
8456   *     rt -----
8457   *          rs -----
8458   *               rd -----
8459   */
8460  static char *LI_16_(uint64 instruction, Dis_info *info)
8461  {
8462      uint64 rt3_value = extract_rt3_9_8_7(instruction);
8463      uint64 eu_value = extract_eu_6_5_4_3_2_1_0(instruction);
8464  
8465      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8466      int64 eu = encode_eu_from_s_li16(eu_value);
8467  
8468      return img_format("LI %s, %" PRId64, rt3, eu);
8469  }
8470  
8471  
8472  /*
8473   *
8474   *
8475   *   3         2         1
8476   *  10987654321098765432109876543210
8477   *  001000               x1110000101
8478   *     rt -----
8479   *          rs -----
8480   *               rd -----
8481   */
8482  static char *LI_48_(uint64 instruction, Dis_info *info)
8483  {
8484      uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
8485      int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
8486  
8487      const char *rt = GPR(rt_value, info);
8488  
8489      return img_format("LI %s, %" PRId64, rt, s_value);
8490  }
8491  
8492  
8493  /*
8494   *
8495   *
8496   *   3         2         1
8497   *  10987654321098765432109876543210
8498   *  001000               x1110000101
8499   *     rt -----
8500   *          rs -----
8501   *               rd -----
8502   */
8503  static char *LL(uint64 instruction, Dis_info *info)
8504  {
8505      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8506      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8507      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
8508  
8509      const char *rt = GPR(rt_value, info);
8510      const char *rs = GPR(rs_value, info);
8511  
8512      return img_format("LL %s, %" PRId64 "(%s)", rt, s_value, rs);
8513  }
8514  
8515  
8516  /*
8517   *
8518   *
8519   *   3         2         1
8520   *  10987654321098765432109876543210
8521   *  001000               x1110000101
8522   *     rt -----
8523   *          rs -----
8524   *               rd -----
8525   */
8526  static char *LLD(uint64 instruction, Dis_info *info)
8527  {
8528      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8529      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8530      int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
8531  
8532      const char *rt = GPR(rt_value, info);
8533      const char *rs = GPR(rs_value, info);
8534  
8535      return img_format("LLD %s, %" PRId64 "(%s)", rt, s_value, rs);
8536  }
8537  
8538  
8539  /*
8540   *
8541   *
8542   *   3         2         1
8543   *  10987654321098765432109876543210
8544   *  001000               x1110000101
8545   *     rt -----
8546   *          rs -----
8547   *               rd -----
8548   */
8549  static char *LLDP(uint64 instruction, Dis_info *info)
8550  {
8551      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8552      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8553      uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
8554  
8555      const char *rt = GPR(rt_value, info);
8556      const char *ru = GPR(ru_value, info);
8557      const char *rs = GPR(rs_value, info);
8558  
8559      return img_format("LLDP %s, %s, (%s)", rt, ru, rs);
8560  }
8561  
8562  
8563  /*
8564   *
8565   *
8566   *   3         2         1
8567   *  10987654321098765432109876543210
8568   *  001000               x1110000101
8569   *     rt -----
8570   *          rs -----
8571   *               rd -----
8572   */
8573  static char *LLE(uint64 instruction, Dis_info *info)
8574  {
8575      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8576      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8577      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
8578  
8579      const char *rt = GPR(rt_value, info);
8580      const char *rs = GPR(rs_value, info);
8581  
8582      return img_format("LLE %s, %" PRId64 "(%s)", rt, s_value, rs);
8583  }
8584  
8585  
8586  /*
8587   *
8588   *
8589   *   3         2         1
8590   *  10987654321098765432109876543210
8591   *  001000               x1110000101
8592   *     rt -----
8593   *          rs -----
8594   *               rd -----
8595   */
8596  static char *LLWP(uint64 instruction, Dis_info *info)
8597  {
8598      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8599      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8600      uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
8601  
8602      const char *rt = GPR(rt_value, info);
8603      const char *ru = GPR(ru_value, info);
8604      const char *rs = GPR(rs_value, info);
8605  
8606      return img_format("LLWP %s, %s, (%s)", rt, ru, rs);
8607  }
8608  
8609  
8610  /*
8611   *
8612   *
8613   *   3         2         1
8614   *  10987654321098765432109876543210
8615   *  001000               x1110000101
8616   *     rt -----
8617   *          rs -----
8618   *               rd -----
8619   */
8620  static char *LLWPE(uint64 instruction, Dis_info *info)
8621  {
8622      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8623      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8624      uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
8625  
8626      const char *rt = GPR(rt_value, info);
8627      const char *ru = GPR(ru_value, info);
8628      const char *rs = GPR(rs_value, info);
8629  
8630      return img_format("LLWPE %s, %s, (%s)", rt, ru, rs);
8631  }
8632  
8633  
8634  /*
8635   *
8636   *
8637   *   3         2         1
8638   *  10987654321098765432109876543210
8639   *  001000               x1110000101
8640   *     rt -----
8641   *          rs -----
8642   *               rd -----
8643   */
8644  static char *LSA(uint64 instruction, Dis_info *info)
8645  {
8646      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8647      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8648      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
8649      uint64 u2_value = extract_u2_10_9(instruction);
8650  
8651      const char *rd = GPR(rd_value, info);
8652      const char *rs = GPR(rs_value, info);
8653      const char *rt = GPR(rt_value, info);
8654  
8655      return img_format("LSA %s, %s, %s, 0x%" PRIx64, rd, rs, rt, u2_value);
8656  }
8657  
8658  
8659  /*
8660   *
8661   *
8662   *   3         2         1
8663   *  10987654321098765432109876543210
8664   *  001000               x1110000101
8665   *     rt -----
8666   *          rs -----
8667   *               rd -----
8668   */
8669  static char *LUI(uint64 instruction, Dis_info *info)
8670  {
8671      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8672      int64 s_value = extract_s__se31_0_11_to_2_20_to_12_s12(instruction);
8673  
8674      const char *rt = GPR(rt_value, info);
8675  
8676      return img_format("LUI %s, %%hi(%" PRId64 ")", rt, s_value);
8677  }
8678  
8679  
8680  /*
8681   *
8682   *
8683   *   3         2         1
8684   *  10987654321098765432109876543210
8685   *  001000               x1110000101
8686   *     rt -----
8687   *          rs -----
8688   *               rd -----
8689   */
8690  static char *LW_16_(uint64 instruction, Dis_info *info)
8691  {
8692      uint64 rt3_value = extract_rt3_9_8_7(instruction);
8693      uint64 rs3_value = extract_rs3_6_5_4(instruction);
8694      uint64 u_value = extract_u_3_2_1_0__s2(instruction);
8695  
8696      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8697      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
8698  
8699      return img_format("LW %s, 0x%" PRIx64 "(%s)", rt3, u_value, rs3);
8700  }
8701  
8702  
8703  /*
8704   *
8705   *
8706   *   3         2         1
8707   *  10987654321098765432109876543210
8708   *  001000               x1110000101
8709   *     rt -----
8710   *          rs -----
8711   *               rd -----
8712   */
8713  static char *LW_4X4_(uint64 instruction, Dis_info *info)
8714  {
8715      uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
8716      uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
8717      uint64 u_value = extract_u_3_8__s2(instruction);
8718  
8719      const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info);
8720      const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
8721  
8722      return img_format("LW %s, 0x%" PRIx64 "(%s)", rt4, u_value, rs4);
8723  }
8724  
8725  
8726  /*
8727   *
8728   *
8729   *   3         2         1
8730   *  10987654321098765432109876543210
8731   *  001000               x1110000101
8732   *     rt -----
8733   *          rs -----
8734   *               rd -----
8735   */
8736  static char *LW_GP_(uint64 instruction, Dis_info *info)
8737  {
8738      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8739      uint64 u_value = extract_u_20_to_2__s2(instruction);
8740  
8741      const char *rt = GPR(rt_value, info);
8742  
8743      return img_format("LW %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
8744  }
8745  
8746  
8747  /*
8748   *
8749   *
8750   *   3         2         1
8751   *  10987654321098765432109876543210
8752   *  001000               x1110000101
8753   *     rt -----
8754   *          rs -----
8755   *               rd -----
8756   */
8757  static char *LW_GP16_(uint64 instruction, Dis_info *info)
8758  {
8759      uint64 rt3_value = extract_rt3_9_8_7(instruction);
8760      uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
8761  
8762      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
8763  
8764      return img_format("LW %s, 0x%" PRIx64 "($%d)", rt3, u_value, 28);
8765  }
8766  
8767  
8768  /*
8769   *
8770   *
8771   *   3         2         1
8772   *  10987654321098765432109876543210
8773   *  001000               x1110000101
8774   *     rt -----
8775   *          rs -----
8776   *               rd -----
8777   */
8778  static char *LW_S9_(uint64 instruction, Dis_info *info)
8779  {
8780      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8781      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8782      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8783  
8784      const char *rt = GPR(rt_value, info);
8785      const char *rs = GPR(rs_value, info);
8786  
8787      return img_format("LW %s, %" PRId64 "(%s)", rt, s_value, rs);
8788  }
8789  
8790  
8791  /*
8792   *
8793   *
8794   *   3         2         1
8795   *  10987654321098765432109876543210
8796   *  001000               x1110000101
8797   *     rt -----
8798   *          rs -----
8799   *               rd -----
8800   */
8801  static char *LW_SP_(uint64 instruction, Dis_info *info)
8802  {
8803      uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
8804      uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
8805  
8806      const char *rt = GPR(rt_value, info);
8807  
8808      return img_format("LW %s, 0x%" PRIx64 "($%d)", rt, u_value, 29);
8809  }
8810  
8811  
8812  /*
8813   *
8814   *
8815   *   3         2         1
8816   *  10987654321098765432109876543210
8817   *  001000               x1110000101
8818   *     rt -----
8819   *          rs -----
8820   *               rd -----
8821   */
8822  static char *LW_U12_(uint64 instruction, Dis_info *info)
8823  {
8824      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8825      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8826      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8827  
8828      const char *rt = GPR(rt_value, info);
8829      const char *rs = GPR(rs_value, info);
8830  
8831      return img_format("LW %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
8832  }
8833  
8834  
8835  /*
8836   *
8837   *
8838   *   3         2         1
8839   *  10987654321098765432109876543210
8840   *  001000               x1110000101
8841   *     rt -----
8842   *          rs -----
8843   *               rd -----
8844   */
8845  static char *LWC1_GP_(uint64 instruction, Dis_info *info)
8846  {
8847      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8848      uint64 u_value = extract_u_17_to_2__s2(instruction);
8849  
8850      const char *ft = FPR(ft_value, info);
8851  
8852      return img_format("LWC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28);
8853  }
8854  
8855  
8856  /*
8857   *
8858   *
8859   *   3         2         1
8860   *  10987654321098765432109876543210
8861   *  001000               x1110000101
8862   *     rt -----
8863   *          rs -----
8864   *               rd -----
8865   */
8866  static char *LWC1_S9_(uint64 instruction, Dis_info *info)
8867  {
8868      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8869      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8870      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8871  
8872      const char *ft = FPR(ft_value, info);
8873      const char *rs = GPR(rs_value, info);
8874  
8875      return img_format("LWC1 %s, %" PRId64 "(%s)", ft, s_value, rs);
8876  }
8877  
8878  
8879  /*
8880   *
8881   *
8882   *   3         2         1
8883   *  10987654321098765432109876543210
8884   *  001000               x1110000101
8885   *     rt -----
8886   *          rs -----
8887   *               rd -----
8888   */
8889  static char *LWC1_U12_(uint64 instruction, Dis_info *info)
8890  {
8891      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
8892      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8893      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
8894  
8895      const char *ft = FPR(ft_value, info);
8896      const char *rs = GPR(rs_value, info);
8897  
8898      return img_format("LWC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs);
8899  }
8900  
8901  
8902  /*
8903   *
8904   *
8905   *   3         2         1
8906   *  10987654321098765432109876543210
8907   *  001000               x1110000101
8908   *     rt -----
8909   *          rs -----
8910   *               rd -----
8911   */
8912  static char *LWC1X(uint64 instruction, Dis_info *info)
8913  {
8914      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8915      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8916      uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8917  
8918      const char *ft = FPR(ft_value, info);
8919      const char *rs = GPR(rs_value, info);
8920      const char *rt = GPR(rt_value, info);
8921  
8922      return img_format("LWC1X %s, %s(%s)", ft, rs, rt);
8923  }
8924  
8925  
8926  /*
8927   *
8928   *
8929   *   3         2         1
8930   *  10987654321098765432109876543210
8931   *  001000               x1110000101
8932   *     rt -----
8933   *          rs -----
8934   *               rd -----
8935   */
8936  static char *LWC1XS(uint64 instruction, Dis_info *info)
8937  {
8938      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8939      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8940      uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
8941  
8942      const char *ft = FPR(ft_value, info);
8943      const char *rs = GPR(rs_value, info);
8944      const char *rt = GPR(rt_value, info);
8945  
8946      return img_format("LWC1XS %s, %s(%s)", ft, rs, rt);
8947  }
8948  
8949  
8950  /*
8951   *
8952   *
8953   *   3         2         1
8954   *  10987654321098765432109876543210
8955   *  001000               x1110000101
8956   *     rt -----
8957   *          rs -----
8958   *               rd -----
8959   */
8960  static char *LWC2(uint64 instruction, Dis_info *info)
8961  {
8962      uint64 ct_value = extract_ct_25_24_23_22_21(instruction);
8963      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8964      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8965  
8966      const char *rs = GPR(rs_value, info);
8967  
8968      return img_format("LWC2 CP%" PRIu64 ", %" PRId64 "(%s)",
8969                        ct_value, s_value, rs);
8970  }
8971  
8972  
8973  /*
8974   *
8975   *
8976   *   3         2         1
8977   *  10987654321098765432109876543210
8978   *  001000               x1110000101
8979   *     rt -----
8980   *          rs -----
8981   *               rd -----
8982   */
8983  static char *LWE(uint64 instruction, Dis_info *info)
8984  {
8985      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
8986      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
8987      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
8988  
8989      const char *rt = GPR(rt_value, info);
8990      const char *rs = GPR(rs_value, info);
8991  
8992      return img_format("LWE %s, %" PRId64 "(%s)", rt, s_value, rs);
8993  }
8994  
8995  
8996  /*
8997   *
8998   *
8999   *   3         2         1
9000   *  10987654321098765432109876543210
9001   *  001000               x1110000101
9002   *     rt -----
9003   *          rs -----
9004   *               rd -----
9005   */
9006  static char *LWM(uint64 instruction, Dis_info *info)
9007  {
9008      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9009      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9010      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9011      uint64 count3_value = extract_count3_14_13_12(instruction);
9012  
9013      const char *rt = GPR(rt_value, info);
9014      const char *rs = GPR(rs_value, info);
9015      uint64 count3 = encode_count3_from_count(count3_value);
9016  
9017      return img_format("LWM %s, %" PRId64 "(%s), 0x%" PRIx64,
9018                        rt, s_value, rs, count3);
9019  }
9020  
9021  
9022  /*
9023   *
9024   *
9025   *   3         2         1
9026   *  10987654321098765432109876543210
9027   *  001000               x1110000101
9028   *     rt -----
9029   *          rs -----
9030   *               rd -----
9031   */
9032  static char *LWPC_48_(uint64 instruction, Dis_info *info)
9033  {
9034      uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
9035      int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
9036  
9037      const char *rt = GPR(rt_value, info);
9038      g_autofree char *s = ADDRESS(s_value, 6, info);
9039  
9040      return img_format("LWPC %s, %s", rt, s);
9041  }
9042  
9043  
9044  /*
9045   *
9046   *
9047   *   3         2         1
9048   *  10987654321098765432109876543210
9049   *  001000               x1110000101
9050   *     rt -----
9051   *          rs -----
9052   *               rd -----
9053   */
9054  static char *LWU_GP_(uint64 instruction, Dis_info *info)
9055  {
9056      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9057      uint64 u_value = extract_u_17_to_2__s2(instruction);
9058  
9059      const char *rt = GPR(rt_value, info);
9060  
9061      return img_format("LWU %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
9062  }
9063  
9064  
9065  /*
9066   *
9067   *
9068   *   3         2         1
9069   *  10987654321098765432109876543210
9070   *  001000               x1110000101
9071   *     rt -----
9072   *          rs -----
9073   *               rd -----
9074   */
9075  static char *LWU_S9_(uint64 instruction, Dis_info *info)
9076  {
9077      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9078      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9079      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
9080  
9081      const char *rt = GPR(rt_value, info);
9082      const char *rs = GPR(rs_value, info);
9083  
9084      return img_format("LWU %s, %" PRId64 "(%s)", rt, s_value, rs);
9085  }
9086  
9087  
9088  /*
9089   *
9090   *
9091   *   3         2         1
9092   *  10987654321098765432109876543210
9093   *  001000               x1110000101
9094   *     rt -----
9095   *          rs -----
9096   *               rd -----
9097   */
9098  static char *LWU_U12_(uint64 instruction, Dis_info *info)
9099  {
9100      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9101      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9102      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
9103  
9104      const char *rt = GPR(rt_value, info);
9105      const char *rs = GPR(rs_value, info);
9106  
9107      return img_format("LWU %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
9108  }
9109  
9110  
9111  /*
9112   *
9113   *
9114   *   3         2         1
9115   *  10987654321098765432109876543210
9116   *  001000               x1110000101
9117   *     rt -----
9118   *          rs -----
9119   *               rd -----
9120   */
9121  static char *LWUX(uint64 instruction, Dis_info *info)
9122  {
9123      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9124      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9125      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9126  
9127      const char *rd = GPR(rd_value, info);
9128      const char *rs = GPR(rs_value, info);
9129      const char *rt = GPR(rt_value, info);
9130  
9131      return img_format("LWUX %s, %s(%s)", rd, rs, rt);
9132  }
9133  
9134  
9135  /*
9136   *
9137   *
9138   *   3         2         1
9139   *  10987654321098765432109876543210
9140   *  001000               x1110000101
9141   *     rt -----
9142   *          rs -----
9143   *               rd -----
9144   */
9145  static char *LWUXS(uint64 instruction, Dis_info *info)
9146  {
9147      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9148      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9149      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9150  
9151      const char *rd = GPR(rd_value, info);
9152      const char *rs = GPR(rs_value, info);
9153      const char *rt = GPR(rt_value, info);
9154  
9155      return img_format("LWUXS %s, %s(%s)", rd, rs, rt);
9156  }
9157  
9158  
9159  /*
9160   *
9161   *
9162   *   3         2         1
9163   *  10987654321098765432109876543210
9164   *  001000               x1110000101
9165   *     rt -----
9166   *          rs -----
9167   *               rd -----
9168   */
9169  static char *LWX(uint64 instruction, Dis_info *info)
9170  {
9171      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9172      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9173      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9174  
9175      const char *rd = GPR(rd_value, info);
9176      const char *rs = GPR(rs_value, info);
9177      const char *rt = GPR(rt_value, info);
9178  
9179      return img_format("LWX %s, %s(%s)", rd, rs, rt);
9180  }
9181  
9182  
9183  /*
9184   *
9185   *
9186   *   3         2         1
9187   *  10987654321098765432109876543210
9188   *  001000               x1110000101
9189   *     rt -----
9190   *          rs -----
9191   *               rd -----
9192   */
9193  static char *LWXS_16_(uint64 instruction, Dis_info *info)
9194  {
9195      uint64 rt3_value = extract_rt3_9_8_7(instruction);
9196      uint64 rs3_value = extract_rs3_6_5_4(instruction);
9197      uint64 rd3_value = extract_rd3_3_2_1(instruction);
9198  
9199      const char *rd3 = GPR(decode_gpr_gpr3(rd3_value, info), info);
9200      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
9201      uint64 rt3 = decode_gpr_gpr3(rt3_value, info);
9202  
9203      return img_format("LWXS %s, %s(0x%" PRIx64 ")", rd3, rs3, rt3);
9204  }
9205  
9206  
9207  /*
9208   *
9209   *
9210   *   3         2         1
9211   *  10987654321098765432109876543210
9212   *  001000               x1110000101
9213   *     rt -----
9214   *          rs -----
9215   *               rd -----
9216   */
9217  static char *LWXS_32_(uint64 instruction, Dis_info *info)
9218  {
9219      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9220      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9221      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9222  
9223      const char *rd = GPR(rd_value, info);
9224      const char *rs = GPR(rs_value, info);
9225      const char *rt = GPR(rt_value, info);
9226  
9227      return img_format("LWXS %s, %s(%s)", rd, rs, rt);
9228  }
9229  
9230  
9231  /*
9232   * [DSP] MADD ac, rs, rt - Multiply two words and add to the specified
9233   *         accumulator
9234   *
9235   *   3         2         1
9236   *  10987654321098765432109876543210
9237   *  001000               x1110000101
9238   *     rt -----
9239   *          rs -----
9240   *               rd -----
9241   */
9242  static char *MADD_DSP_(uint64 instruction, Dis_info *info)
9243  {
9244      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9245      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9246      uint64 ac_value = extract_ac_15_14(instruction);
9247  
9248      const char *ac = AC(ac_value, info);
9249      const char *rs = GPR(rs_value, info);
9250      const char *rt = GPR(rt_value, info);
9251  
9252      return img_format("MADD %s, %s, %s", ac, rs, rt);
9253  }
9254  
9255  
9256  /*
9257   *
9258   *
9259   *   3         2         1
9260   *  10987654321098765432109876543210
9261   *  001000               x1110000101
9262   *     rt -----
9263   *          rs -----
9264   *               rd -----
9265   */
9266  static char *MADDF_D(uint64 instruction, Dis_info *info)
9267  {
9268      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9269      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9270      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9271  
9272      const char *fd = FPR(fd_value, info);
9273      const char *fs = FPR(fs_value, info);
9274      const char *ft = FPR(ft_value, info);
9275  
9276      return img_format("MADDF.D %s, %s, %s", fd, fs, ft);
9277  }
9278  
9279  
9280  /*
9281   *
9282   *
9283   *   3         2         1
9284   *  10987654321098765432109876543210
9285   *  001000               x1110000101
9286   *     rt -----
9287   *          rs -----
9288   *               rd -----
9289   */
9290  static char *MADDF_S(uint64 instruction, Dis_info *info)
9291  {
9292      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9293      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9294      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9295  
9296      const char *fd = FPR(fd_value, info);
9297      const char *fs = FPR(fs_value, info);
9298      const char *ft = FPR(ft_value, info);
9299  
9300      return img_format("MADDF.S %s, %s, %s", fd, fs, ft);
9301  }
9302  
9303  
9304  /*
9305   * [DSP] MADDU ac, rs, rt - Multiply two unsigned words and add to the
9306   *         specified accumulator
9307   *
9308   *   3         2         1
9309   *  10987654321098765432109876543210
9310   *  001000               x1110000101
9311   *     rt -----
9312   *          rs -----
9313   *               rd -----
9314   */
9315  static char *MADDU_DSP_(uint64 instruction, Dis_info *info)
9316  {
9317      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9318      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9319      uint64 ac_value = extract_ac_15_14(instruction);
9320  
9321      const char *ac = AC(ac_value, info);
9322      const char *rs = GPR(rs_value, info);
9323      const char *rt = GPR(rt_value, info);
9324  
9325      return img_format("MADDU %s, %s, %s", ac, rs, rt);
9326  }
9327  
9328  
9329  /*
9330   * [DSP] MAQ_S.W.PHL ac, rs, rt - Multiply the left-most single vector
9331   *         fractional halfword elements with accumulation
9332   *
9333   *   3         2         1
9334   *  10987654321098765432109876543210
9335   *  001000               x1110000101
9336   *     rt -----
9337   *          rs -----
9338   *               rd -----
9339   */
9340  static char *MAQ_S_W_PHL(uint64 instruction, Dis_info *info)
9341  {
9342      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9343      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9344      uint64 ac_value = extract_ac_15_14(instruction);
9345  
9346      const char *ac = AC(ac_value, info);
9347      const char *rs = GPR(rs_value, info);
9348      const char *rt = GPR(rt_value, info);
9349  
9350      return img_format("MAQ_S.W.PHL %s, %s, %s", ac, rs, rt);
9351  }
9352  
9353  
9354  /*
9355   * [DSP] MAQ_S.W.PHR ac, rs, rt - Multiply the right-most single vector
9356   *         fractional halfword elements with accumulation
9357   *
9358   *   3         2         1
9359   *  10987654321098765432109876543210
9360   *  001000               x1110000101
9361   *     rt -----
9362   *          rs -----
9363   *               rd -----
9364   */
9365  static char *MAQ_S_W_PHR(uint64 instruction, Dis_info *info)
9366  {
9367      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9368      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9369      uint64 ac_value = extract_ac_15_14(instruction);
9370  
9371      const char *ac = AC(ac_value, info);
9372      const char *rs = GPR(rs_value, info);
9373      const char *rt = GPR(rt_value, info);
9374  
9375      return img_format("MAQ_S.W.PHR %s, %s, %s", ac, rs, rt);
9376  }
9377  
9378  
9379  /*
9380   * [DSP] MAQ_SA.W.PHL ac, rs, rt - Multiply the left-most single vector
9381   *         fractional halfword elements with saturating accumulation
9382   *
9383   *   3         2         1
9384   *  10987654321098765432109876543210
9385   *  001000               x1110000101
9386   *     rt -----
9387   *          rs -----
9388   *               rd -----
9389   */
9390  static char *MAQ_SA_W_PHL(uint64 instruction, Dis_info *info)
9391  {
9392      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9393      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9394      uint64 ac_value = extract_ac_15_14(instruction);
9395  
9396      const char *ac = AC(ac_value, info);
9397      const char *rs = GPR(rs_value, info);
9398      const char *rt = GPR(rt_value, info);
9399  
9400      return img_format("MAQ_SA.W.PHL %s, %s, %s", ac, rs, rt);
9401  }
9402  
9403  
9404  /*
9405   * [DSP] MAQ_SA.W.PHR ac, rs, rt - Multiply the right-most single vector
9406   *         fractional halfword elements with saturating accumulation
9407   *
9408   *   3         2         1
9409   *  10987654321098765432109876543210
9410   *  001000               x1110000101
9411   *     rt -----
9412   *          rs -----
9413   *               rd -----
9414   */
9415  static char *MAQ_SA_W_PHR(uint64 instruction, Dis_info *info)
9416  {
9417      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9418      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9419      uint64 ac_value = extract_ac_15_14(instruction);
9420  
9421      const char *ac = AC(ac_value, info);
9422      const char *rs = GPR(rs_value, info);
9423      const char *rt = GPR(rt_value, info);
9424  
9425      return img_format("MAQ_SA.W.PHR %s, %s, %s", ac, rs, rt);
9426  }
9427  
9428  
9429  /*
9430   *
9431   *
9432   *   3         2         1
9433   *  10987654321098765432109876543210
9434   *  001000               x1110000101
9435   *     rt -----
9436   *          rs -----
9437   *               rd -----
9438   */
9439  static char *MAX_D(uint64 instruction, Dis_info *info)
9440  {
9441      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9442      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9443      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9444  
9445      const char *fd = FPR(fd_value, info);
9446      const char *fs = FPR(fs_value, info);
9447      const char *ft = FPR(ft_value, info);
9448  
9449      return img_format("MAX.D %s, %s, %s", fd, fs, ft);
9450  }
9451  
9452  
9453  /*
9454   *
9455   *
9456   *   3         2         1
9457   *  10987654321098765432109876543210
9458   *  001000               x1110000101
9459   *     rt -----
9460   *          rs -----
9461   *               rd -----
9462   */
9463  static char *MAX_S(uint64 instruction, Dis_info *info)
9464  {
9465      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9466      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9467      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9468  
9469      const char *fd = FPR(fd_value, info);
9470      const char *fs = FPR(fs_value, info);
9471      const char *ft = FPR(ft_value, info);
9472  
9473      return img_format("MAX.S %s, %s, %s", fd, fs, ft);
9474  }
9475  
9476  
9477  /*
9478   *
9479   *
9480   *   3         2         1
9481   *  10987654321098765432109876543210
9482   *  001000               x1110000101
9483   *     rt -----
9484   *          rs -----
9485   *               rd -----
9486   */
9487  static char *MAXA_D(uint64 instruction, Dis_info *info)
9488  {
9489      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9490      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9491      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9492  
9493      const char *fd = FPR(fd_value, info);
9494      const char *fs = FPR(fs_value, info);
9495      const char *ft = FPR(ft_value, info);
9496  
9497      return img_format("MAXA.D %s, %s, %s", fd, fs, ft);
9498  }
9499  
9500  
9501  /*
9502   *
9503   *
9504   *   3         2         1
9505   *  10987654321098765432109876543210
9506   *  001000               x1110000101
9507   *     rt -----
9508   *          rs -----
9509   *               rd -----
9510   */
9511  static char *MAXA_S(uint64 instruction, Dis_info *info)
9512  {
9513      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9514      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9515      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9516  
9517      const char *fd = FPR(fd_value, info);
9518      const char *fs = FPR(fs_value, info);
9519      const char *ft = FPR(ft_value, info);
9520  
9521      return img_format("MAXA.S %s, %s, %s", fd, fs, ft);
9522  }
9523  
9524  
9525  /*
9526   *
9527   *
9528   *   3         2         1
9529   *  10987654321098765432109876543210
9530   *  001000               x1110000101
9531   *     rt -----
9532   *          rs -----
9533   *               rd -----
9534   */
9535  static char *MFC0(uint64 instruction, Dis_info *info)
9536  {
9537      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9538      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9539      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9540  
9541      const char *rt = GPR(rt_value, info);
9542  
9543      return img_format("MFC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
9544                        rt, c0s_value, sel_value);
9545  }
9546  
9547  
9548  /*
9549   *
9550   *
9551   *   3         2         1
9552   *  10987654321098765432109876543210
9553   *  001000               x1110000101
9554   *     rt -----
9555   *          rs -----
9556   *               rd -----
9557   */
9558  static char *MFC1(uint64 instruction, Dis_info *info)
9559  {
9560      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9561      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9562  
9563      const char *rt = GPR(rt_value, info);
9564      const char *fs = FPR(fs_value, info);
9565  
9566      return img_format("MFC1 %s, %s", rt, fs);
9567  }
9568  
9569  
9570  /*
9571   *
9572   *
9573   *   3         2         1
9574   *  10987654321098765432109876543210
9575   *  001000               x1110000101
9576   *     rt -----
9577   *          rs -----
9578   *               rd -----
9579   */
9580  static char *MFC2(uint64 instruction, Dis_info *info)
9581  {
9582      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9583      uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
9584  
9585      const char *rt = GPR(rt_value, info);
9586  
9587      return img_format("MFC2 %s, CP%" PRIu64, rt, cs_value);
9588  }
9589  
9590  
9591  /*
9592   *
9593   *
9594   *   3         2         1
9595   *  10987654321098765432109876543210
9596   *  001000               x1110000101
9597   *     rt -----
9598   *          rs -----
9599   *               rd -----
9600   */
9601  static char *MFGC0(uint64 instruction, Dis_info *info)
9602  {
9603      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9604      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9605      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9606  
9607      const char *rt = GPR(rt_value, info);
9608  
9609      return img_format("MFGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
9610                        rt, c0s_value, sel_value);
9611  }
9612  
9613  
9614  /*
9615   *
9616   *
9617   *   3         2         1
9618   *  10987654321098765432109876543210
9619   *  001000               x1110000101
9620   *     rt -----
9621   *          rs -----
9622   *               rd -----
9623   */
9624  static char *MFHC0(uint64 instruction, Dis_info *info)
9625  {
9626      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9627      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9628      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9629  
9630      const char *rt = GPR(rt_value, info);
9631  
9632      return img_format("MFHC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
9633                        rt, c0s_value, sel_value);
9634  }
9635  
9636  
9637  /*
9638   *
9639   *
9640   *   3         2         1
9641   *  10987654321098765432109876543210
9642   *  001000               x1110000101
9643   *     rt -----
9644   *          rs -----
9645   *               rd -----
9646   */
9647  static char *MFHC1(uint64 instruction, Dis_info *info)
9648  {
9649      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9650      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9651  
9652      const char *rt = GPR(rt_value, info);
9653      const char *fs = FPR(fs_value, info);
9654  
9655      return img_format("MFHC1 %s, %s", rt, fs);
9656  }
9657  
9658  
9659  /*
9660   *
9661   *
9662   *   3         2         1
9663   *  10987654321098765432109876543210
9664   *  001000               x1110000101
9665   *     rt -----
9666   *          rs -----
9667   *               rd -----
9668   */
9669  static char *MFHC2(uint64 instruction, Dis_info *info)
9670  {
9671      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9672      uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
9673  
9674      const char *rt = GPR(rt_value, info);
9675  
9676      return img_format("MFHC2 %s, CP%" PRIu64, rt, cs_value);
9677  }
9678  
9679  
9680  /*
9681   *
9682   *
9683   *   3         2         1
9684   *  10987654321098765432109876543210
9685   *  001000               x1110000101
9686   *     rt -----
9687   *          rs -----
9688   *               rd -----
9689   */
9690  static char *MFHGC0(uint64 instruction, Dis_info *info)
9691  {
9692      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9693      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9694      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9695  
9696      const char *rt = GPR(rt_value, info);
9697  
9698      return img_format("MFHGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
9699                        rt, c0s_value, sel_value);
9700  }
9701  
9702  
9703  /*
9704   * [DSP] MFHI rs, ac - Move from HI register
9705   *
9706   *   3         2         1
9707   *  10987654321098765432109876543210
9708   *  001000     xxxxx  00000001111111
9709   *     rt -----
9710   *               ac --
9711   */
9712  static char *MFHI_DSP_(uint64 instruction, Dis_info *info)
9713  {
9714      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9715      uint64 ac_value = extract_ac_15_14(instruction);
9716  
9717      const char *rt = GPR(rt_value, info);
9718      const char *ac = AC(ac_value, info);
9719  
9720      return img_format("MFHI %s, %s", rt, ac);
9721  }
9722  
9723  
9724  /*
9725   *
9726   *
9727   *   3         2         1
9728   *  10987654321098765432109876543210
9729   *  001000               x1110000101
9730   *     rt -----
9731   *          rs -----
9732   *               rd -----
9733   */
9734  static char *MFHTR(uint64 instruction, Dis_info *info)
9735  {
9736      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9737      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9738      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9739      uint64 u_value = extract_u_10(instruction);
9740  
9741      const char *rt = GPR(rt_value, info);
9742  
9743      return img_format("MFHTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
9744                        rt, c0s_value, u_value, sel_value);
9745  }
9746  
9747  
9748  /*
9749   * [DSP] MFLO rs, ac - Move from HI register
9750   *
9751   *   3         2         1
9752   *  10987654321098765432109876543210
9753   *  001000     xxxxx  01000001111111
9754   *     rt -----
9755   *               ac --
9756   */
9757  static char *MFLO_DSP_(uint64 instruction, Dis_info *info)
9758  {
9759      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9760      uint64 ac_value = extract_ac_15_14(instruction);
9761  
9762      const char *rt = GPR(rt_value, info);
9763      const char *ac = AC(ac_value, info);
9764  
9765      return img_format("MFLO %s, %s", rt, ac);
9766  }
9767  
9768  
9769  /*
9770   *
9771   *
9772   *   3         2         1
9773   *  10987654321098765432109876543210
9774   *  001000               x1110000101
9775   *     rt -----
9776   *          rs -----
9777   *               rd -----
9778   */
9779  static char *MFTR(uint64 instruction, Dis_info *info)
9780  {
9781      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9782      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
9783      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
9784      uint64 u_value = extract_u_10(instruction);
9785  
9786      const char *rt = GPR(rt_value, info);
9787  
9788      return img_format("MFTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
9789                        rt, c0s_value, u_value, sel_value);
9790  }
9791  
9792  
9793  /*
9794   *
9795   *
9796   *   3         2         1
9797   *  10987654321098765432109876543210
9798   *  001000               x1110000101
9799   *     rt -----
9800   *          rs -----
9801   *               rd -----
9802   */
9803  static char *MIN_D(uint64 instruction, Dis_info *info)
9804  {
9805      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9806      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9807      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9808  
9809      const char *fd = FPR(fd_value, info);
9810      const char *fs = FPR(fs_value, info);
9811      const char *ft = FPR(ft_value, info);
9812  
9813      return img_format("MIN.D %s, %s, %s", fd, fs, ft);
9814  }
9815  
9816  
9817  /*
9818   *
9819   *
9820   *   3         2         1
9821   *  10987654321098765432109876543210
9822   *  001000               x1110000101
9823   *     rt -----
9824   *          rs -----
9825   *               rd -----
9826   */
9827  static char *MIN_S(uint64 instruction, Dis_info *info)
9828  {
9829      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9830      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9831      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9832  
9833      const char *fd = FPR(fd_value, info);
9834      const char *fs = FPR(fs_value, info);
9835      const char *ft = FPR(ft_value, info);
9836  
9837      return img_format("MIN.S %s, %s, %s", fd, fs, ft);
9838  }
9839  
9840  
9841  /*
9842   *
9843   *
9844   *   3         2         1
9845   *  10987654321098765432109876543210
9846   *  001000               x1110000101
9847   *     rt -----
9848   *          rs -----
9849   *               rd -----
9850   */
9851  static char *MINA_D(uint64 instruction, Dis_info *info)
9852  {
9853      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9854      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9855      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9856  
9857      const char *fd = FPR(fd_value, info);
9858      const char *fs = FPR(fs_value, info);
9859      const char *ft = FPR(ft_value, info);
9860  
9861      return img_format("MINA.D %s, %s, %s", fd, fs, ft);
9862  }
9863  
9864  
9865  /*
9866   *
9867   *
9868   *   3         2         1
9869   *  10987654321098765432109876543210
9870   *  001000               x1110000101
9871   *     rt -----
9872   *          rs -----
9873   *               rd -----
9874   */
9875  static char *MINA_S(uint64 instruction, Dis_info *info)
9876  {
9877      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9878      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9879      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
9880  
9881      const char *fd = FPR(fd_value, info);
9882      const char *fs = FPR(fs_value, info);
9883      const char *ft = FPR(ft_value, info);
9884  
9885      return img_format("MINA.S %s, %s, %s", fd, fs, ft);
9886  }
9887  
9888  
9889  /*
9890   *
9891   *
9892   *   3         2         1
9893   *  10987654321098765432109876543210
9894   *  001000               x1110000101
9895   *     rt -----
9896   *          rs -----
9897   *               rd -----
9898   */
9899  static char *MOD(uint64 instruction, Dis_info *info)
9900  {
9901      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9902      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9903      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9904  
9905      const char *rd = GPR(rd_value, info);
9906      const char *rs = GPR(rs_value, info);
9907      const char *rt = GPR(rt_value, info);
9908  
9909      return img_format("MOD %s, %s, %s", rd, rs, rt);
9910  }
9911  
9912  
9913  /*
9914   * [DSP] MODSUB rd, rs, rt - Modular subtraction on an index value
9915   *
9916   *   3         2         1
9917   *  10987654321098765432109876543210
9918   *  001000               x1110000101
9919   *     rt -----
9920   *          rs -----
9921   *               rd -----
9922   */
9923  static char *MODSUB(uint64 instruction, Dis_info *info)
9924  {
9925      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9926      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9927      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9928  
9929      const char *rd = GPR(rd_value, info);
9930      const char *rs = GPR(rs_value, info);
9931      const char *rt = GPR(rt_value, info);
9932  
9933      return img_format("MODSUB %s, %s, %s", rd, rs, rt);
9934  }
9935  
9936  
9937  /*
9938   *
9939   *
9940   *   3         2         1
9941   *  10987654321098765432109876543210
9942   *  001000               x1010010101
9943   *     rt -----
9944   *          rs -----
9945   *               rd -----
9946   */
9947  static char *MODU(uint64 instruction, Dis_info *info)
9948  {
9949      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
9950      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
9951      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
9952  
9953      const char *rd = GPR(rd_value, info);
9954      const char *rs = GPR(rs_value, info);
9955      const char *rt = GPR(rt_value, info);
9956  
9957      return img_format("MODU %s, %s, %s", rd, rs, rt);
9958  }
9959  
9960  
9961  /*
9962   *
9963   *
9964   *   3         2         1
9965   *  10987654321098765432109876543210
9966   *  001000               x1110000101
9967   *     rt -----
9968   *          rs -----
9969   *               rd -----
9970   */
9971  static char *MOV_D(uint64 instruction, Dis_info *info)
9972  {
9973      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9974      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9975  
9976      const char *ft = FPR(ft_value, info);
9977      const char *fs = FPR(fs_value, info);
9978  
9979      return img_format("MOV.D %s, %s", ft, fs);
9980  }
9981  
9982  
9983  /*
9984   *
9985   *
9986   *   3         2         1
9987   *  10987654321098765432109876543210
9988   *  001000               x1110000101
9989   *     rt -----
9990   *          rs -----
9991   *               rd -----
9992   */
9993  static char *MOV_S(uint64 instruction, Dis_info *info)
9994  {
9995      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
9996      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
9997  
9998      const char *ft = FPR(ft_value, info);
9999      const char *fs = FPR(fs_value, info);
10000  
10001      return img_format("MOV.S %s, %s", ft, fs);
10002  }
10003  
10004  
10005  /*
10006   *
10007   *
10008   *   3         2         1
10009   *  10987654321098765432109876543210
10010   *  001000               x1110000101
10011   *     rt -----
10012   *          rs -----
10013   *               rd -----
10014   */
10015  static char *MOVE_BALC(uint64 instruction, Dis_info *info)
10016  {
10017      uint64 rtz4_value = extract_rtz4_27_26_25_23_22_21(instruction);
10018      uint64 rd1_value = extract_rdl_25_24(instruction);
10019      int64 s_value = extract_s__se21_0_20_to_1_s1(instruction);
10020  
10021      const char *rd1 = GPR(decode_gpr_gpr1(rd1_value, info), info);
10022      const char *rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value, info), info);
10023      g_autofree char *s = ADDRESS(s_value, 4, info);
10024  
10025      return img_format("MOVE.BALC %s, %s, %s", rd1, rtz4, s);
10026  }
10027  
10028  
10029  /*
10030   *
10031   *
10032   *   3         2         1
10033   *  10987654321098765432109876543210
10034   *  001000               x1110000101
10035   *     rt -----
10036   *          rs -----
10037   *               rd -----
10038   */
10039  static char *MOVEP(uint64 instruction, Dis_info *info)
10040  {
10041      uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
10042      uint64 rd2_value = extract_rd2_3_8(instruction);
10043      uint64 rsz4_value = extract_rsz4_4_2_1_0(instruction);
10044  
10045      const char *rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value, info), info);
10046      const char *re2 = GPR(decode_gpr_gpr2_reg2(rd2_value, info), info);
10047      /* !!!!!!!!!! - no conversion function */
10048      const char *rsz4 = GPR(decode_gpr_gpr4_zero(rsz4_value, info), info);
10049      const char *rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value, info), info);
10050  
10051      return img_format("MOVEP %s, %s, %s, %s", rd2, re2, rsz4, rtz4);
10052      /* hand edited */
10053  }
10054  
10055  
10056  /*
10057   *
10058   *
10059   *   3         2         1
10060   *  10987654321098765432109876543210
10061   *  001000               x1110000101
10062   *     rt -----
10063   *          rs -----
10064   *               rd -----
10065   */
10066  static char *MOVEP_REV_(uint64 instruction, Dis_info *info)
10067  {
10068      uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
10069      uint64 rd2_value = extract_rd2_3_8(instruction);
10070      uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
10071  
10072      const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
10073      const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info);
10074      const char *rd2 = GPR(decode_gpr_gpr2_reg1(rd2_value, info), info);
10075      const char *rs2 = GPR(decode_gpr_gpr2_reg2(rd2_value, info), info);
10076      /* !!!!!!!!!! - no conversion function */
10077  
10078      return img_format("MOVEP %s, %s, %s, %s", rs4, rt4, rd2, rs2);
10079      /* hand edited */
10080  }
10081  
10082  
10083  /*
10084   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10085   *
10086   *   3         2         1
10087   *  10987654321098765432109876543210
10088   *  001000               00010001101
10089   *     rt -----
10090   *          rs -----
10091   *               rd -----
10092   */
10093  static char *MOVE(uint64 instruction, Dis_info *info)
10094  {
10095      uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
10096      uint64 rs_value = extract_rs_4_3_2_1_0(instruction);
10097  
10098      const char *rt = GPR(rt_value, info);
10099      const char *rs = GPR(rs_value, info);
10100  
10101      return img_format("MOVE %s, %s", rt, rs);
10102  }
10103  
10104  
10105  /*
10106   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10107   *
10108   *   3         2         1
10109   *  10987654321098765432109876543210
10110   *  001000               00010001101
10111   *     rt -----
10112   *          rs -----
10113   *               rd -----
10114   */
10115  static char *MOVN(uint64 instruction, Dis_info *info)
10116  {
10117      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10118      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10119      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10120  
10121      const char *rd = GPR(rd_value, info);
10122      const char *rs = GPR(rs_value, info);
10123      const char *rt = GPR(rt_value, info);
10124  
10125      return img_format("MOVN %s, %s, %s", rd, rs, rt);
10126  }
10127  
10128  
10129  /*
10130   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10131   *
10132   *   3         2         1
10133   *  10987654321098765432109876543210
10134   *  001000               00010001101
10135   *     rt -----
10136   *          rs -----
10137   *               rd -----
10138   */
10139  static char *MOVZ(uint64 instruction, Dis_info *info)
10140  {
10141      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10142      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10143      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10144  
10145      const char *rd = GPR(rd_value, info);
10146      const char *rs = GPR(rs_value, info);
10147      const char *rt = GPR(rt_value, info);
10148  
10149      return img_format("MOVZ %s, %s, %s", rd, rs, rt);
10150  }
10151  
10152  
10153  /*
10154   * [DSP] MSUB ac, rs, rt - Multiply word and subtract from accumulator
10155   *
10156   *   3         2         1
10157   *  10987654321098765432109876543210
10158   *  001000            10101010111111
10159   *     rt -----
10160   *          rs -----
10161   *               ac --
10162   */
10163  static char *MSUB_DSP_(uint64 instruction, Dis_info *info)
10164  {
10165      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10166      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10167      uint64 ac_value = extract_ac_15_14(instruction);
10168  
10169      const char *ac = AC(ac_value, info);
10170      const char *rs = GPR(rs_value, info);
10171      const char *rt = GPR(rt_value, info);
10172  
10173      return img_format("MSUB %s, %s, %s", ac, rs, rt);
10174  }
10175  
10176  
10177  /*
10178   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10179   *
10180   *   3         2         1
10181   *  10987654321098765432109876543210
10182   *  001000               00010001101
10183   *     rt -----
10184   *          rs -----
10185   *               rd -----
10186   */
10187  static char *MSUBF_D(uint64 instruction, Dis_info *info)
10188  {
10189      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10190      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10191      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10192  
10193      const char *fd = FPR(fd_value, info);
10194      const char *fs = FPR(fs_value, info);
10195      const char *ft = FPR(ft_value, info);
10196  
10197      return img_format("MSUBF.D %s, %s, %s", fd, fs, ft);
10198  }
10199  
10200  
10201  /*
10202   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10203   *
10204   *   3         2         1
10205   *  10987654321098765432109876543210
10206   *  001000               00010001101
10207   *     rt -----
10208   *          rs -----
10209   *               rd -----
10210   */
10211  static char *MSUBF_S(uint64 instruction, Dis_info *info)
10212  {
10213      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10214      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10215      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10216  
10217      const char *fd = FPR(fd_value, info);
10218      const char *fs = FPR(fs_value, info);
10219      const char *ft = FPR(ft_value, info);
10220  
10221      return img_format("MSUBF.S %s, %s, %s", fd, fs, ft);
10222  }
10223  
10224  
10225  /*
10226   * [DSP] MSUBU ac, rs, rt - Multiply word and add to accumulator
10227   *
10228   *   3         2         1
10229   *  10987654321098765432109876543210
10230   *  001000            11101010111111
10231   *     rt -----
10232   *          rs -----
10233   *               ac --
10234   */
10235  static char *MSUBU_DSP_(uint64 instruction, Dis_info *info)
10236  {
10237      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10238      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10239      uint64 ac_value = extract_ac_15_14(instruction);
10240  
10241      const char *ac = AC(ac_value, info);
10242      const char *rs = GPR(rs_value, info);
10243      const char *rt = GPR(rt_value, info);
10244  
10245      return img_format("MSUBU %s, %s, %s", ac, rs, rt);
10246  }
10247  
10248  
10249  /*
10250   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10251   *
10252   *   3         2         1
10253   *  10987654321098765432109876543210
10254   *  001000               00010001101
10255   *     rt -----
10256   *          rs -----
10257   *               rd -----
10258   */
10259  static char *MTC0(uint64 instruction, Dis_info *info)
10260  {
10261      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10262      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10263      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10264  
10265      const char *rt = GPR(rt_value, info);
10266  
10267      return img_format("MTC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
10268                        rt, c0s_value, sel_value);
10269  }
10270  
10271  
10272  /*
10273   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10274   *
10275   *   3         2         1
10276   *  10987654321098765432109876543210
10277   *  001000               00010001101
10278   *     rt -----
10279   *          rs -----
10280   *               rd -----
10281   */
10282  static char *MTC1(uint64 instruction, Dis_info *info)
10283  {
10284      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10285      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10286  
10287      const char *rt = GPR(rt_value, info);
10288      const char *fs = FPR(fs_value, info);
10289  
10290      return img_format("MTC1 %s, %s", rt, fs);
10291  }
10292  
10293  
10294  /*
10295   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10296   *
10297   *   3         2         1
10298   *  10987654321098765432109876543210
10299   *  001000               00010001101
10300   *     rt -----
10301   *          rs -----
10302   *               rd -----
10303   */
10304  static char *MTC2(uint64 instruction, Dis_info *info)
10305  {
10306      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10307      uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10308  
10309      const char *rt = GPR(rt_value, info);
10310  
10311      return img_format("MTC2 %s, CP%" PRIu64, rt, cs_value);
10312  }
10313  
10314  
10315  /*
10316   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10317   *
10318   *   3         2         1
10319   *  10987654321098765432109876543210
10320   *  001000               00010001101
10321   *     rt -----
10322   *          rs -----
10323   *               rd -----
10324   */
10325  static char *MTGC0(uint64 instruction, Dis_info *info)
10326  {
10327      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10328      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10329      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10330  
10331      const char *rt = GPR(rt_value, info);
10332  
10333      return img_format("MTGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
10334                        rt, c0s_value, sel_value);
10335  }
10336  
10337  
10338  /*
10339   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10340   *
10341   *   3         2         1
10342   *  10987654321098765432109876543210
10343   *  001000               00010001101
10344   *     rt -----
10345   *          rs -----
10346   *               rd -----
10347   */
10348  static char *MTHC0(uint64 instruction, Dis_info *info)
10349  {
10350      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10351      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10352      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10353  
10354      const char *rt = GPR(rt_value, info);
10355  
10356      return img_format("MTHC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
10357                        rt, c0s_value, sel_value);
10358  }
10359  
10360  
10361  /*
10362   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10363   *
10364   *   3         2         1
10365   *  10987654321098765432109876543210
10366   *  001000               00010001101
10367   *     rt -----
10368   *          rs -----
10369   *               rd -----
10370   */
10371  static char *MTHC1(uint64 instruction, Dis_info *info)
10372  {
10373      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10374      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10375  
10376      const char *rt = GPR(rt_value, info);
10377      const char *fs = FPR(fs_value, info);
10378  
10379      return img_format("MTHC1 %s, %s", rt, fs);
10380  }
10381  
10382  
10383  /*
10384   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10385   *
10386   *   3         2         1
10387   *  10987654321098765432109876543210
10388   *  001000               00010001101
10389   *     rt -----
10390   *          rs -----
10391   *               rd -----
10392   */
10393  static char *MTHC2(uint64 instruction, Dis_info *info)
10394  {
10395      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10396      uint64 cs_value = extract_cs_20_19_18_17_16(instruction);
10397  
10398      const char *rt = GPR(rt_value, info);
10399  
10400      return img_format("MTHC2 %s, CP%" PRIu64, rt, cs_value);
10401  }
10402  
10403  
10404  /*
10405   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10406   *
10407   *   3         2         1
10408   *  10987654321098765432109876543210
10409   *  001000               00010001101
10410   *     rt -----
10411   *          rs -----
10412   *               rd -----
10413   */
10414  static char *MTHGC0(uint64 instruction, Dis_info *info)
10415  {
10416      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10417      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10418      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10419  
10420      const char *rt = GPR(rt_value, info);
10421  
10422      return img_format("MTHGC0 %s, CP%" PRIu64 ", 0x%" PRIx64,
10423                        rt, c0s_value, sel_value);
10424  }
10425  
10426  
10427  /*
10428   * [DSP] MTHI rs, ac - Move to HI register
10429   *
10430   *   3         2         1
10431   *  10987654321098765432109876543210
10432   *  001000xxxxx       10000001111111
10433   *          rs -----
10434   *               ac --
10435   */
10436  static char *MTHI_DSP_(uint64 instruction, Dis_info *info)
10437  {
10438      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10439      uint64 ac_value = extract_ac_15_14(instruction);
10440  
10441      const char *rs = GPR(rs_value, info);
10442      const char *ac = AC(ac_value, info);
10443  
10444      return img_format("MTHI %s, %s", rs, ac);
10445  }
10446  
10447  
10448  /*
10449   * [DSP] MTHLIP rs, ac - Copy LO to HI and a GPR to LO and increment pos by 32
10450   *
10451   *   3         2         1
10452   *  10987654321098765432109876543210
10453   *  001000xxxxx       00001001111111
10454   *          rs -----
10455   *               ac --
10456   */
10457  static char *MTHLIP(uint64 instruction, Dis_info *info)
10458  {
10459      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10460      uint64 ac_value = extract_ac_15_14(instruction);
10461  
10462      const char *rs = GPR(rs_value, info);
10463      const char *ac = AC(ac_value, info);
10464  
10465      return img_format("MTHLIP %s, %s", rs, ac);
10466  }
10467  
10468  
10469  /*
10470   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10471   *
10472   *   3         2         1
10473   *  10987654321098765432109876543210
10474   *  001000               00010001101
10475   *     rt -----
10476   *          rs -----
10477   *               rd -----
10478   */
10479  static char *MTHTR(uint64 instruction, Dis_info *info)
10480  {
10481      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10482      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10483      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10484      uint64 u_value = extract_u_10(instruction);
10485  
10486      const char *rt = GPR(rt_value, info);
10487  
10488      return img_format("MTHTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
10489                        rt, c0s_value, u_value, sel_value);
10490  }
10491  
10492  
10493  /*
10494   * [DSP] MTLO rs, ac - Move to LO register
10495   *
10496   *   3         2         1
10497   *  10987654321098765432109876543210
10498   *  001000xxxxx       11000001111111
10499   *          rs -----
10500   *               ac --
10501   */
10502  static char *MTLO_DSP_(uint64 instruction, Dis_info *info)
10503  {
10504      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10505      uint64 ac_value = extract_ac_15_14(instruction);
10506  
10507      const char *rs = GPR(rs_value, info);
10508      const char *ac = AC(ac_value, info);
10509  
10510      return img_format("MTLO %s, %s", rs, ac);
10511  }
10512  
10513  
10514  /*
10515   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10516   *
10517   *   3         2         1
10518   *  10987654321098765432109876543210
10519   *  001000               00010001101
10520   *     rt -----
10521   *          rs -----
10522   *               rd -----
10523   */
10524  static char *MTTR(uint64 instruction, Dis_info *info)
10525  {
10526      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10527      uint64 c0s_value = extract_c0s_20_19_18_17_16(instruction);
10528      uint64 sel_value = extract_sel_15_14_13_12_11(instruction);
10529      uint64 u_value = extract_u_10(instruction);
10530  
10531      const char *rt = GPR(rt_value, info);
10532  
10533      return img_format("MTTR %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
10534                        rt, c0s_value, u_value, sel_value);
10535  }
10536  
10537  
10538  /*
10539   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10540   *
10541   *   3         2         1
10542   *  10987654321098765432109876543210
10543   *  001000               00010001101
10544   *     rt -----
10545   *          rs -----
10546   *               rd -----
10547   */
10548  static char *MUH(uint64 instruction, Dis_info *info)
10549  {
10550      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10551      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10552      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10553  
10554      const char *rd = GPR(rd_value, info);
10555      const char *rs = GPR(rs_value, info);
10556      const char *rt = GPR(rt_value, info);
10557  
10558      return img_format("MUH %s, %s, %s", rd, rs, rt);
10559  }
10560  
10561  
10562  /*
10563   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10564   *
10565   *   3         2         1
10566   *  10987654321098765432109876543210
10567   *  001000               00010001101
10568   *     rt -----
10569   *          rs -----
10570   *               rd -----
10571   */
10572  static char *MUHU(uint64 instruction, Dis_info *info)
10573  {
10574      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10575      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10576      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10577  
10578      const char *rd = GPR(rd_value, info);
10579      const char *rs = GPR(rs_value, info);
10580      const char *rt = GPR(rt_value, info);
10581  
10582      return img_format("MUHU %s, %s, %s", rd, rs, rt);
10583  }
10584  
10585  
10586  /*
10587   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10588   *
10589   *   3         2         1
10590   *  10987654321098765432109876543210
10591   *  001000               00010001101
10592   *     rt -----
10593   *          rs -----
10594   *               rd -----
10595   */
10596  static char *MUL_32_(uint64 instruction, Dis_info *info)
10597  {
10598      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10599      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10600      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10601  
10602      const char *rd = GPR(rd_value, info);
10603      const char *rs = GPR(rs_value, info);
10604      const char *rt = GPR(rt_value, info);
10605  
10606      return img_format("MUL %s, %s, %s", rd, rs, rt);
10607  }
10608  
10609  
10610  /*
10611   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10612   *
10613   *   3         2         1
10614   *  10987654321098765432109876543210
10615   *  001000               00010001101
10616   *     rt -----
10617   *          rs -----
10618   *               rd -----
10619   */
10620  static char *MUL_4X4_(uint64 instruction, Dis_info *info)
10621  {
10622      uint64 rt4_value = extract_rt4_9_7_6_5(instruction);
10623      uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
10624  
10625      const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
10626      const char *rt4 = GPR(decode_gpr_gpr4(rt4_value, info), info);
10627  
10628      return img_format("MUL %s, %s", rs4, rt4);
10629  }
10630  
10631  
10632  /*
10633   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10634   *
10635   *   3         2         1
10636   *  10987654321098765432109876543210
10637   *  001000               00010001101
10638   *     rt -----
10639   *          rs -----
10640   *               rd -----
10641   */
10642  static char *MUL_D(uint64 instruction, Dis_info *info)
10643  {
10644      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10645      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10646      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10647  
10648      const char *fd = FPR(fd_value, info);
10649      const char *fs = FPR(fs_value, info);
10650      const char *ft = FPR(ft_value, info);
10651  
10652      return img_format("MUL.D %s, %s, %s", fd, fs, ft);
10653  }
10654  
10655  
10656  /*
10657   * [DSP] MUL.PH rd, rs, rt - Multiply vector integer half words to same size
10658   *   products
10659   *
10660   *   3         2         1
10661   *  10987654321098765432109876543210
10662   *  001000               00000101101
10663   *     rt -----
10664   *          rs -----
10665   *               rd -----
10666   */
10667  static char *MUL_PH(uint64 instruction, Dis_info *info)
10668  {
10669      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10670      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10671      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10672  
10673      const char *rd = GPR(rd_value, info);
10674      const char *rs = GPR(rs_value, info);
10675      const char *rt = GPR(rt_value, info);
10676  
10677      return img_format("MUL.PH %s, %s, %s", rd, rs, rt);
10678  }
10679  
10680  
10681  /*
10682   * [DSP] MUL_S.PH rd, rs, rt - Multiply vector integer half words to same size
10683   *   products (saturated)
10684   *
10685   *   3         2         1
10686   *  10987654321098765432109876543210
10687   *  001000               10000101101
10688   *     rt -----
10689   *          rs -----
10690   *               rd -----
10691   */
10692  static char *MUL_S_PH(uint64 instruction, Dis_info *info)
10693  {
10694      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10695      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10696      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10697  
10698      const char *rd = GPR(rd_value, info);
10699      const char *rs = GPR(rs_value, info);
10700      const char *rt = GPR(rt_value, info);
10701  
10702      return img_format("MUL_S.PH %s, %s, %s", rd, rs, rt);
10703  }
10704  
10705  
10706  /*
10707   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
10708   *
10709   *   3         2         1
10710   *  10987654321098765432109876543210
10711   *  001000               00010001101
10712   *     rt -----
10713   *          rs -----
10714   *               rd -----
10715   */
10716  static char *MUL_S(uint64 instruction, Dis_info *info)
10717  {
10718      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
10719      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
10720      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
10721  
10722      const char *fd = FPR(fd_value, info);
10723      const char *fs = FPR(fs_value, info);
10724      const char *ft = FPR(ft_value, info);
10725  
10726      return img_format("MUL.S %s, %s, %s", fd, fs, ft);
10727  }
10728  
10729  
10730  /*
10731   * [DSP] MULEQ_S.W.PHL rd, rs, rt - Multiply vector fractional left halfwords
10732   *   to expanded width products
10733   *
10734   *   3         2         1
10735   *  10987654321098765432109876543210
10736   *  001000               x0000100101
10737   *     rt -----
10738   *          rs -----
10739   *               rd -----
10740   */
10741  static char *MULEQ_S_W_PHL(uint64 instruction, Dis_info *info)
10742  {
10743      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10744      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10745      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10746  
10747      const char *rd = GPR(rd_value, info);
10748      const char *rs = GPR(rs_value, info);
10749      const char *rt = GPR(rt_value, info);
10750  
10751      return img_format("MULEQ_S.W.PHL %s, %s, %s", rd, rs, rt);
10752  }
10753  
10754  
10755  /*
10756   * [DSP] MULEQ_S.W.PHR rd, rs, rt - Multiply vector fractional right halfwords
10757   *   to expanded width products
10758   *
10759   *   3         2         1
10760   *  10987654321098765432109876543210
10761   *  001000               x0001100101
10762   *     rt -----
10763   *          rs -----
10764   *               rd -----
10765   */
10766  static char *MULEQ_S_W_PHR(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("MULEQ_S.W.PHR %s, %s, %s", rd, rs, rt);
10777  }
10778  
10779  
10780  /*
10781   * [DSP] MULEU_S.PH.QBL rd, rs, rt - Multiply vector fractional left bytes
10782   *   by halfwords to halfword products
10783   *
10784   *   3         2         1
10785   *  10987654321098765432109876543210
10786   *  001000               x0010010101
10787   *     rt -----
10788   *          rs -----
10789   *               rd -----
10790   */
10791  static char *MULEU_S_PH_QBL(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("MULEU_S.PH.QBL %s, %s, %s", rd, rs, rt);
10802  }
10803  
10804  
10805  /*
10806   * [DSP] MULEU_S.PH.QBR rd, rs, rt - Multiply vector fractional right bytes
10807   *   by halfwords to halfword products
10808   *
10809   *   3         2         1
10810   *  10987654321098765432109876543210
10811   *  001000               x0011010101
10812   *     rt -----
10813   *          rs -----
10814   *               rd -----
10815   */
10816  static char *MULEU_S_PH_QBR(uint64 instruction, Dis_info *info)
10817  {
10818      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10819      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10820      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10821  
10822      const char *rd = GPR(rd_value, info);
10823      const char *rs = GPR(rs_value, info);
10824      const char *rt = GPR(rt_value, info);
10825  
10826      return img_format("MULEU_S.PH.QBR %s, %s, %s", rd, rs, rt);
10827  }
10828  
10829  
10830  /*
10831   * [DSP] MULQ_RS.PH rd, rs, rt - Multiply vector fractional halfwords
10832   *   to fractional halfword products
10833   *
10834   *   3         2         1
10835   *  10987654321098765432109876543210
10836   *  001000               x0100010101
10837   *     rt -----
10838   *          rs -----
10839   *               rd -----
10840   */
10841  static char *MULQ_RS_PH(uint64 instruction, Dis_info *info)
10842  {
10843      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10844      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10845      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10846  
10847      const char *rd = GPR(rd_value, info);
10848      const char *rs = GPR(rs_value, info);
10849      const char *rt = GPR(rt_value, info);
10850  
10851      return img_format("MULQ_RS.PH %s, %s, %s", rd, rs, rt);
10852  }
10853  
10854  
10855  /*
10856   * [DSP] MULQ_RS.W rd, rs, rt - Multiply fractional words to same size
10857   *   product with saturation and rounding
10858   *
10859   *   3         2         1
10860   *  10987654321098765432109876543210
10861   *  001000               x0110010101
10862   *     rt -----
10863   *          rs -----
10864   *               rd -----
10865   */
10866  static char *MULQ_RS_W(uint64 instruction, Dis_info *info)
10867  {
10868      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10869      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10870      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10871  
10872      const char *rd = GPR(rd_value, info);
10873      const char *rs = GPR(rs_value, info);
10874      const char *rt = GPR(rt_value, info);
10875  
10876      return img_format("MULQ_RS.W %s, %s, %s", rd, rs, rt);
10877  }
10878  
10879  
10880  /*
10881   * [DSP] MULQ_S.PH rd, rs, rt - Multiply fractional halfwords to same size
10882   *   products
10883   *
10884   *   3         2         1
10885   *  10987654321098765432109876543210
10886   *  001000               x0101010101
10887   *     rt -----
10888   *          rs -----
10889   *               rd -----
10890   */
10891  static char *MULQ_S_PH(uint64 instruction, Dis_info *info)
10892  {
10893      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10894      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10895      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10896  
10897      const char *rd = GPR(rd_value, info);
10898      const char *rs = GPR(rs_value, info);
10899      const char *rt = GPR(rt_value, info);
10900  
10901      return img_format("MULQ_S.PH %s, %s, %s", rd, rs, rt);
10902  }
10903  
10904  
10905  /*
10906   * [DSP] MULQ_S.W rd, rs, rt - Multiply fractional words to same size product
10907   *   with saturation
10908   *
10909   *   3         2         1
10910   *  10987654321098765432109876543210
10911   *  001000               x0111010101
10912   *     rt -----
10913   *          rs -----
10914   *               rd -----
10915   */
10916  static char *MULQ_S_W(uint64 instruction, Dis_info *info)
10917  {
10918      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10919      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10920      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
10921  
10922      const char *rd = GPR(rd_value, info);
10923      const char *rs = GPR(rs_value, info);
10924      const char *rt = GPR(rt_value, info);
10925  
10926      return img_format("MULQ_S.W %s, %s, %s", rd, rs, rt);
10927  }
10928  
10929  
10930  /*
10931   * [DSP] MULSA.W.PH ac, rs, rt - Multiply and subtract vector integer halfword
10932   *   elements and accumulate
10933   *
10934   *   3         2         1
10935   *  10987654321098765432109876543210
10936   *  001000            10110010111111
10937   *     rt -----
10938   *          rs -----
10939   *               ac --
10940   */
10941  static char *MULSA_W_PH(uint64 instruction, Dis_info *info)
10942  {
10943      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10944      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10945      uint64 ac_value = extract_ac_15_14(instruction);
10946  
10947      const char *ac = AC(ac_value, info);
10948      const char *rs = GPR(rs_value, info);
10949      const char *rt = GPR(rt_value, info);
10950  
10951      return img_format("MULSA.W.PH %s, %s, %s", ac, rs, rt);
10952  }
10953  
10954  
10955  /*
10956   * [DSP] MULSAQ_S.W.PH ac, rs, rt - Multiply and subtract vector fractional
10957   *   halfwords and accumulate
10958   *
10959   *   3         2         1
10960   *  10987654321098765432109876543210
10961   *  001000            11110010111111
10962   *     rt -----
10963   *          rs -----
10964   *               ac --
10965   */
10966  static char *MULSAQ_S_W_PH(uint64 instruction, Dis_info *info)
10967  {
10968      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
10969      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
10970      uint64 ac_value = extract_ac_15_14(instruction);
10971  
10972      const char *ac = AC(ac_value, info);
10973      const char *rs = GPR(rs_value, info);
10974      const char *rt = GPR(rt_value, info);
10975  
10976      return img_format("MULSAQ_S.W.PH %s, %s, %s", ac, rs, rt);
10977  }
10978  
10979  
10980  /*
10981   * [DSP] MULT ac, rs, rt - Multiply word
10982   *
10983   *   3         2         1
10984   *  10987654321098765432109876543210
10985   *  001000            00110010111111
10986   *     rt -----
10987   *          rs -----
10988   *               ac --
10989   */
10990  static char *MULT_DSP_(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 ac_value = extract_ac_15_14(instruction);
10995  
10996      const char *ac = AC(ac_value, info);
10997      const char *rs = GPR(rs_value, info);
10998      const char *rt = GPR(rt_value, info);
10999  
11000      return img_format("MULT %s, %s, %s", ac, rs, rt);
11001  }
11002  
11003  
11004  /*
11005   * [DSP] MULTU ac, rs, rt - Multiply unsigned word
11006   *
11007   *   3         2         1
11008   *  10987654321098765432109876543210
11009   *  001000            01110010111111
11010   *     rt -----
11011   *          rs -----
11012   *               ac --
11013   */
11014  static char *MULTU_DSP_(uint64 instruction, Dis_info *info)
11015  {
11016      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11017      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11018      uint64 ac_value = extract_ac_15_14(instruction);
11019  
11020      const char *ac = AC(ac_value, info);
11021      const char *rs = GPR(rs_value, info);
11022      const char *rt = GPR(rt_value, info);
11023  
11024      return img_format("MULTU %s, %s, %s", ac, rs, rt);
11025  }
11026  
11027  
11028  /*
11029   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11030   *
11031   *   3         2         1
11032   *  10987654321098765432109876543210
11033   *  001000               00010001101
11034   *     rt -----
11035   *          rs -----
11036   *               rd -----
11037   */
11038  static char *MULU(uint64 instruction, Dis_info *info)
11039  {
11040      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11041      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11042      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11043  
11044      const char *rd = GPR(rd_value, info);
11045      const char *rs = GPR(rs_value, info);
11046      const char *rt = GPR(rt_value, info);
11047  
11048      return img_format("MULU %s, %s, %s", rd, rs, rt);
11049  }
11050  
11051  
11052  /*
11053   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11054   *
11055   *   3         2         1
11056   *  10987654321098765432109876543210
11057   *  001000               00010001101
11058   *     rt -----
11059   *          rs -----
11060   *               rd -----
11061   */
11062  static char *NEG_D(uint64 instruction, Dis_info *info)
11063  {
11064      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11065      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11066  
11067      const char *ft = FPR(ft_value, info);
11068      const char *fs = FPR(fs_value, info);
11069  
11070      return img_format("NEG.D %s, %s", ft, fs);
11071  }
11072  
11073  
11074  /*
11075   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11076   *
11077   *   3         2         1
11078   *  10987654321098765432109876543210
11079   *  001000               00010001101
11080   *     rt -----
11081   *          rs -----
11082   *               rd -----
11083   */
11084  static char *NEG_S(uint64 instruction, Dis_info *info)
11085  {
11086      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11087      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11088  
11089      const char *ft = FPR(ft_value, info);
11090      const char *fs = FPR(fs_value, info);
11091  
11092      return img_format("NEG.S %s, %s", ft, fs);
11093  }
11094  
11095  
11096  /*
11097   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11098   *
11099   *   3         2         1
11100   *  10987654321098765432109876543210
11101   *  001000               00010001101
11102   *     rt -----
11103   *          rs -----
11104   *               rd -----
11105   */
11106  static char *NOP_16_(uint64 instruction, Dis_info *info)
11107  {
11108      (void)instruction;
11109  
11110      return g_strdup("NOP ");
11111  }
11112  
11113  
11114  /*
11115   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11116   *
11117   *   3         2         1
11118   *  10987654321098765432109876543210
11119   *  001000               00010001101
11120   *     rt -----
11121   *          rs -----
11122   *               rd -----
11123   */
11124  static char *NOP_32_(uint64 instruction, Dis_info *info)
11125  {
11126      (void)instruction;
11127  
11128      return g_strdup("NOP ");
11129  }
11130  
11131  
11132  /*
11133   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11134   *
11135   *   3         2         1
11136   *  10987654321098765432109876543210
11137   *  001000               00010001101
11138   *     rt -----
11139   *          rs -----
11140   *               rd -----
11141   */
11142  static char *NOR(uint64 instruction, Dis_info *info)
11143  {
11144      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11145      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11146      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11147  
11148      const char *rd = GPR(rd_value, info);
11149      const char *rs = GPR(rs_value, info);
11150      const char *rt = GPR(rt_value, info);
11151  
11152      return img_format("NOR %s, %s, %s", rd, rs, rt);
11153  }
11154  
11155  
11156  /*
11157   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11158   *
11159   *   3         2         1
11160   *  10987654321098765432109876543210
11161   *  001000               00010001101
11162   *     rt -----
11163   *          rs -----
11164   *               rd -----
11165   */
11166  static char *NOT_16_(uint64 instruction, Dis_info *info)
11167  {
11168      uint64 rt3_value = extract_rt3_9_8_7(instruction);
11169      uint64 rs3_value = extract_rs3_6_5_4(instruction);
11170  
11171      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
11172      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
11173  
11174      return img_format("NOT %s, %s", rt3, rs3);
11175  }
11176  
11177  
11178  /*
11179   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11180   *
11181   *   3         2         1
11182   *  10987654321098765432109876543210
11183   *  001000               00010001101
11184   *     rt -----
11185   *          rs -----
11186   *               rd -----
11187   */
11188  static char *OR_16_(uint64 instruction, Dis_info *info)
11189  {
11190      uint64 rt3_value = extract_rt3_9_8_7(instruction);
11191      uint64 rs3_value = extract_rs3_6_5_4(instruction);
11192  
11193      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
11194      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
11195  
11196      return img_format("OR %s, %s", rs3, rt3);
11197  }
11198  
11199  
11200  /*
11201   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11202   *
11203   *   3         2         1
11204   *  10987654321098765432109876543210
11205   *  001000               00010001101
11206   *     rt -----
11207   *          rs -----
11208   *               rd -----
11209   */
11210  static char *OR_32_(uint64 instruction, Dis_info *info)
11211  {
11212      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11213      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11214      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11215  
11216      const char *rd = GPR(rd_value, info);
11217      const char *rs = GPR(rs_value, info);
11218      const char *rt = GPR(rt_value, info);
11219  
11220      return img_format("OR %s, %s, %s", rd, rs, rt);
11221  }
11222  
11223  
11224  /*
11225   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11226   *
11227   *   3         2         1
11228   *  10987654321098765432109876543210
11229   *  001000               00010001101
11230   *     rt -----
11231   *          rs -----
11232   *               rd -----
11233   */
11234  static char *ORI(uint64 instruction, Dis_info *info)
11235  {
11236      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11237      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11238      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
11239  
11240      const char *rt = GPR(rt_value, info);
11241      const char *rs = GPR(rs_value, info);
11242  
11243      return img_format("ORI %s, %s, 0x%" PRIx64, rt, rs, u_value);
11244  }
11245  
11246  
11247  /*
11248   * [DSP] PACKRL.PH rd, rs, rt - Pack a word using the right halfword from one
11249   *         source register and left halfword from another source register
11250   *
11251   *   3         2         1
11252   *  10987654321098765432109876543210
11253   *  001000               00010001101
11254   *     rt -----
11255   *          rs -----
11256   *               rd -----
11257   */
11258  static char *PACKRL_PH(uint64 instruction, Dis_info *info)
11259  {
11260      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11261      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11262      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11263  
11264      const char *rd = GPR(rd_value, info);
11265      const char *rs = GPR(rs_value, info);
11266      const char *rt = GPR(rt_value, info);
11267  
11268      return img_format("PACKRL.PH %s, %s, %s", rd, rs, rt);
11269  }
11270  
11271  
11272  /*
11273   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
11274   *
11275   *   3         2         1
11276   *  10987654321098765432109876543210
11277   *  001000               00010001101
11278   *     rt -----
11279   *          rs -----
11280   *               rd -----
11281   */
11282  static char *PAUSE(uint64 instruction, Dis_info *info)
11283  {
11284      (void)instruction;
11285  
11286      return g_strdup("PAUSE ");
11287  }
11288  
11289  
11290  /*
11291   * [DSP] PICK.PH rd, rs, rt - Pick a vector of halfwords based on condition
11292   *         code bits
11293   *
11294   *   3         2         1
11295   *  10987654321098765432109876543210
11296   *  001000               00010001101
11297   *     rt -----
11298   *          rs -----
11299   *               rd -----
11300   */
11301  static char *PICK_PH(uint64 instruction, Dis_info *info)
11302  {
11303      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11304      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11305      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11306  
11307      const char *rd = GPR(rd_value, info);
11308      const char *rs = GPR(rs_value, info);
11309      const char *rt = GPR(rt_value, info);
11310  
11311      return img_format("PICK.PH %s, %s, %s", rd, rs, rt);
11312  }
11313  
11314  
11315  /*
11316   * [DSP] PICK.QB rd, rs, rt - Pick a vector of byte values based on condition
11317   *         code bits
11318   *
11319   *   3         2         1
11320   *  10987654321098765432109876543210
11321   *  001000               00010001101
11322   *     rt -----
11323   *          rs -----
11324   *               rd -----
11325   */
11326  static char *PICK_QB(uint64 instruction, Dis_info *info)
11327  {
11328      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11329      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11330      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11331  
11332      const char *rd = GPR(rd_value, info);
11333      const char *rs = GPR(rs_value, info);
11334      const char *rt = GPR(rt_value, info);
11335  
11336      return img_format("PICK.QB %s, %s, %s", rd, rs, rt);
11337  }
11338  
11339  
11340  /*
11341   * [DSP] PRECEQ.W.PHL rt, rs - Expand the precision of the left-most element
11342   *         of a paired halfword
11343   *
11344   *   3         2         1
11345   *  10987654321098765432109876543210
11346   *  001000               00010001101
11347   *     rt -----
11348   *          rs -----
11349   *               rd -----
11350   */
11351  static char *PRECEQ_W_PHL(uint64 instruction, Dis_info *info)
11352  {
11353      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11354      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11355  
11356      const char *rt = GPR(rt_value, info);
11357      const char *rs = GPR(rs_value, info);
11358  
11359      return img_format("PRECEQ.W.PHL %s, %s", rt, rs);
11360  }
11361  
11362  
11363  /*
11364   * [DSP] PRECEQ.W.PHR rt, rs - Expand the precision of the right-most element
11365   *         of a paired halfword
11366   *
11367   *   3         2         1
11368   *  10987654321098765432109876543210
11369   *  001000               00010001101
11370   *     rt -----
11371   *          rs -----
11372   *               rd -----
11373   */
11374  static char *PRECEQ_W_PHR(uint64 instruction, Dis_info *info)
11375  {
11376      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11377      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11378  
11379      const char *rt = GPR(rt_value, info);
11380      const char *rs = GPR(rs_value, info);
11381  
11382      return img_format("PRECEQ.W.PHR %s, %s", rt, rs);
11383  }
11384  
11385  
11386  /*
11387   * [DSP] PRECEQU.PH.QBLA rt, rs - Expand the precision of the two
11388   *         left-alternate elements of a quad byte vector
11389   *
11390   *   3         2         1
11391   *  10987654321098765432109876543210
11392   *  001000               00010001101
11393   *     rt -----
11394   *          rs -----
11395   *               rd -----
11396   */
11397  static char *PRECEQU_PH_QBLA(uint64 instruction, Dis_info *info)
11398  {
11399      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11400      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11401  
11402      const char *rt = GPR(rt_value, info);
11403      const char *rs = GPR(rs_value, info);
11404  
11405      return img_format("PRECEQU.PH.QBLA %s, %s", rt, rs);
11406  }
11407  
11408  
11409  /*
11410   * [DSP] PRECEQU.PH.QBL rt, rs - Expand the precision of the two left-most
11411   *         elements of a quad byte vector
11412   *
11413   *   3         2         1
11414   *  10987654321098765432109876543210
11415   *  001000               00010001101
11416   *     rt -----
11417   *          rs -----
11418   *               rd -----
11419   */
11420  static char *PRECEQU_PH_QBL(uint64 instruction, Dis_info *info)
11421  {
11422      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11423      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11424  
11425      const char *rt = GPR(rt_value, info);
11426      const char *rs = GPR(rs_value, info);
11427  
11428      return img_format("PRECEQU.PH.QBL %s, %s", rt, rs);
11429  }
11430  
11431  
11432  /*
11433   * [DSP] PRECEQU.PH.QBRA rt, rs - Expand the precision of the two
11434   *         right-alternate elements of a quad byte vector
11435   *
11436   *   3         2         1
11437   *  10987654321098765432109876543210
11438   *  001000               00010001101
11439   *     rt -----
11440   *          rs -----
11441   *               rd -----
11442   */
11443  static char *PRECEQU_PH_QBRA(uint64 instruction, Dis_info *info)
11444  {
11445      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11446      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11447  
11448      const char *rt = GPR(rt_value, info);
11449      const char *rs = GPR(rs_value, info);
11450  
11451      return img_format("PRECEQU.PH.QBRA %s, %s", rt, rs);
11452  }
11453  
11454  
11455  /*
11456   * [DSP] PRECEQU.PH.QBR rt, rs - Expand the precision of the two right-most
11457   *         elements of a quad byte vector
11458   *
11459   *   3         2         1
11460   *  10987654321098765432109876543210
11461   *  001000               00010001101
11462   *     rt -----
11463   *          rs -----
11464   *               rd -----
11465   */
11466  static char *PRECEQU_PH_QBR(uint64 instruction, Dis_info *info)
11467  {
11468      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11469      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11470  
11471      const char *rt = GPR(rt_value, info);
11472      const char *rs = GPR(rs_value, info);
11473  
11474      return img_format("PRECEQU.PH.QBR %s, %s", rt, rs);
11475  }
11476  
11477  
11478  /*
11479   * [DSP] PRECEU.PH.QBLA rt, rs - Expand the precision of the two
11480   *         left-alternate elements of a quad byte vector to four unsigned
11481   *         halfwords
11482   *
11483   *   3         2         1
11484   *  10987654321098765432109876543210
11485   *  001000               00010001101
11486   *     rt -----
11487   *          rs -----
11488   *               rd -----
11489   */
11490  static char *PRECEU_PH_QBLA(uint64 instruction, Dis_info *info)
11491  {
11492      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11493      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11494  
11495      const char *rt = GPR(rt_value, info);
11496      const char *rs = GPR(rs_value, info);
11497  
11498      return img_format("PRECEU.PH.QBLA %s, %s", rt, rs);
11499  }
11500  
11501  
11502  /*
11503   * [DSP] PRECEU.PH.QBL rt, rs - Expand the precision of the two left-most
11504   *         elements of a quad byte vector to form unsigned halfwords
11505   *
11506   *   3         2         1
11507   *  10987654321098765432109876543210
11508   *  001000               00010001101
11509   *     rt -----
11510   *          rs -----
11511   *               rd -----
11512   */
11513  static char *PRECEU_PH_QBL(uint64 instruction, Dis_info *info)
11514  {
11515      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11516      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11517  
11518      const char *rt = GPR(rt_value, info);
11519      const char *rs = GPR(rs_value, info);
11520  
11521      return img_format("PRECEU.PH.QBL %s, %s", rt, rs);
11522  }
11523  
11524  
11525  /*
11526   * [DSP] PRECEU.PH.QBRA rt, rs - Expand the precision of the two
11527   *         right-alternate elements of a quad byte vector to form four
11528   *         unsigned halfwords
11529   *
11530   *   3         2         1
11531   *  10987654321098765432109876543210
11532   *  001000               00010001101
11533   *     rt -----
11534   *          rs -----
11535   *               rd -----
11536   */
11537  static char *PRECEU_PH_QBRA(uint64 instruction, Dis_info *info)
11538  {
11539      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11540      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11541  
11542      const char *rt = GPR(rt_value, info);
11543      const char *rs = GPR(rs_value, info);
11544  
11545      return img_format("PRECEU.PH.QBRA %s, %s", rt, rs);
11546  }
11547  
11548  
11549  /*
11550   * [DSP] PRECEU.PH.QBR rt, rs - Expand the precision of the two right-most
11551   *         elements of a quad byte vector to form unsigned halfwords
11552   *
11553   *   3         2         1
11554   *  10987654321098765432109876543210
11555   *  001000               00010001101
11556   *     rt -----
11557   *          rs -----
11558   *               rd -----
11559   */
11560  static char *PRECEU_PH_QBR(uint64 instruction, Dis_info *info)
11561  {
11562      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11563      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11564  
11565      const char *rt = GPR(rt_value, info);
11566      const char *rs = GPR(rs_value, info);
11567  
11568      return img_format("PRECEU.PH.QBR %s, %s", rt, rs);
11569  }
11570  
11571  
11572  /*
11573   * [DSP] PRECR.QB.PH rd, rs, rt - Reduce the precision of four integer
11574   *   halfwords to four bytes
11575   *
11576   *   3         2         1
11577   *  10987654321098765432109876543210
11578   *  001000               x0001101101
11579   *     rt -----
11580   *          rs -----
11581   *               rd -----
11582   */
11583  static char *PRECR_QB_PH(uint64 instruction, Dis_info *info)
11584  {
11585      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11586      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11587      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11588  
11589      const char *rd = GPR(rd_value, info);
11590      const char *rs = GPR(rs_value, info);
11591      const char *rt = GPR(rt_value, info);
11592  
11593      return img_format("PRECR.QB.PH %s, %s, %s", rd, rs, rt);
11594  }
11595  
11596  
11597  /*
11598   * [DSP] PRECR_SRA.PH.W rt, rs, sa - Reduce the precision of two integer
11599   *   words to halfwords after a right shift
11600   *
11601   *   3         2         1
11602   *  10987654321098765432109876543210
11603   *  001000               x1110000101
11604   *     rt -----
11605   *          rs -----
11606   *               rd -----
11607   */
11608  static char *PRECR_SRA_PH_W(uint64 instruction, Dis_info *info)
11609  {
11610      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11611      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11612      uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
11613  
11614      const char *rt = GPR(rt_value, info);
11615      const char *rs = GPR(rs_value, info);
11616  
11617      return img_format("PRECR_SRA.PH.W %s, %s, 0x%" PRIx64, rt, rs, sa_value);
11618  }
11619  
11620  
11621  /*
11622   * [DSP] PRECR_SRA_R.PH.W rt, rs, sa - Reduce the precision of two integer
11623   *   words to halfwords after a right shift with rounding
11624   *
11625   *   3         2         1
11626   *  10987654321098765432109876543210
11627   *  001000               x1110000101
11628   *     rt -----
11629   *          rs -----
11630   *               rd -----
11631   */
11632  static char *PRECR_SRA_R_PH_W(uint64 instruction, Dis_info *info)
11633  {
11634      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11635      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11636      uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
11637  
11638      const char *rt = GPR(rt_value, info);
11639      const char *rs = GPR(rs_value, info);
11640  
11641      return img_format("PRECR_SRA_R.PH.W %s, %s, 0x%" PRIx64, rt, rs, sa_value);
11642  }
11643  
11644  
11645  /*
11646   * [DSP] PRECRQ.PH.W rd, rs, rt - Reduce the precision of fractional
11647   *   words to fractional halfwords
11648   *
11649   *   3         2         1
11650   *  10987654321098765432109876543210
11651   *  001000               x1110000101
11652   *     rt -----
11653   *          rs -----
11654   *               rd -----
11655   */
11656  static char *PRECRQ_PH_W(uint64 instruction, Dis_info *info)
11657  {
11658      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11659      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11660      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11661  
11662      const char *rd = GPR(rd_value, info);
11663      const char *rs = GPR(rs_value, info);
11664      const char *rt = GPR(rt_value, info);
11665  
11666      return img_format("PRECRQ.PH.W %s, %s, %s", rd, rs, rt);
11667  }
11668  
11669  
11670  /*
11671   * [DSP] PRECRQ.QB.PH rd, rs, rt - Reduce the precision of four fractional
11672   *   halfwords to four bytes
11673   *
11674   *   3         2         1
11675   *  10987654321098765432109876543210
11676   *  001000               x0010101101
11677   *     rt -----
11678   *          rs -----
11679   *               rd -----
11680   */
11681  static char *PRECRQ_QB_PH(uint64 instruction, Dis_info *info)
11682  {
11683      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11684      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11685      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11686  
11687      const char *rd = GPR(rd_value, info);
11688      const char *rs = GPR(rs_value, info);
11689      const char *rt = GPR(rt_value, info);
11690  
11691      return img_format("PRECRQ.QB.PH %s, %s, %s", rd, rs, rt);
11692  }
11693  
11694  
11695  /*
11696   * [DSP] PRECRQ_RS.PH.W rd, rs, rt - Reduce the precision of fractional
11697   *   words to halfwords with rounding and saturation
11698   *
11699   *   3         2         1
11700   *  10987654321098765432109876543210
11701   *  001000               x1110000101
11702   *     rt -----
11703   *          rs -----
11704   *               rd -----
11705   */
11706  static char *PRECRQ_RS_PH_W(uint64 instruction, Dis_info *info)
11707  {
11708      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11709      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11710      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
11711  
11712      const char *rd = GPR(rd_value, info);
11713      const char *rs = GPR(rs_value, info);
11714      const char *rt = GPR(rt_value, info);
11715  
11716      return img_format("PRECRQ_RS.PH.W %s, %s, %s", rd, rs, rt);
11717  }
11718  
11719  
11720  /*
11721   * [DSP] PRECRQU_S.QB.PH rd, rs, rt - Reduce the precision of fractional
11722   *   halfwords to unsigned bytes with saturation
11723   *
11724   *   3         2         1
11725   *  10987654321098765432109876543210
11726   *  001000               x1110000101
11727   *     rt -----
11728   *          rs -----
11729   *               rd -----
11730   */
11731  static char *PRECRQU_S_QB_PH(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 rd_value = extract_rd_15_14_13_12_11(instruction);
11736  
11737      const char *rd = GPR(rd_value, info);
11738      const char *rs = GPR(rs_value, info);
11739      const char *rt = GPR(rt_value, info);
11740  
11741      return img_format("PRECRQU_S.QB.PH %s, %s, %s", rd, rs, rt);
11742  }
11743  
11744  
11745  /*
11746   *
11747   *
11748   *   3         2         1
11749   *  10987654321098765432109876543210
11750   *  001000               x1110000101
11751   *     rt -----
11752   *          rs -----
11753   *               rd -----
11754   */
11755  static char *PREF_S9_(uint64 instruction, Dis_info *info)
11756  {
11757      uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
11758      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11759      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
11760  
11761      const char *rs = GPR(rs_value, info);
11762  
11763      return img_format("PREF 0x%" PRIx64 ", %" PRId64 "(%s)",
11764                        hint_value, s_value, rs);
11765  }
11766  
11767  
11768  /*
11769   *
11770   *
11771   *   3         2         1
11772   *  10987654321098765432109876543210
11773   *  001000               x1110000101
11774   *     rt -----
11775   *          rs -----
11776   *               rd -----
11777   */
11778  static char *PREF_U12_(uint64 instruction, Dis_info *info)
11779  {
11780      uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
11781      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11782      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
11783  
11784      const char *rs = GPR(rs_value, info);
11785  
11786      return img_format("PREF 0x%" PRIx64 ", 0x%" PRIx64 "(%s)",
11787                        hint_value, u_value, rs);
11788  }
11789  
11790  
11791  /*
11792   *
11793   *
11794   *   3         2         1
11795   *  10987654321098765432109876543210
11796   *  001000               x1110000101
11797   *     rt -----
11798   *          rs -----
11799   *               rd -----
11800   */
11801  static char *PREFE(uint64 instruction, Dis_info *info)
11802  {
11803      uint64 hint_value = extract_hint_25_24_23_22_21(instruction);
11804      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11805      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
11806  
11807      const char *rs = GPR(rs_value, info);
11808  
11809      return img_format("PREFE 0x%" PRIx64 ", %" PRId64 "(%s)",
11810                        hint_value, s_value, rs);
11811  }
11812  
11813  
11814  /*
11815   * [DSP] PREPEND rt, rs, sa - Right shift and prepend bits to the MSB
11816   *
11817   *   3         2         1
11818   *  10987654321098765432109876543210
11819   *  001000               x1110000101
11820   *     rt -----
11821   *          rs -----
11822   *               rd -----
11823   */
11824  static char *PREPEND(uint64 instruction, Dis_info *info)
11825  {
11826      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11827      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11828      uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
11829  
11830      const char *rt = GPR(rt_value, info);
11831      const char *rs = GPR(rs_value, info);
11832  
11833      return img_format("PREPEND %s, %s, 0x%" PRIx64, rt, rs, sa_value);
11834  }
11835  
11836  
11837  /*
11838   * [DSP] RADDU.W.QB rt, rs - Unsigned reduction add of vector quad bytes
11839   *
11840   *   3         2         1
11841   *  10987654321098765432109876543210
11842   *  001000          1111000100111111
11843   *     rt -----
11844   *          rs -----
11845   */
11846  static char *RADDU_W_QB(uint64 instruction, Dis_info *info)
11847  {
11848      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11849      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11850  
11851      const char *rt = GPR(rt_value, info);
11852      const char *rs = GPR(rs_value, info);
11853  
11854      return img_format("RADDU.W.QB %s, %s", rt, rs);
11855  }
11856  
11857  
11858  /*
11859   * [DSP] RDDSP rt, mask - Read DSPControl register fields to a GPR
11860   *
11861   *   3         2         1
11862   *  10987654321098765432109876543210
11863   *  001000            00011001111111
11864   *     rt -----
11865   *        mask -------
11866   */
11867  static char *RDDSP(uint64 instruction, Dis_info *info)
11868  {
11869      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11870      uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
11871  
11872      const char *rt = GPR(rt_value, info);
11873  
11874      return img_format("RDDSP %s, 0x%" PRIx64, rt, mask_value);
11875  }
11876  
11877  
11878  /*
11879   *
11880   *
11881   *   3         2         1
11882   *  10987654321098765432109876543210
11883   *  001000               x1110000101
11884   *     rt -----
11885   *          rs -----
11886   *               rd -----
11887   */
11888  static char *RDHWR(uint64 instruction, Dis_info *info)
11889  {
11890      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11891      uint64 hs_value = extract_hs_20_19_18_17_16(instruction);
11892      uint64 sel_value = extract_sel_13_12_11(instruction);
11893  
11894      const char *rt = GPR(rt_value, info);
11895  
11896      return img_format("RDHWR %s, CP%" PRIu64 ", 0x%" PRIx64,
11897                        rt, hs_value, sel_value);
11898  }
11899  
11900  
11901  /*
11902   *
11903   *
11904   *   3         2         1
11905   *  10987654321098765432109876543210
11906   *  001000               x1110000101
11907   *     rt -----
11908   *          rs -----
11909   *               rd -----
11910   */
11911  static char *RDPGPR(uint64 instruction, Dis_info *info)
11912  {
11913      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11914      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
11915  
11916      const char *rt = GPR(rt_value, info);
11917      const char *rs = GPR(rs_value, info);
11918  
11919      return img_format("RDPGPR %s, %s", rt, rs);
11920  }
11921  
11922  
11923  /*
11924   *
11925   *
11926   *   3         2         1
11927   *  10987654321098765432109876543210
11928   *  001000               x1110000101
11929   *     rt -----
11930   *          rs -----
11931   *               rd -----
11932   */
11933  static char *RECIP_D(uint64 instruction, Dis_info *info)
11934  {
11935      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11936      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11937  
11938      const char *ft = FPR(ft_value, info);
11939      const char *fs = FPR(fs_value, info);
11940  
11941      return img_format("RECIP.D %s, %s", ft, fs);
11942  }
11943  
11944  
11945  /*
11946   *
11947   *
11948   *   3         2         1
11949   *  10987654321098765432109876543210
11950   *  001000               x1110000101
11951   *     rt -----
11952   *          rs -----
11953   *               rd -----
11954   */
11955  static char *RECIP_S(uint64 instruction, Dis_info *info)
11956  {
11957      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
11958      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
11959  
11960      const char *ft = FPR(ft_value, info);
11961      const char *fs = FPR(fs_value, info);
11962  
11963      return img_format("RECIP.S %s, %s", ft, fs);
11964  }
11965  
11966  
11967  /*
11968   * [DSP] REPL.PH rd, s - Replicate immediate integer into all vector element
11969   *   positions
11970   *
11971   *   3         2         1
11972   *  10987654321098765432109876543210
11973   *  001000               x0000111101
11974   *     rt -----
11975   *           s ----------
11976   */
11977  static char *REPL_PH(uint64 instruction, Dis_info *info)
11978  {
11979      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
11980      int64 s_value = extract_s__se9_20_19_18_17_16_15_14_13_12_11(instruction);
11981  
11982      const char *rt = GPR(rt_value, info);
11983  
11984      return img_format("REPL.PH %s, %" PRId64, rt, s_value);
11985  }
11986  
11987  
11988  /*
11989   * [DSP] REPL.QB rd, u - Replicate immediate integer into all vector element
11990   *   positions
11991   *
11992   *   3         2         1
11993   *  10987654321098765432109876543210
11994   *  001000             x010111111111
11995   *     rt -----
11996   *           u --------
11997   */
11998  static char *REPL_QB(uint64 instruction, Dis_info *info)
11999  {
12000      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12001      uint64 u_value = extract_u_20_19_18_17_16_15_14_13(instruction);
12002  
12003      const char *rt = GPR(rt_value, info);
12004  
12005      return img_format("REPL.QB %s, 0x%" PRIx64, rt, u_value);
12006  }
12007  
12008  
12009  /*
12010   * [DSP] REPLV.PH rt, rs - Replicate a halfword into all vector element
12011   *   positions
12012   *
12013   *   3         2         1
12014   *  10987654321098765432109876543210
12015   *  001000          0000001100111111
12016   *     rt -----
12017   *          rs -----
12018   */
12019  static char *REPLV_PH(uint64 instruction, Dis_info *info)
12020  {
12021      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12022      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12023  
12024      const char *rt = GPR(rt_value, info);
12025      const char *rs = GPR(rs_value, info);
12026  
12027      return img_format("REPLV.PH %s, %s", rt, rs);
12028  }
12029  
12030  
12031  /*
12032   * [DSP] REPLV.QB rt, rs - Replicate byte into all vector element positions
12033   *
12034   *   3         2         1
12035   *  10987654321098765432109876543210
12036   *  001000          0001001100111111
12037   *     rt -----
12038   *          rs -----
12039   */
12040  static char *REPLV_QB(uint64 instruction, Dis_info *info)
12041  {
12042      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12043      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12044  
12045      const char *rt = GPR(rt_value, info);
12046      const char *rs = GPR(rs_value, info);
12047  
12048      return img_format("REPLV.QB %s, %s", rt, rs);
12049  }
12050  
12051  
12052  /*
12053   *
12054   *
12055   *   3         2         1
12056   *  10987654321098765432109876543210
12057   *  001000               x1110000101
12058   *     rt -----
12059   *          rs -----
12060   *               rd -----
12061   */
12062  static char *RESTORE_32_(uint64 instruction, Dis_info *info)
12063  {
12064      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12065      uint64 count_value = extract_count_19_18_17_16(instruction);
12066      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12067      uint64 gp_value = extract_gp_2(instruction);
12068  
12069      g_autofree char *save_restore_str = save_restore_list(
12070          rt_value, count_value, gp_value, info);
12071      return img_format("RESTORE 0x%" PRIx64 "%s", u_value, save_restore_str);
12072  }
12073  
12074  
12075  /*
12076   *
12077   *
12078   *   3         2         1
12079   *  10987654321098765432109876543210
12080   *  001000               x1110000101
12081   *     rt -----
12082   *          rs -----
12083   *               rd -----
12084   */
12085  static char *RESTORE_JRC_16_(uint64 instruction, Dis_info *info)
12086  {
12087      uint64 rt1_value = extract_rtl_11(instruction);
12088      uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12089      uint64 count_value = extract_count_3_2_1_0(instruction);
12090  
12091      g_autofree char *save_restore_str = save_restore_list(
12092          encode_rt1_from_rt(rt1_value), count_value, 0, info);
12093      return img_format("RESTORE.JRC 0x%" PRIx64 "%s", u_value, save_restore_str);
12094  }
12095  
12096  
12097  /*
12098   *
12099   *
12100   *   3         2         1
12101   *  10987654321098765432109876543210
12102   *  001000               x1110000101
12103   *     rt -----
12104   *          rs -----
12105   *               rd -----
12106   */
12107  static char *RESTORE_JRC_32_(uint64 instruction, Dis_info *info)
12108  {
12109      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12110      uint64 count_value = extract_count_19_18_17_16(instruction);
12111      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12112      uint64 gp_value = extract_gp_2(instruction);
12113  
12114      g_autofree char *save_restore_str = save_restore_list(
12115          rt_value, count_value, gp_value, info);
12116      return img_format("RESTORE.JRC 0x%" PRIx64 "%s", u_value,
12117                        save_restore_str);
12118  }
12119  
12120  
12121  /*
12122   *
12123   *
12124   *   3         2         1
12125   *  10987654321098765432109876543210
12126   *  001000               x1110000101
12127   *     rt -----
12128   *          rs -----
12129   *               rd -----
12130   */
12131  static char *RESTOREF(uint64 instruction, Dis_info *info)
12132  {
12133      uint64 count_value = extract_count_19_18_17_16(instruction);
12134      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12135  
12136  
12137      return img_format("RESTOREF 0x%" PRIx64 ", 0x%" PRIx64,
12138                        u_value, count_value);
12139  }
12140  
12141  
12142  /*
12143   *
12144   *
12145   *   3         2         1
12146   *  10987654321098765432109876543210
12147   *  001000               x1110000101
12148   *     rt -----
12149   *          rs -----
12150   *               rd -----
12151   */
12152  static char *RINT_D(uint64 instruction, Dis_info *info)
12153  {
12154      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12155      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12156  
12157      const char *ft = FPR(ft_value, info);
12158      const char *fs = FPR(fs_value, info);
12159  
12160      return img_format("RINT.D %s, %s", ft, fs);
12161  }
12162  
12163  
12164  /*
12165   *
12166   *
12167   *   3         2         1
12168   *  10987654321098765432109876543210
12169   *  001000               x1110000101
12170   *     rt -----
12171   *          rs -----
12172   *               rd -----
12173   */
12174  static char *RINT_S(uint64 instruction, Dis_info *info)
12175  {
12176      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12177      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12178  
12179      const char *ft = FPR(ft_value, info);
12180      const char *fs = FPR(fs_value, info);
12181  
12182      return img_format("RINT.S %s, %s", ft, fs);
12183  }
12184  
12185  
12186  /*
12187   *
12188   *
12189   *   3         2         1
12190   *  10987654321098765432109876543210
12191   *  001000               x1110000101
12192   *     rt -----
12193   *          rs -----
12194   *               rd -----
12195   */
12196  static char *ROTR(uint64 instruction, Dis_info *info)
12197  {
12198      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12199      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12200      uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12201  
12202      const char *rt = GPR(rt_value, info);
12203      const char *rs = GPR(rs_value, info);
12204  
12205      return img_format("ROTR %s, %s, 0x%" PRIx64, rt, rs, shift_value);
12206  }
12207  
12208  
12209  /*
12210   *
12211   *
12212   *   3         2         1
12213   *  10987654321098765432109876543210
12214   *  001000               x1110000101
12215   *     rt -----
12216   *          rs -----
12217   *               rd -----
12218   */
12219  static char *ROTRV(uint64 instruction, Dis_info *info)
12220  {
12221      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12222      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12223      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12224  
12225      const char *rd = GPR(rd_value, info);
12226      const char *rs = GPR(rs_value, info);
12227      const char *rt = GPR(rt_value, info);
12228  
12229      return img_format("ROTRV %s, %s, %s", rd, rs, rt);
12230  }
12231  
12232  
12233  /*
12234   *
12235   *
12236   *   3         2         1
12237   *  10987654321098765432109876543210
12238   *  001000               x1110000101
12239   *     rt -----
12240   *          rs -----
12241   *               rd -----
12242   */
12243  static char *ROTX(uint64 instruction, Dis_info *info)
12244  {
12245      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12246      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12247      uint64 shiftx_value = extract_shiftx_10_9_8_7__s1(instruction);
12248      uint64 stripe_value = extract_stripe_6(instruction);
12249      uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
12250  
12251      const char *rt = GPR(rt_value, info);
12252      const char *rs = GPR(rs_value, info);
12253  
12254      return img_format("ROTX %s, %s, 0x%" PRIx64 ", 0x%" PRIx64 ", 0x%" PRIx64,
12255                         rt, rs, shift_value, shiftx_value, stripe_value);
12256  }
12257  
12258  
12259  /*
12260   *
12261   *
12262   *   3         2         1
12263   *  10987654321098765432109876543210
12264   *  001000               x1110000101
12265   *     rt -----
12266   *          rs -----
12267   *               rd -----
12268   */
12269  static char *ROUND_L_D(uint64 instruction, Dis_info *info)
12270  {
12271      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12272      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12273  
12274      const char *ft = FPR(ft_value, info);
12275      const char *fs = FPR(fs_value, info);
12276  
12277      return img_format("ROUND.L.D %s, %s", ft, fs);
12278  }
12279  
12280  
12281  /*
12282   *
12283   *
12284   *   3         2         1
12285   *  10987654321098765432109876543210
12286   *  001000               x1110000101
12287   *     rt -----
12288   *          rs -----
12289   *               rd -----
12290   */
12291  static char *ROUND_L_S(uint64 instruction, Dis_info *info)
12292  {
12293      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12294      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12295  
12296      const char *ft = FPR(ft_value, info);
12297      const char *fs = FPR(fs_value, info);
12298  
12299      return img_format("ROUND.L.S %s, %s", ft, fs);
12300  }
12301  
12302  
12303  /*
12304   *
12305   *
12306   *   3         2         1
12307   *  10987654321098765432109876543210
12308   *  001000               x1110000101
12309   *     rt -----
12310   *          rs -----
12311   *               rd -----
12312   */
12313  static char *ROUND_W_D(uint64 instruction, Dis_info *info)
12314  {
12315      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12316      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12317  
12318      const char *ft = FPR(ft_value, info);
12319      const char *fs = FPR(fs_value, info);
12320  
12321      return img_format("ROUND.W.D %s, %s", ft, fs);
12322  }
12323  
12324  
12325  /*
12326   *
12327   *
12328   *   3         2         1
12329   *  10987654321098765432109876543210
12330   *  001000               x1110000101
12331   *     rt -----
12332   *          rs -----
12333   *               rd -----
12334   */
12335  static char *ROUND_W_S(uint64 instruction, Dis_info *info)
12336  {
12337      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12338      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12339  
12340      const char *ft = FPR(ft_value, info);
12341      const char *fs = FPR(fs_value, info);
12342  
12343      return img_format("ROUND.W.S %s, %s", ft, fs);
12344  }
12345  
12346  
12347  /*
12348   *
12349   *
12350   *   3         2         1
12351   *  10987654321098765432109876543210
12352   *  001000               x1110000101
12353   *     rt -----
12354   *          rs -----
12355   *               rd -----
12356   */
12357  static char *RSQRT_D(uint64 instruction, Dis_info *info)
12358  {
12359      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12360      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12361  
12362      const char *ft = FPR(ft_value, info);
12363      const char *fs = FPR(fs_value, info);
12364  
12365      return img_format("RSQRT.D %s, %s", ft, fs);
12366  }
12367  
12368  
12369  /*
12370   *
12371   *
12372   *   3         2         1
12373   *  10987654321098765432109876543210
12374   *  001000               x1110000101
12375   *     rt -----
12376   *          rs -----
12377   *               rd -----
12378   */
12379  static char *RSQRT_S(uint64 instruction, Dis_info *info)
12380  {
12381      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12382      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
12383  
12384      const char *ft = FPR(ft_value, info);
12385      const char *fs = FPR(fs_value, info);
12386  
12387      return img_format("RSQRT.S %s, %s", ft, fs);
12388  }
12389  
12390  
12391  /*
12392   *
12393   *
12394   *   3         2         1
12395   *  10987654321098765432109876543210
12396   *  001000               01001001101
12397   *     rt -----
12398   *          rs -----
12399   *               rd -----
12400   */
12401  static char *SAVE_16_(uint64 instruction, Dis_info *info)
12402  {
12403      uint64 rt1_value = extract_rtl_11(instruction);
12404      uint64 u_value = extract_u_7_6_5_4__s4(instruction);
12405      uint64 count_value = extract_count_3_2_1_0(instruction);
12406  
12407      g_autofree char *save_restore_str = save_restore_list(
12408          encode_rt1_from_rt(rt1_value), count_value, 0, info);
12409      return img_format("SAVE 0x%" PRIx64 "%s", u_value, save_restore_str);
12410  }
12411  
12412  
12413  /*
12414   *
12415   *
12416   *   3         2         1
12417   *  10987654321098765432109876543210
12418   *  001000               01001001101
12419   *     rt -----
12420   *          rs -----
12421   *               rd -----
12422   */
12423  static char *SAVE_32_(uint64 instruction, Dis_info *info)
12424  {
12425      uint64 count_value = extract_count_19_18_17_16(instruction);
12426      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12427      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12428      uint64 gp_value = extract_gp_2(instruction);
12429  
12430      g_autofree char *save_restore_str = save_restore_list(
12431          rt_value, count_value, gp_value, info);
12432      return img_format("SAVE 0x%" PRIx64 "%s", u_value, save_restore_str);
12433  }
12434  
12435  
12436  /*
12437   *
12438   *
12439   *   3         2         1
12440   *  10987654321098765432109876543210
12441   *  001000               01001001101
12442   *     rt -----
12443   *          rs -----
12444   *               rd -----
12445   */
12446  static char *SAVEF(uint64 instruction, Dis_info *info)
12447  {
12448      uint64 count_value = extract_count_19_18_17_16(instruction);
12449      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3__s3(instruction);
12450  
12451  
12452      return img_format("SAVEF 0x%" PRIx64 ", 0x%" PRIx64, u_value, count_value);
12453  }
12454  
12455  
12456  /*
12457   *
12458   *
12459   *   3         2         1
12460   *  10987654321098765432109876543210
12461   *  001000               01001001101
12462   *     rt -----
12463   *          rs -----
12464   *               rd -----
12465   */
12466  static char *SB_16_(uint64 instruction, Dis_info *info)
12467  {
12468      uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
12469      uint64 rs3_value = extract_rs3_6_5_4(instruction);
12470      uint64 u_value = extract_u_1_0(instruction);
12471  
12472      const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info);
12473      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
12474  
12475      return img_format("SB %s, 0x%" PRIx64 "(%s)", rtz3, u_value, rs3);
12476  }
12477  
12478  
12479  /*
12480   *
12481   *
12482   *   3         2         1
12483   *  10987654321098765432109876543210
12484   *  001000               01001001101
12485   *     rt -----
12486   *          rs -----
12487   *               rd -----
12488   */
12489  static char *SB_GP_(uint64 instruction, Dis_info *info)
12490  {
12491      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12492      uint64 u_value = extract_u_17_to_0(instruction);
12493  
12494      const char *rt = GPR(rt_value, info);
12495  
12496      return img_format("SB %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
12497  }
12498  
12499  
12500  /*
12501   *
12502   *
12503   *   3         2         1
12504   *  10987654321098765432109876543210
12505   *  001000               01001001101
12506   *     rt -----
12507   *          rs -----
12508   *               rd -----
12509   */
12510  static char *SB_S9_(uint64 instruction, Dis_info *info)
12511  {
12512      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12513      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12514      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12515  
12516      const char *rt = GPR(rt_value, info);
12517      const char *rs = GPR(rs_value, info);
12518  
12519      return img_format("SB %s, %" PRId64 "(%s)", rt, s_value, rs);
12520  }
12521  
12522  
12523  /*
12524   *
12525   *
12526   *   3         2         1
12527   *  10987654321098765432109876543210
12528   *  001000               01001001101
12529   *     rt -----
12530   *          rs -----
12531   *               rd -----
12532   */
12533  static char *SB_U12_(uint64 instruction, Dis_info *info)
12534  {
12535      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12536      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12537      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12538  
12539      const char *rt = GPR(rt_value, info);
12540      const char *rs = GPR(rs_value, info);
12541  
12542      return img_format("SB %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
12543  }
12544  
12545  
12546  /*
12547   *
12548   *
12549   *   3         2         1
12550   *  10987654321098765432109876543210
12551   *  001000               01001001101
12552   *     rt -----
12553   *          rs -----
12554   *               rd -----
12555   */
12556  static char *SBE(uint64 instruction, Dis_info *info)
12557  {
12558      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12559      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12560      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12561  
12562      const char *rt = GPR(rt_value, info);
12563      const char *rs = GPR(rs_value, info);
12564  
12565      return img_format("SBE %s, %" PRId64 "(%s)", rt, s_value, rs);
12566  }
12567  
12568  
12569  /*
12570   *
12571   *
12572   *   3         2         1
12573   *  10987654321098765432109876543210
12574   *  001000               01001001101
12575   *     rt -----
12576   *          rs -----
12577   *               rd -----
12578   */
12579  static char *SBX(uint64 instruction, Dis_info *info)
12580  {
12581      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12582      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12583      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
12584  
12585      const char *rd = GPR(rd_value, info);
12586      const char *rs = GPR(rs_value, info);
12587      const char *rt = GPR(rt_value, info);
12588  
12589      return img_format("SBX %s, %s(%s)", rd, rs, rt);
12590  }
12591  
12592  
12593  /*
12594   *
12595   *
12596   *   3         2         1
12597   *  10987654321098765432109876543210
12598   *  001000               01001001101
12599   *     rt -----
12600   *          rs -----
12601   *               rd -----
12602   */
12603  static char *SC(uint64 instruction, Dis_info *info)
12604  {
12605      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12606      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12607      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
12608  
12609      const char *rt = GPR(rt_value, info);
12610      const char *rs = GPR(rs_value, info);
12611  
12612      return img_format("SC %s, %" PRId64 "(%s)", rt, s_value, rs);
12613  }
12614  
12615  
12616  /*
12617   *
12618   *
12619   *   3         2         1
12620   *  10987654321098765432109876543210
12621   *  001000               01001001101
12622   *     rt -----
12623   *          rs -----
12624   *               rd -----
12625   */
12626  static char *SCD(uint64 instruction, Dis_info *info)
12627  {
12628      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12629      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12630      int64 s_value = extract_s__se8_15_7_6_5_4_3_s3(instruction);
12631  
12632      const char *rt = GPR(rt_value, info);
12633      const char *rs = GPR(rs_value, info);
12634  
12635      return img_format("SCD %s, %" PRId64 "(%s)", rt, s_value, rs);
12636  }
12637  
12638  
12639  /*
12640   *
12641   *
12642   *   3         2         1
12643   *  10987654321098765432109876543210
12644   *  001000               01001001101
12645   *     rt -----
12646   *          rs -----
12647   *               rd -----
12648   */
12649  static char *SCDP(uint64 instruction, Dis_info *info)
12650  {
12651      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12652      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12653      uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
12654  
12655      const char *rt = GPR(rt_value, info);
12656      const char *ru = GPR(ru_value, info);
12657      const char *rs = GPR(rs_value, info);
12658  
12659      return img_format("SCDP %s, %s, (%s)", rt, ru, rs);
12660  }
12661  
12662  
12663  /*
12664   *
12665   *
12666   *   3         2         1
12667   *  10987654321098765432109876543210
12668   *  001000               01001001101
12669   *     rt -----
12670   *          rs -----
12671   *               rd -----
12672   */
12673  static char *SCE(uint64 instruction, Dis_info *info)
12674  {
12675      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12676      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12677      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_s2(instruction);
12678  
12679      const char *rt = GPR(rt_value, info);
12680      const char *rs = GPR(rs_value, info);
12681  
12682      return img_format("SCE %s, %" PRId64 "(%s)", rt, s_value, rs);
12683  }
12684  
12685  
12686  /*
12687   *
12688   *
12689   *   3         2         1
12690   *  10987654321098765432109876543210
12691   *  001000               01001001101
12692   *     rt -----
12693   *          rs -----
12694   *               rd -----
12695   */
12696  static char *SCWP(uint64 instruction, Dis_info *info)
12697  {
12698      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12699      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12700      uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
12701  
12702      const char *rt = GPR(rt_value, info);
12703      const char *ru = GPR(ru_value, info);
12704      const char *rs = GPR(rs_value, info);
12705  
12706      return img_format("SCWP %s, %s, (%s)", rt, ru, rs);
12707  }
12708  
12709  
12710  /*
12711   *
12712   *
12713   *   3         2         1
12714   *  10987654321098765432109876543210
12715   *  001000               01001001101
12716   *     rt -----
12717   *          rs -----
12718   *               rd -----
12719   */
12720  static char *SCWPE(uint64 instruction, Dis_info *info)
12721  {
12722      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12723      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12724      uint64 ru_value = extract_ru_7_6_5_4_3(instruction);
12725  
12726      const char *rt = GPR(rt_value, info);
12727      const char *ru = GPR(ru_value, info);
12728      const char *rs = GPR(rs_value, info);
12729  
12730      return img_format("SCWPE %s, %s, (%s)", rt, ru, rs);
12731  }
12732  
12733  
12734  /*
12735   *
12736   *
12737   *   3         2         1
12738   *  10987654321098765432109876543210
12739   *  001000               01001001101
12740   *     rt -----
12741   *          rs -----
12742   *               rd -----
12743   */
12744  static char *SD_GP_(uint64 instruction, Dis_info *info)
12745  {
12746      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12747      uint64 u_value = extract_u_20_to_3__s3(instruction);
12748  
12749      const char *rt = GPR(rt_value, info);
12750  
12751      return img_format("SD %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
12752  }
12753  
12754  
12755  /*
12756   *
12757   *
12758   *   3         2         1
12759   *  10987654321098765432109876543210
12760   *  001000               01001001101
12761   *     rt -----
12762   *          rs -----
12763   *               rd -----
12764   */
12765  static char *SD_S9_(uint64 instruction, Dis_info *info)
12766  {
12767      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12768      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12769      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12770  
12771      const char *rt = GPR(rt_value, info);
12772      const char *rs = GPR(rs_value, info);
12773  
12774      return img_format("SD %s, %" PRId64 "(%s)", rt, s_value, rs);
12775  }
12776  
12777  
12778  /*
12779   *
12780   *
12781   *   3         2         1
12782   *  10987654321098765432109876543210
12783   *  001000               01001001101
12784   *     rt -----
12785   *          rs -----
12786   *               rd -----
12787   */
12788  static char *SD_U12_(uint64 instruction, Dis_info *info)
12789  {
12790      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12791      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12792      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12793  
12794      const char *rt = GPR(rt_value, info);
12795      const char *rs = GPR(rs_value, info);
12796  
12797      return img_format("SD %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
12798  }
12799  
12800  
12801  /*
12802   *
12803   *
12804   *   3         2         1
12805   *  10987654321098765432109876543210
12806   *  001000               01001001101
12807   *     rt -----
12808   *          rs -----
12809   *               rd -----
12810   */
12811  static char *SDBBP_16_(uint64 instruction, Dis_info *info)
12812  {
12813      uint64 code_value = extract_code_2_1_0(instruction);
12814  
12815  
12816      return img_format("SDBBP 0x%" PRIx64, code_value);
12817  }
12818  
12819  
12820  /*
12821   *
12822   *
12823   *   3         2         1
12824   *  10987654321098765432109876543210
12825   *  001000               01001001101
12826   *     rt -----
12827   *          rs -----
12828   *               rd -----
12829   */
12830  static char *SDBBP_32_(uint64 instruction, Dis_info *info)
12831  {
12832      uint64 code_value = extract_code_18_to_0(instruction);
12833  
12834  
12835      return img_format("SDBBP 0x%" PRIx64, code_value);
12836  }
12837  
12838  
12839  /*
12840   *
12841   *
12842   *   3         2         1
12843   *  10987654321098765432109876543210
12844   *  001000               01001001101
12845   *     rt -----
12846   *          rs -----
12847   *               rd -----
12848   */
12849  static char *SDC1_GP_(uint64 instruction, Dis_info *info)
12850  {
12851      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12852      uint64 u_value = extract_u_17_to_2__s2(instruction);
12853  
12854      const char *ft = FPR(ft_value, info);
12855  
12856      return img_format("SDC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28);
12857  }
12858  
12859  
12860  /*
12861   *
12862   *
12863   *   3         2         1
12864   *  10987654321098765432109876543210
12865   *  001000               01001001101
12866   *     rt -----
12867   *          rs -----
12868   *               rd -----
12869   */
12870  static char *SDC1_S9_(uint64 instruction, Dis_info *info)
12871  {
12872      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12873      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12874      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12875  
12876      const char *ft = FPR(ft_value, info);
12877      const char *rs = GPR(rs_value, info);
12878  
12879      return img_format("SDC1 %s, %" PRId64 "(%s)", ft, s_value, rs);
12880  }
12881  
12882  
12883  /*
12884   *
12885   *
12886   *   3         2         1
12887   *  10987654321098765432109876543210
12888   *  001000               01001001101
12889   *     rt -----
12890   *          rs -----
12891   *               rd -----
12892   */
12893  static char *SDC1_U12_(uint64 instruction, Dis_info *info)
12894  {
12895      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
12896      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12897      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
12898  
12899      const char *ft = FPR(ft_value, info);
12900      const char *rs = GPR(rs_value, info);
12901  
12902      return img_format("SDC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs);
12903  }
12904  
12905  
12906  /*
12907   *
12908   *
12909   *   3         2         1
12910   *  10987654321098765432109876543210
12911   *  001000               01001001101
12912   *     rt -----
12913   *          rs -----
12914   *               rd -----
12915   */
12916  static char *SDC1X(uint64 instruction, Dis_info *info)
12917  {
12918      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12919      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12920      uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
12921  
12922      const char *ft = FPR(ft_value, info);
12923      const char *rs = GPR(rs_value, info);
12924      const char *rt = GPR(rt_value, info);
12925  
12926      return img_format("SDC1X %s, %s(%s)", ft, rs, rt);
12927  }
12928  
12929  
12930  /*
12931   *
12932   *
12933   *   3         2         1
12934   *  10987654321098765432109876543210
12935   *  001000               01001001101
12936   *     rt -----
12937   *          rs -----
12938   *               rd -----
12939   */
12940  static char *SDC1XS(uint64 instruction, Dis_info *info)
12941  {
12942      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12943      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12944      uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
12945  
12946      const char *ft = FPR(ft_value, info);
12947      const char *rs = GPR(rs_value, info);
12948      const char *rt = GPR(rt_value, info);
12949  
12950      return img_format("SDC1XS %s, %s(%s)", ft, rs, rt);
12951  }
12952  
12953  
12954  /*
12955   *
12956   *
12957   *   3         2         1
12958   *  10987654321098765432109876543210
12959   *  001000               01001001101
12960   *     rt -----
12961   *          rs -----
12962   *               rd -----
12963   */
12964  static char *SDC2(uint64 instruction, Dis_info *info)
12965  {
12966      uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
12967      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12968      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12969  
12970      const char *rs = GPR(rs_value, info);
12971  
12972      return img_format("SDC2 CP%" PRIu64 ", %" PRId64 "(%s)",
12973                        cs_value, s_value, rs);
12974  }
12975  
12976  
12977  /*
12978   *
12979   *
12980   *   3         2         1
12981   *  10987654321098765432109876543210
12982   *  001000               01001001101
12983   *     rt -----
12984   *          rs -----
12985   *               rd -----
12986   */
12987  static char *SDM(uint64 instruction, Dis_info *info)
12988  {
12989      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
12990      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
12991      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
12992      uint64 count3_value = extract_count3_14_13_12(instruction);
12993  
12994      const char *rt = GPR(rt_value, info);
12995      const char *rs = GPR(rs_value, info);
12996      uint64 count3 = encode_count3_from_count(count3_value);
12997  
12998      return img_format("SDM %s, %" PRId64 "(%s), 0x%" PRIx64,
12999                        rt, s_value, rs, count3);
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 *SDPC_48_(uint64 instruction, Dis_info *info)
13014  {
13015      uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
13016      int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
13017  
13018      const char *rt = GPR(rt_value, info);
13019      g_autofree char *s = ADDRESS(s_value, 6, info);
13020  
13021      return img_format("SDPC %s, %s", rt, s);
13022  }
13023  
13024  
13025  /*
13026   *
13027   *
13028   *   3         2         1
13029   *  10987654321098765432109876543210
13030   *  001000               01001001101
13031   *     rt -----
13032   *          rs -----
13033   *               rd -----
13034   */
13035  static char *SDXS(uint64 instruction, Dis_info *info)
13036  {
13037      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13038      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13039      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13040  
13041      const char *rd = GPR(rd_value, info);
13042      const char *rs = GPR(rs_value, info);
13043      const char *rt = GPR(rt_value, info);
13044  
13045      return img_format("SDXS %s, %s(%s)", rd, rs, rt);
13046  }
13047  
13048  
13049  /*
13050   *
13051   *
13052   *   3         2         1
13053   *  10987654321098765432109876543210
13054   *  001000               01001001101
13055   *     rt -----
13056   *          rs -----
13057   *               rd -----
13058   */
13059  static char *SDX(uint64 instruction, Dis_info *info)
13060  {
13061      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13062      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13063      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13064  
13065      const char *rd = GPR(rd_value, info);
13066      const char *rs = GPR(rs_value, info);
13067      const char *rt = GPR(rt_value, info);
13068  
13069      return img_format("SDX %s, %s(%s)", rd, rs, rt);
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 *SEB(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  
13088      const char *rt = GPR(rt_value, info);
13089      const char *rs = GPR(rs_value, info);
13090  
13091      return img_format("SEB %s, %s", rt, rs);
13092  }
13093  
13094  
13095  /*
13096   *
13097   *
13098   *   3         2         1
13099   *  10987654321098765432109876543210
13100   *  001000               01001001101
13101   *     rt -----
13102   *          rs -----
13103   *               rd -----
13104   */
13105  static char *SEH(uint64 instruction, Dis_info *info)
13106  {
13107      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13108      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13109  
13110      const char *rt = GPR(rt_value, info);
13111      const char *rs = GPR(rs_value, info);
13112  
13113      return img_format("SEH %s, %s", rt, rs);
13114  }
13115  
13116  
13117  /*
13118   *
13119   *
13120   *   3         2         1
13121   *  10987654321098765432109876543210
13122   *  001000               01001001101
13123   *     rt -----
13124   *          rs -----
13125   *               rd -----
13126   */
13127  static char *SEL_D(uint64 instruction, Dis_info *info)
13128  {
13129      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13130      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13131      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13132  
13133      const char *fd = FPR(fd_value, info);
13134      const char *fs = FPR(fs_value, info);
13135      const char *ft = FPR(ft_value, info);
13136  
13137      return img_format("SEL.D %s, %s, %s", fd, fs, ft);
13138  }
13139  
13140  
13141  /*
13142   *
13143   *
13144   *   3         2         1
13145   *  10987654321098765432109876543210
13146   *  001000               01001001101
13147   *     rt -----
13148   *          rs -----
13149   *               rd -----
13150   */
13151  static char *SEL_S(uint64 instruction, Dis_info *info)
13152  {
13153      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13154      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13155      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13156  
13157      const char *fd = FPR(fd_value, info);
13158      const char *fs = FPR(fs_value, info);
13159      const char *ft = FPR(ft_value, info);
13160  
13161      return img_format("SEL.S %s, %s, %s", fd, fs, ft);
13162  }
13163  
13164  
13165  /*
13166   *
13167   *
13168   *   3         2         1
13169   *  10987654321098765432109876543210
13170   *  001000               01001001101
13171   *     rt -----
13172   *          rs -----
13173   *               rd -----
13174   */
13175  static char *SELEQZ_D(uint64 instruction, Dis_info *info)
13176  {
13177      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13178      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13179      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13180  
13181      const char *fd = FPR(fd_value, info);
13182      const char *fs = FPR(fs_value, info);
13183      const char *ft = FPR(ft_value, info);
13184  
13185      return img_format("SELEQZ.D %s, %s, %s", fd, fs, ft);
13186  }
13187  
13188  
13189  /*
13190   *
13191   *
13192   *   3         2         1
13193   *  10987654321098765432109876543210
13194   *  001000               01001001101
13195   *     rt -----
13196   *          rs -----
13197   *               rd -----
13198   */
13199  static char *SELEQZ_S(uint64 instruction, Dis_info *info)
13200  {
13201      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13202      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13203      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13204  
13205      const char *fd = FPR(fd_value, info);
13206      const char *fs = FPR(fs_value, info);
13207      const char *ft = FPR(ft_value, info);
13208  
13209      return img_format("SELEQZ.S %s, %s, %s", fd, fs, ft);
13210  }
13211  
13212  
13213  /*
13214   *
13215   *
13216   *   3         2         1
13217   *  10987654321098765432109876543210
13218   *  001000               01001001101
13219   *     rt -----
13220   *          rs -----
13221   *               rd -----
13222   */
13223  static char *SELNEZ_D(uint64 instruction, Dis_info *info)
13224  {
13225      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13226      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13227      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13228  
13229      const char *fd = FPR(fd_value, info);
13230      const char *fs = FPR(fs_value, info);
13231      const char *ft = FPR(ft_value, info);
13232  
13233      return img_format("SELNEZ.D %s, %s, %s", fd, fs, ft);
13234  }
13235  
13236  
13237  /*
13238   *
13239   *
13240   *   3         2         1
13241   *  10987654321098765432109876543210
13242   *  001000               01001001101
13243   *     rt -----
13244   *          rs -----
13245   *               rd -----
13246   */
13247  static char *SELNEZ_S(uint64 instruction, Dis_info *info)
13248  {
13249      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
13250      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
13251      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
13252  
13253      const char *fd = FPR(fd_value, info);
13254      const char *fs = FPR(fs_value, info);
13255      const char *ft = FPR(ft_value, info);
13256  
13257      return img_format("SELNEZ.S %s, %s, %s", fd, fs, ft);
13258  }
13259  
13260  
13261  /*
13262   *
13263   *
13264   *   3         2         1
13265   *  10987654321098765432109876543210
13266   *  001000               01001001101
13267   *     rt -----
13268   *          rs -----
13269   *               rd -----
13270   */
13271  static char *SEQI(uint64 instruction, Dis_info *info)
13272  {
13273      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13274      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13275      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13276  
13277      const char *rt = GPR(rt_value, info);
13278      const char *rs = GPR(rs_value, info);
13279  
13280      return img_format("SEQI %s, %s, 0x%" PRIx64, rt, rs, u_value);
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 *SH_16_(uint64 instruction, Dis_info *info)
13295  {
13296      uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
13297      uint64 rs3_value = extract_rs3_6_5_4(instruction);
13298      uint64 u_value = extract_u_2_1__s1(instruction);
13299  
13300      const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info);
13301      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
13302  
13303      return img_format("SH %s, 0x%" PRIx64 "(%s)", rtz3, u_value, rs3);
13304  }
13305  
13306  
13307  /*
13308   *
13309   *
13310   *   3         2         1
13311   *  10987654321098765432109876543210
13312   *  001000               01001001101
13313   *     rt -----
13314   *          rs -----
13315   *               rd -----
13316   */
13317  static char *SH_GP_(uint64 instruction, Dis_info *info)
13318  {
13319      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13320      uint64 u_value = extract_u_17_to_1__s1(instruction);
13321  
13322      const char *rt = GPR(rt_value, info);
13323  
13324      return img_format("SH %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
13325  }
13326  
13327  
13328  /*
13329   *
13330   *
13331   *   3         2         1
13332   *  10987654321098765432109876543210
13333   *  001000               01001001101
13334   *     rt -----
13335   *          rs -----
13336   *               rd -----
13337   */
13338  static char *SH_S9_(uint64 instruction, Dis_info *info)
13339  {
13340      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13341      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13342      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13343  
13344      const char *rt = GPR(rt_value, info);
13345      const char *rs = GPR(rs_value, info);
13346  
13347      return img_format("SH %s, %" PRId64 "(%s)", rt, s_value, rs);
13348  }
13349  
13350  
13351  /*
13352   *
13353   *
13354   *   3         2         1
13355   *  10987654321098765432109876543210
13356   *  001000               01001001101
13357   *     rt -----
13358   *          rs -----
13359   *               rd -----
13360   */
13361  static char *SH_U12_(uint64 instruction, Dis_info *info)
13362  {
13363      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13364      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13365      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
13366  
13367      const char *rt = GPR(rt_value, info);
13368      const char *rs = GPR(rs_value, info);
13369  
13370      return img_format("SH %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
13371  }
13372  
13373  
13374  /*
13375   *
13376   *
13377   *   3         2         1
13378   *  10987654321098765432109876543210
13379   *  001000               01001001101
13380   *     rt -----
13381   *          rs -----
13382   *               rd -----
13383   */
13384  static char *SHE(uint64 instruction, Dis_info *info)
13385  {
13386      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13387      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13388      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
13389  
13390      const char *rt = GPR(rt_value, info);
13391      const char *rs = GPR(rs_value, info);
13392  
13393      return img_format("SHE %s, %" PRId64 "(%s)", rt, s_value, rs);
13394  }
13395  
13396  
13397  /*
13398   * [DSP] SHILO ac, shift - Shift an accumulator value leaving the result in
13399   *   the same accumulator
13400   *
13401   *   3         2         1
13402   *  10987654321098765432109876543210
13403   *  001000xxxx        xxxx0000011101
13404   *      shift ------
13405   *               ac --
13406   */
13407  static char *SHILO(uint64 instruction, Dis_info *info)
13408  {
13409      int64 shift_value = extract_shift__se5_21_20_19_18_17_16(instruction);
13410      uint64 ac_value = extract_ac_15_14(instruction);
13411  
13412      const char *ac = AC(ac_value, info);
13413  
13414      return img_format("SHILO %s, 0x%" PRIx64, ac, shift_value);
13415  }
13416  
13417  
13418  /*
13419   * [DSP] SHILOV ac, rs - Variable shift of accumulator value leaving the result
13420   *   in the same accumulator
13421   *
13422   *   3         2         1
13423   *  10987654321098765432109876543210
13424   *  001000xxxxx       01001001111111
13425   *          rs -----
13426   *               ac --
13427   */
13428  static char *SHILOV(uint64 instruction, Dis_info *info)
13429  {
13430      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13431      uint64 ac_value = extract_ac_15_14(instruction);
13432  
13433      const char *rs = GPR(rs_value, info);
13434      const char *ac = AC(ac_value, info);
13435  
13436      return img_format("SHILOV %s, %s", ac, rs);
13437  }
13438  
13439  
13440  /*
13441   * [DSP] SHLL.PH rt, rs, sa - Shift left logical vector pair halfwords
13442   *
13443   *   3         2         1
13444   *  10987654321098765432109876543210
13445   *  001000              001110110101
13446   *     rt -----
13447   *          rs -----
13448   *               sa ----
13449   */
13450  static char *SHLL_PH(uint64 instruction, Dis_info *info)
13451  {
13452      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13453      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13454      uint64 sa_value = extract_sa_15_14_13_12(instruction);
13455  
13456      const char *rt = GPR(rt_value, info);
13457      const char *rs = GPR(rs_value, info);
13458  
13459      return img_format("SHLL.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13460  }
13461  
13462  
13463  /*
13464   * [DSP] SHLL.QB rt, rs, sa - Shift left logical vector quad bytes
13465   *
13466   *   3         2         1
13467   *  10987654321098765432109876543210
13468   *  001000             0100001111111
13469   *     rt -----
13470   *          rs -----
13471   *               sa ---
13472   */
13473  static char *SHLL_QB(uint64 instruction, Dis_info *info)
13474  {
13475      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13476      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13477      uint64 sa_value = extract_sa_15_14_13(instruction);
13478  
13479      const char *rt = GPR(rt_value, info);
13480      const char *rs = GPR(rs_value, info);
13481  
13482      return img_format("SHLL.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13483  }
13484  
13485  
13486  /*
13487   * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical vector pair halfwords
13488   *   with saturation
13489   *
13490   *   3         2         1
13491   *  10987654321098765432109876543210
13492   *  001000              001110110101
13493   *     rt -----
13494   *          rs -----
13495   *               sa ----
13496   */
13497  static char *SHLL_S_PH(uint64 instruction, Dis_info *info)
13498  {
13499      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13500      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13501      uint64 sa_value = extract_sa_15_14_13_12(instruction);
13502  
13503      const char *rt = GPR(rt_value, info);
13504      const char *rs = GPR(rs_value, info);
13505  
13506      return img_format("SHLL_S.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13507  }
13508  
13509  
13510  /*
13511   * [DSP] SHLL_S.PH rt, rs, sa - Shift left logical word with saturation
13512   *
13513   *   3         2         1
13514   *  10987654321098765432109876543210
13515   *  001000               x1111110101
13516   *     rt -----
13517   *          rs -----
13518   *               sa -----
13519   */
13520  static char *SHLL_S_W(uint64 instruction, Dis_info *info)
13521  {
13522      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13523      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13524      uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
13525  
13526      const char *rt = GPR(rt_value, info);
13527      const char *rs = GPR(rs_value, info);
13528  
13529      return img_format("SHLL_S.W %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13530  }
13531  
13532  
13533  /*
13534   * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
13535   *   halfwords
13536   *
13537   *   3         2         1
13538   *  10987654321098765432109876543210
13539   *  001000               01110001101
13540   *     rt -----
13541   *          rs -----
13542   *               rd -----
13543   */
13544  static char *SHLLV_PH(uint64 instruction, Dis_info *info)
13545  {
13546      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13547      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13548      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13549  
13550      const char *rd = GPR(rd_value, info);
13551      const char *rt = GPR(rt_value, info);
13552      const char *rs = GPR(rs_value, info);
13553  
13554      return img_format("SHLLV.PH %s, %s, %s", rd, rt, rs);
13555  }
13556  
13557  
13558  /*
13559   * [DSP] SHLLV_S.QB rd, rt, rs - Shift left logical variable vector quad bytes
13560   *
13561   *   3         2         1
13562   *  10987654321098765432109876543210
13563   *  001000               x1110010101
13564   *     rt -----
13565   *          rs -----
13566   *               rd -----
13567   */
13568  static char *SHLLV_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 rd_value = extract_rd_15_14_13_12_11(instruction);
13573  
13574      const char *rd = GPR(rd_value, info);
13575      const char *rt = GPR(rt_value, info);
13576      const char *rs = GPR(rs_value, info);
13577  
13578      return img_format("SHLLV.QB %s, %s, %s", rd, rt, rs);
13579  }
13580  
13581  
13582  /*
13583   * [DSP] SHLLV.PH rd, rt, rs - Shift left logical variable vector pair
13584   *   halfwords with saturation
13585   *
13586   *   3         2         1
13587   *  10987654321098765432109876543210
13588   *  001000               11110001101
13589   *     rt -----
13590   *          rs -----
13591   *               rd -----
13592   */
13593  static char *SHLLV_S_PH(uint64 instruction, Dis_info *info)
13594  {
13595      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13596      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13597      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13598  
13599      const char *rd = GPR(rd_value, info);
13600      const char *rt = GPR(rt_value, info);
13601      const char *rs = GPR(rs_value, info);
13602  
13603      return img_format("SHLLV_S.PH %s, %s, %s", rd, rt, rs);
13604  }
13605  
13606  
13607  /*
13608   * [DSP] SHLLV_S.W rd, rt, rs - Shift left logical variable vector word
13609   *
13610   *   3         2         1
13611   *  10987654321098765432109876543210
13612   *  001000               x1111010101
13613   *     rt -----
13614   *          rs -----
13615   *               rd -----
13616   */
13617  static char *SHLLV_S_W(uint64 instruction, Dis_info *info)
13618  {
13619      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13620      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13621      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13622  
13623      const char *rd = GPR(rd_value, info);
13624      const char *rt = GPR(rt_value, info);
13625      const char *rs = GPR(rs_value, info);
13626  
13627      return img_format("SHLLV_S.W %s, %s, %s", rd, rt, rs);
13628  }
13629  
13630  
13631  /*
13632   *
13633   *
13634   *   3         2         1
13635   *  10987654321098765432109876543210
13636   *  001000               01001001101
13637   *     rt -----
13638   *          rs -----
13639   *               rd -----
13640   */
13641  static char *SHRA_PH(uint64 instruction, Dis_info *info)
13642  {
13643      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13644      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13645      uint64 sa_value = extract_sa_15_14_13_12(instruction);
13646  
13647      const char *rt = GPR(rt_value, info);
13648      const char *rs = GPR(rs_value, info);
13649  
13650      return img_format("SHRA.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13651  }
13652  
13653  
13654  /*
13655   *
13656   *
13657   *   3         2         1
13658   *  10987654321098765432109876543210
13659   *  001000               01001001101
13660   *     rt -----
13661   *          rs -----
13662   *               rd -----
13663   */
13664  static char *SHRA_QB(uint64 instruction, Dis_info *info)
13665  {
13666      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13667      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13668      uint64 sa_value = extract_sa_15_14_13(instruction);
13669  
13670      const char *rt = GPR(rt_value, info);
13671      const char *rs = GPR(rs_value, info);
13672  
13673      return img_format("SHRA.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13674  }
13675  
13676  
13677  /*
13678   *
13679   *
13680   *   3         2         1
13681   *  10987654321098765432109876543210
13682   *  001000               01001001101
13683   *     rt -----
13684   *          rs -----
13685   *               rd -----
13686   */
13687  static char *SHRA_R_PH(uint64 instruction, Dis_info *info)
13688  {
13689      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13690      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13691      uint64 sa_value = extract_sa_15_14_13_12(instruction);
13692  
13693      const char *rt = GPR(rt_value, info);
13694      const char *rs = GPR(rs_value, info);
13695  
13696      return img_format("SHRA_R.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13697  }
13698  
13699  
13700  /*
13701   *
13702   *
13703   *   3         2         1
13704   *  10987654321098765432109876543210
13705   *  001000               01001001101
13706   *     rt -----
13707   *          rs -----
13708   *               rd -----
13709   */
13710  static char *SHRA_R_QB(uint64 instruction, Dis_info *info)
13711  {
13712      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13713      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13714      uint64 sa_value = extract_sa_15_14_13(instruction);
13715  
13716      const char *rt = GPR(rt_value, info);
13717      const char *rs = GPR(rs_value, info);
13718  
13719      return img_format("SHRA_R.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13720  }
13721  
13722  
13723  /*
13724   *
13725   *
13726   *   3         2         1
13727   *  10987654321098765432109876543210
13728   *  001000               01001001101
13729   *     rt -----
13730   *          rs -----
13731   *               rd -----
13732   */
13733  static char *SHRA_R_W(uint64 instruction, Dis_info *info)
13734  {
13735      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13736      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13737      uint64 sa_value = extract_sa_15_14_13_12_11(instruction);
13738  
13739      const char *rt = GPR(rt_value, info);
13740      const char *rs = GPR(rs_value, info);
13741  
13742      return img_format("SHRA_R.W %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13743  }
13744  
13745  
13746  /*
13747   *
13748   *
13749   *   3         2         1
13750   *  10987654321098765432109876543210
13751   *  001000               01001001101
13752   *     rt -----
13753   *          rs -----
13754   *               rd -----
13755   */
13756  static char *SHRAV_PH(uint64 instruction, Dis_info *info)
13757  {
13758      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13759      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13760      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13761  
13762      const char *rd = GPR(rd_value, info);
13763      const char *rt = GPR(rt_value, info);
13764      const char *rs = GPR(rs_value, info);
13765  
13766      return img_format("SHRAV.PH %s, %s, %s", rd, rt, rs);
13767  }
13768  
13769  
13770  /*
13771   *
13772   *
13773   *   3         2         1
13774   *  10987654321098765432109876543210
13775   *  001000               01001001101
13776   *     rt -----
13777   *          rs -----
13778   *               rd -----
13779   */
13780  static char *SHRAV_QB(uint64 instruction, Dis_info *info)
13781  {
13782      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13783      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13784      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13785  
13786      const char *rd = GPR(rd_value, info);
13787      const char *rt = GPR(rt_value, info);
13788      const char *rs = GPR(rs_value, info);
13789  
13790      return img_format("SHRAV.QB %s, %s, %s", rd, rt, rs);
13791  }
13792  
13793  
13794  /*
13795   *
13796   *
13797   *   3         2         1
13798   *  10987654321098765432109876543210
13799   *  001000               01001001101
13800   *     rt -----
13801   *          rs -----
13802   *               rd -----
13803   */
13804  static char *SHRAV_R_PH(uint64 instruction, Dis_info *info)
13805  {
13806      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13807      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13808      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13809  
13810      const char *rd = GPR(rd_value, info);
13811      const char *rt = GPR(rt_value, info);
13812      const char *rs = GPR(rs_value, info);
13813  
13814      return img_format("SHRAV_R.PH %s, %s, %s", rd, rt, rs);
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 *SHRAV_R_QB(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 rd_value = extract_rd_15_14_13_12_11(instruction);
13833  
13834      const char *rd = GPR(rd_value, info);
13835      const char *rt = GPR(rt_value, info);
13836      const char *rs = GPR(rs_value, info);
13837  
13838      return img_format("SHRAV_R.QB %s, %s, %s", rd, rt, rs);
13839  }
13840  
13841  
13842  /*
13843   *
13844   *
13845   *   3         2         1
13846   *  10987654321098765432109876543210
13847   *  001000               01001001101
13848   *     rt -----
13849   *          rs -----
13850   *               rd -----
13851   */
13852  static char *SHRAV_R_W(uint64 instruction, Dis_info *info)
13853  {
13854      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13855      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13856      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
13857  
13858      const char *rd = GPR(rd_value, info);
13859      const char *rt = GPR(rt_value, info);
13860      const char *rs = GPR(rs_value, info);
13861  
13862      return img_format("SHRAV_R.W %s, %s, %s", rd, rt, rs);
13863  }
13864  
13865  
13866  /*
13867   * [DSP] SHRL.PH rt, rs, sa - Shift right logical two halfwords
13868   *
13869   *   3         2         1
13870   *  10987654321098765432109876543210
13871   *  001000              001111111111
13872   *     rt -----
13873   *          rs -----
13874   *               sa ----
13875   */
13876  static char *SHRL_PH(uint64 instruction, Dis_info *info)
13877  {
13878      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13879      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13880      uint64 sa_value = extract_sa_15_14_13_12(instruction);
13881  
13882      const char *rt = GPR(rt_value, info);
13883      const char *rs = GPR(rs_value, info);
13884  
13885      return img_format("SHRL.PH %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13886  }
13887  
13888  
13889  /*
13890   * [DSP] SHRL.QB rt, rs, sa - Shift right logical vector quad bytes
13891   *
13892   *   3         2         1
13893   *  10987654321098765432109876543210
13894   *  001000             1100001111111
13895   *     rt -----
13896   *          rs -----
13897   *               sa ---
13898   */
13899  static char *SHRL_QB(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 sa_value = extract_sa_15_14_13(instruction);
13904  
13905      const char *rt = GPR(rt_value, info);
13906      const char *rs = GPR(rs_value, info);
13907  
13908      return img_format("SHRL.QB %s, %s, 0x%" PRIx64, rt, rs, sa_value);
13909  }
13910  
13911  
13912  /*
13913   * [DSP] SHLLV.PH rd, rt, rs - Shift right logical variable vector pair of
13914   *   halfwords
13915   *
13916   *   3         2         1
13917   *  10987654321098765432109876543210
13918   *  001000               x1100010101
13919   *     rt -----
13920   *          rs -----
13921   *               rd -----
13922   */
13923  static char *SHRLV_PH(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("SHRLV.PH %s, %s, %s", rd, rt, rs);
13934  }
13935  
13936  
13937  /*
13938   * [DSP] SHLLV.QB rd, rt, rs - Shift right logical variable vector quad bytes
13939   *
13940   *   3         2         1
13941   *  10987654321098765432109876543210
13942   *  001000               x1101010101
13943   *     rt -----
13944   *          rs -----
13945   *               rd -----
13946   */
13947  static char *SHRLV_QB(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("SHRLV.QB %s, %s, %s", rd, rt, rs);
13958  }
13959  
13960  
13961  /*
13962   *
13963   *
13964   *   3         2         1
13965   *  10987654321098765432109876543210
13966   *  001000               01001001101
13967   *     rt -----
13968   *          rs -----
13969   *               rd -----
13970   */
13971  static char *SHX(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 rd_value = extract_rd_15_14_13_12_11(instruction);
13976  
13977      const char *rd = GPR(rd_value, info);
13978      const char *rs = GPR(rs_value, info);
13979      const char *rt = GPR(rt_value, info);
13980  
13981      return img_format("SHX %s, %s(%s)", rd, rs, rt);
13982  }
13983  
13984  
13985  /*
13986   *
13987   *
13988   *   3         2         1
13989   *  10987654321098765432109876543210
13990   *  001000               01001001101
13991   *     rt -----
13992   *          rs -----
13993   *               rd -----
13994   */
13995  static char *SHXS(uint64 instruction, Dis_info *info)
13996  {
13997      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
13998      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
13999      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14000  
14001      const char *rd = GPR(rd_value, info);
14002      const char *rs = GPR(rs_value, info);
14003      const char *rt = GPR(rt_value, info);
14004  
14005      return img_format("SHXS %s, %s(%s)", rd, rs, rt);
14006  }
14007  
14008  
14009  /*
14010   *
14011   *
14012   *   3         2         1
14013   *  10987654321098765432109876543210
14014   *  001000               01001001101
14015   *     rt -----
14016   *          rs -----
14017   *               rd -----
14018   */
14019  static char *SIGRIE(uint64 instruction, Dis_info *info)
14020  {
14021      uint64 code_value = extract_code_18_to_0(instruction);
14022  
14023  
14024      return img_format("SIGRIE 0x%" PRIx64, code_value);
14025  }
14026  
14027  
14028  /*
14029   *
14030   *
14031   *   3         2         1
14032   *  10987654321098765432109876543210
14033   *  001000               01001001101
14034   *     rt -----
14035   *          rs -----
14036   *               rd -----
14037   */
14038  static char *SLL_16_(uint64 instruction, Dis_info *info)
14039  {
14040      uint64 rt3_value = extract_rt3_9_8_7(instruction);
14041      uint64 rs3_value = extract_rs3_6_5_4(instruction);
14042      uint64 shift3_value = extract_shift3_2_1_0(instruction);
14043  
14044      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
14045      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
14046      uint64 shift3 = encode_shift3_from_shift(shift3_value);
14047  
14048      return img_format("SLL %s, %s, 0x%" PRIx64, rt3, rs3, shift3);
14049  }
14050  
14051  
14052  /*
14053   *
14054   *
14055   *   3         2         1
14056   *  10987654321098765432109876543210
14057   *  001000               01001001101
14058   *     rt -----
14059   *          rs -----
14060   *               rd -----
14061   */
14062  static char *SLL_32_(uint64 instruction, Dis_info *info)
14063  {
14064      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14065      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14066      uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14067  
14068      const char *rt = GPR(rt_value, info);
14069      const char *rs = GPR(rs_value, info);
14070  
14071      return img_format("SLL %s, %s, 0x%" PRIx64, rt, rs, shift_value);
14072  }
14073  
14074  
14075  /*
14076   *
14077   *
14078   *   3         2         1
14079   *  10987654321098765432109876543210
14080   *  001000               01001001101
14081   *     rt -----
14082   *          rs -----
14083   *               rd -----
14084   */
14085  static char *SLLV(uint64 instruction, Dis_info *info)
14086  {
14087      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14088      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14089      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14090  
14091      const char *rd = GPR(rd_value, info);
14092      const char *rs = GPR(rs_value, info);
14093      const char *rt = GPR(rt_value, info);
14094  
14095      return img_format("SLLV %s, %s, %s", rd, rs, rt);
14096  }
14097  
14098  
14099  /*
14100   *
14101   *
14102   *   3         2         1
14103   *  10987654321098765432109876543210
14104   *  001000               01001001101
14105   *     rt -----
14106   *          rs -----
14107   *               rd -----
14108   */
14109  static char *SLT(uint64 instruction, Dis_info *info)
14110  {
14111      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14112      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14113      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14114  
14115      const char *rd = GPR(rd_value, info);
14116      const char *rs = GPR(rs_value, info);
14117      const char *rt = GPR(rt_value, info);
14118  
14119      return img_format("SLT %s, %s, %s", rd, rs, rt);
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 *SLTI(uint64 instruction, Dis_info *info)
14134  {
14135      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14136      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14137      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14138  
14139      const char *rt = GPR(rt_value, info);
14140      const char *rs = GPR(rs_value, info);
14141  
14142      return img_format("SLTI %s, %s, 0x%" PRIx64, rt, rs, u_value);
14143  }
14144  
14145  
14146  /*
14147   *
14148   *
14149   *   3         2         1
14150   *  10987654321098765432109876543210
14151   *  001000               01001001101
14152   *     rt -----
14153   *          rs -----
14154   *               rd -----
14155   */
14156  static char *SLTIU(uint64 instruction, Dis_info *info)
14157  {
14158      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14159      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14160      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14161  
14162      const char *rt = GPR(rt_value, info);
14163      const char *rs = GPR(rs_value, info);
14164  
14165      return img_format("SLTIU %s, %s, 0x%" PRIx64, rt, rs, u_value);
14166  }
14167  
14168  
14169  /*
14170   *
14171   *
14172   *   3         2         1
14173   *  10987654321098765432109876543210
14174   *  001000               01001001101
14175   *     rt -----
14176   *          rs -----
14177   *               rd -----
14178   */
14179  static char *SLTU(uint64 instruction, Dis_info *info)
14180  {
14181      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14182      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14183      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14184  
14185      const char *rd = GPR(rd_value, info);
14186      const char *rs = GPR(rs_value, info);
14187      const char *rt = GPR(rt_value, info);
14188  
14189      return img_format("SLTU %s, %s, %s", rd, rs, rt);
14190  }
14191  
14192  
14193  /*
14194   *
14195   *
14196   *   3         2         1
14197   *  10987654321098765432109876543210
14198   *  001000               01001001101
14199   *     rt -----
14200   *          rs -----
14201   *               rd -----
14202   */
14203  static char *SOV(uint64 instruction, Dis_info *info)
14204  {
14205      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14206      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14207      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14208  
14209      const char *rd = GPR(rd_value, info);
14210      const char *rs = GPR(rs_value, info);
14211      const char *rt = GPR(rt_value, info);
14212  
14213      return img_format("SOV %s, %s, %s", rd, rs, rt);
14214  }
14215  
14216  
14217  /*
14218   *
14219   *
14220   *   3         2         1
14221   *  10987654321098765432109876543210
14222   *  001000               01001001101
14223   *     rt -----
14224   *          rs -----
14225   *               rd -----
14226   */
14227  static char *SPECIAL2(uint64 instruction, Dis_info *info)
14228  {
14229      uint64 op_value = extract_op_25_to_3(instruction);
14230  
14231  
14232      return img_format("SPECIAL2 0x%" PRIx64, op_value);
14233  }
14234  
14235  
14236  /*
14237   *
14238   *
14239   *   3         2         1
14240   *  10987654321098765432109876543210
14241   *  001000               01001001101
14242   *     rt -----
14243   *          rs -----
14244   *               rd -----
14245   */
14246  static char *SQRT_D(uint64 instruction, Dis_info *info)
14247  {
14248      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14249      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14250  
14251      const char *ft = FPR(ft_value, info);
14252      const char *fs = FPR(fs_value, info);
14253  
14254      return img_format("SQRT.D %s, %s", ft, fs);
14255  }
14256  
14257  
14258  /*
14259   *
14260   *
14261   *   3         2         1
14262   *  10987654321098765432109876543210
14263   *  001000               01001001101
14264   *     rt -----
14265   *          rs -----
14266   *               rd -----
14267   */
14268  static char *SQRT_S(uint64 instruction, Dis_info *info)
14269  {
14270      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14271      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14272  
14273      const char *ft = FPR(ft_value, info);
14274      const char *fs = FPR(fs_value, info);
14275  
14276      return img_format("SQRT.S %s, %s", ft, fs);
14277  }
14278  
14279  
14280  /*
14281   * SRA rd, rt, sa - Shift Word Right Arithmetic
14282   *
14283   *   3         2         1
14284   *  10987654321098765432109876543210
14285   *  00000000000               000011
14286   *          rt -----
14287   *               rd -----
14288   *                    sa -----
14289   */
14290  static char *SRA(uint64 instruction, Dis_info *info)
14291  {
14292      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14293      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14294      uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14295  
14296      const char *rt = GPR(rt_value, info);
14297      const char *rs = GPR(rs_value, info);
14298  
14299      return img_format("SRA %s, %s, 0x%" PRIx64, rt, rs, shift_value);
14300  }
14301  
14302  
14303  /*
14304   * SRAV rd, rt, rs - Shift Word Right Arithmetic Variable
14305   *
14306   *   3         2         1
14307   *  10987654321098765432109876543210
14308   *  001000               00000000111
14309   *     rs -----
14310   *          rt -----
14311   *               rd -----
14312   */
14313  static char *SRAV(uint64 instruction, Dis_info *info)
14314  {
14315      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14316      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14317      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14318  
14319      const char *rd = GPR(rd_value, info);
14320      const char *rs = GPR(rs_value, info);
14321      const char *rt = GPR(rt_value, info);
14322  
14323      return img_format("SRAV %s, %s, %s", rd, rs, rt);
14324  }
14325  
14326  
14327  /*
14328   *
14329   *
14330   *   3         2         1
14331   *  10987654321098765432109876543210
14332   *  001000               00000000111
14333   *     rs -----
14334   *          rt -----
14335   *               rd -----
14336   */
14337  static char *SRL_16_(uint64 instruction, Dis_info *info)
14338  {
14339      uint64 rt3_value = extract_rt3_9_8_7(instruction);
14340      uint64 rs3_value = extract_rs3_6_5_4(instruction);
14341      uint64 shift3_value = extract_shift3_2_1_0(instruction);
14342  
14343      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
14344      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
14345      uint64 shift3 = encode_shift3_from_shift(shift3_value);
14346  
14347      return img_format("SRL %s, %s, 0x%" PRIx64, rt3, rs3, shift3);
14348  }
14349  
14350  
14351  /*
14352   *
14353   *
14354   *   3         2         1
14355   *  10987654321098765432109876543210
14356   *  001000               01001001101
14357   *     rt -----
14358   *          rs -----
14359   *               rd -----
14360   */
14361  static char *SRL_32_(uint64 instruction, Dis_info *info)
14362  {
14363      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14364      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14365      uint64 shift_value = extract_shift_4_3_2_1_0(instruction);
14366  
14367      const char *rt = GPR(rt_value, info);
14368      const char *rs = GPR(rs_value, info);
14369  
14370      return img_format("SRL %s, %s, 0x%" PRIx64, rt, rs, shift_value);
14371  }
14372  
14373  
14374  /*
14375   *
14376   *
14377   *   3         2         1
14378   *  10987654321098765432109876543210
14379   *  001000               01001001101
14380   *     rt -----
14381   *          rs -----
14382   *               rd -----
14383   */
14384  static char *SRLV(uint64 instruction, Dis_info *info)
14385  {
14386      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14387      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14388      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14389  
14390      const char *rd = GPR(rd_value, info);
14391      const char *rs = GPR(rs_value, info);
14392      const char *rt = GPR(rt_value, info);
14393  
14394      return img_format("SRLV %s, %s, %s", rd, rs, rt);
14395  }
14396  
14397  
14398  /*
14399   *
14400   *
14401   *   3         2         1
14402   *  10987654321098765432109876543210
14403   *  001000               01001001101
14404   *     rt -----
14405   *          rs -----
14406   *               rd -----
14407   */
14408  static char *SUB(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("SUB %s, %s, %s", rd, rs, rt);
14419  }
14420  
14421  
14422  /*
14423   *
14424   *
14425   *   3         2         1
14426   *  10987654321098765432109876543210
14427   *  001000               01001001101
14428   *     rt -----
14429   *          rs -----
14430   *               rd -----
14431   */
14432  static char *SUB_D(uint64 instruction, Dis_info *info)
14433  {
14434      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14435      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14436      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
14437  
14438      const char *fd = FPR(fd_value, info);
14439      const char *fs = FPR(fs_value, info);
14440      const char *ft = FPR(ft_value, info);
14441  
14442      return img_format("SUB.D %s, %s, %s", fd, fs, ft);
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 *SUB_S(uint64 instruction, Dis_info *info)
14457  {
14458      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
14459      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
14460      uint64 fd_value = extract_fd_15_14_13_12_11(instruction);
14461  
14462      const char *fd = FPR(fd_value, info);
14463      const char *fs = FPR(fs_value, info);
14464      const char *ft = FPR(ft_value, info);
14465  
14466      return img_format("SUB.S %s, %s, %s", fd, fs, ft);
14467  }
14468  
14469  
14470  /*
14471   *
14472   *
14473   *   3         2         1
14474   *  10987654321098765432109876543210
14475   *  001000               01001001101
14476   *     rt -----
14477   *          rs -----
14478   *               rd -----
14479   */
14480  static char *SUBQ_PH(uint64 instruction, Dis_info *info)
14481  {
14482      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14483      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14484      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14485  
14486      const char *rd = GPR(rd_value, info);
14487      const char *rs = GPR(rs_value, info);
14488      const char *rt = GPR(rt_value, info);
14489  
14490      return img_format("SUBQ.PH %s, %s, %s", rd, rs, rt);
14491  }
14492  
14493  
14494  /*
14495   * [DSP] SUBQ.S.PH rd, rt, rs - Subtract fractional halfword vectors and shift
14496   *   right to halve results
14497   *
14498   *   3         2         1
14499   *  10987654321098765432109876543210
14500   *  001000               01001001101
14501   *     rt -----
14502   *          rs -----
14503   *               rd -----
14504   */
14505  static char *SUBQ_S_PH(uint64 instruction, Dis_info *info)
14506  {
14507      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14508      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14509      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14510  
14511      const char *rd = GPR(rd_value, info);
14512      const char *rs = GPR(rs_value, info);
14513      const char *rt = GPR(rt_value, info);
14514  
14515      return img_format("SUBQ_S.PH %s, %s, %s", rd, rs, rt);
14516  }
14517  
14518  
14519  /*
14520   * [DSP] SUBQ.S.W rd, rt, rs - Subtract fractional halfword vectors and shift
14521   *   right to halve results
14522   *
14523   *   3         2         1
14524   *  10987654321098765432109876543210
14525   *  001000               01001001101
14526   *     rt -----
14527   *          rs -----
14528   *               rd -----
14529   */
14530  static char *SUBQ_S_W(uint64 instruction, Dis_info *info)
14531  {
14532      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14533      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14534      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14535  
14536      const char *rd = GPR(rd_value, info);
14537      const char *rs = GPR(rs_value, info);
14538      const char *rt = GPR(rt_value, info);
14539  
14540      return img_format("SUBQ_S.W %s, %s, %s", rd, rs, rt);
14541  }
14542  
14543  
14544  /*
14545   * [DSP] SUBQH.PH rd, rt, rs - Subtract fractional halfword vectors and shift
14546   *   right to halve results
14547   *
14548   *   3         2         1
14549   *  10987654321098765432109876543210
14550   *  001000               01001001101
14551   *     rt -----
14552   *          rs -----
14553   *               rd -----
14554   */
14555  static char *SUBQH_PH(uint64 instruction, Dis_info *info)
14556  {
14557      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14558      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14559      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14560  
14561      const char *rd = GPR(rd_value, info);
14562      const char *rs = GPR(rs_value, info);
14563      const char *rt = GPR(rt_value, info);
14564  
14565      return img_format("SUBQH.PH %s, %s, %s", rd, rs, rt);
14566  }
14567  
14568  
14569  /*
14570   * [DSP] SUBQH_R.PH rd, rt, rs - Subtract fractional halfword vectors and shift
14571   *   right to halve results
14572   *
14573   *   3         2         1
14574   *  10987654321098765432109876543210
14575   *  001000               01001001101
14576   *     rt -----
14577   *          rs -----
14578   *               rd -----
14579   */
14580  static char *SUBQH_R_PH(uint64 instruction, Dis_info *info)
14581  {
14582      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14583      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14584      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14585  
14586      const char *rd = GPR(rd_value, info);
14587      const char *rs = GPR(rs_value, info);
14588      const char *rt = GPR(rt_value, info);
14589  
14590      return img_format("SUBQH_R.PH %s, %s, %s", rd, rs, rt);
14591  }
14592  
14593  
14594  /*
14595   * [DSP] SUBQH_R.W rd, rt, rs - Subtract fractional halfword vectors and shift
14596   *   right to halve results with rounding
14597   *
14598   *   3         2         1
14599   *  10987654321098765432109876543210
14600   *  001000               11001001101
14601   *     rt -----
14602   *          rs -----
14603   *               rd -----
14604   */
14605  static char *SUBQH_R_W(uint64 instruction, Dis_info *info)
14606  {
14607      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14608      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14609      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14610  
14611      const char *rd = GPR(rd_value, info);
14612      const char *rs = GPR(rs_value, info);
14613      const char *rt = GPR(rt_value, info);
14614  
14615      return img_format("SUBQH_R.W %s, %s, %s", rd, rs, rt);
14616  }
14617  
14618  
14619  /*
14620   * [DSP] SUBQH.W rd, rs, rt - Subtract fractional words and shift right to
14621   *   halve results
14622   *
14623   *   3         2         1
14624   *  10987654321098765432109876543210
14625   *  001000               01010001101
14626   *     rt -----
14627   *          rs -----
14628   *               rd -----
14629   */
14630  static char *SUBQH_W(uint64 instruction, Dis_info *info)
14631  {
14632      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14633      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14634      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14635  
14636      const char *rd = GPR(rd_value, info);
14637      const char *rs = GPR(rs_value, info);
14638      const char *rt = GPR(rt_value, info);
14639  
14640      return img_format("SUBQH.W %s, %s, %s", rd, rs, rt);
14641  }
14642  
14643  
14644  /*
14645   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14646   *
14647   *   3         2         1
14648   *  10987654321098765432109876543210
14649   *  001000               00010001101
14650   *     rt -----
14651   *          rs -----
14652   *               rd -----
14653   */
14654  static char *SUBU_16_(uint64 instruction, Dis_info *info)
14655  {
14656      uint64 rt3_value = extract_rt3_9_8_7(instruction);
14657      uint64 rs3_value = extract_rs3_6_5_4(instruction);
14658      uint64 rd3_value = extract_rd3_3_2_1(instruction);
14659  
14660      const char *rd3 = GPR(decode_gpr_gpr3(rd3_value, info), info);
14661      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
14662      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
14663  
14664      return img_format("SUBU %s, %s, %s", rd3, rs3, rt3);
14665  }
14666  
14667  
14668  /*
14669   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14670   *
14671   *   3         2         1
14672   *  10987654321098765432109876543210
14673   *  001000               00010001101
14674   *     rt -----
14675   *          rs -----
14676   *               rd -----
14677   */
14678  static char *SUBU_32_(uint64 instruction, Dis_info *info)
14679  {
14680      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14681      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14682      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14683  
14684      const char *rd = GPR(rd_value, info);
14685      const char *rs = GPR(rs_value, info);
14686      const char *rt = GPR(rt_value, info);
14687  
14688      return img_format("SUBU %s, %s, %s", rd, rs, rt);
14689  }
14690  
14691  
14692  /*
14693   * [DSP] SUBU.PH rd, rs, rt - Subtract unsigned unsigned halfwords
14694   *
14695   *   3         2         1
14696   *  10987654321098765432109876543210
14697   *  001000               01100001101
14698   *     rt -----
14699   *          rs -----
14700   *               rd -----
14701   */
14702  static char *SUBU_PH(uint64 instruction, Dis_info *info)
14703  {
14704      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14705      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14706      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14707  
14708      const char *rd = GPR(rd_value, info);
14709      const char *rs = GPR(rs_value, info);
14710      const char *rt = GPR(rt_value, info);
14711  
14712      return img_format("SUBU.PH %s, %s, %s", rd, rs, rt);
14713  }
14714  
14715  
14716  /*
14717   * [DSP] SUBU.QB rd, rs, rt - Subtract unsigned quad byte vectors
14718   *
14719   *   3         2         1
14720   *  10987654321098765432109876543210
14721   *  001000               01011001101
14722   *     rt -----
14723   *          rs -----
14724   *               rd -----
14725   */
14726  static char *SUBU_QB(uint64 instruction, Dis_info *info)
14727  {
14728      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14729      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14730      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14731  
14732      const char *rd = GPR(rd_value, info);
14733      const char *rs = GPR(rs_value, info);
14734      const char *rt = GPR(rt_value, info);
14735  
14736      return img_format("SUBU.QB %s, %s, %s", rd, rs, rt);
14737  }
14738  
14739  
14740  /*
14741   * [DSP] SUBU_S.PH rd, rs, rt - Subtract unsigned unsigned halfwords with
14742   *   8-bit saturation
14743   *
14744   *   3         2         1
14745   *  10987654321098765432109876543210
14746   *  001000               11100001101
14747   *     rt -----
14748   *          rs -----
14749   *               rd -----
14750   */
14751  static char *SUBU_S_PH(uint64 instruction, Dis_info *info)
14752  {
14753      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14754      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14755      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14756  
14757      const char *rd = GPR(rd_value, info);
14758      const char *rs = GPR(rs_value, info);
14759      const char *rt = GPR(rt_value, info);
14760  
14761      return img_format("SUBU_S.PH %s, %s, %s", rd, rs, rt);
14762  }
14763  
14764  
14765  /*
14766   * [DSP] SUBU_S.QB rd, rs, rt - Subtract unsigned quad byte vectors with
14767   *   8-bit saturation
14768   *
14769   *   3         2         1
14770   *  10987654321098765432109876543210
14771   *  001000               11011001101
14772   *     rt -----
14773   *          rs -----
14774   *               rd -----
14775   */
14776  static char *SUBU_S_QB(uint64 instruction, Dis_info *info)
14777  {
14778      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14779      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14780      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14781  
14782      const char *rd = GPR(rd_value, info);
14783      const char *rs = GPR(rs_value, info);
14784      const char *rt = GPR(rt_value, info);
14785  
14786      return img_format("SUBU_S.QB %s, %s, %s", rd, rs, rt);
14787  }
14788  
14789  
14790  /*
14791   * [DSP] SUBUH.QB rd, rs, rt - Subtract unsigned bytes and right shift
14792   *   to halve results
14793   *
14794   *   3         2         1
14795   *  10987654321098765432109876543210
14796   *  001000               01101001101
14797   *     rt -----
14798   *          rs -----
14799   *               rd -----
14800   */
14801  static char *SUBUH_QB(uint64 instruction, Dis_info *info)
14802  {
14803      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14804      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14805      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14806  
14807      const char *rd = GPR(rd_value, info);
14808      const char *rs = GPR(rs_value, info);
14809      const char *rt = GPR(rt_value, info);
14810  
14811      return img_format("SUBUH.QB %s, %s, %s", rd, rs, rt);
14812  }
14813  
14814  
14815  /*
14816   * [DSP] SUBUH_R.QB rd, rs, rt - Subtract unsigned bytes and right shift
14817   *   to halve results with rounding
14818   *
14819   *   3         2         1
14820   *  10987654321098765432109876543210
14821   *  001000               11101001101
14822   *     rt -----
14823   *          rs -----
14824   *               rd -----
14825   */
14826  static char *SUBUH_R_QB(uint64 instruction, Dis_info *info)
14827  {
14828      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14829      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14830      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
14831  
14832      const char *rd = GPR(rd_value, info);
14833      const char *rs = GPR(rs_value, info);
14834      const char *rt = GPR(rt_value, info);
14835  
14836      return img_format("SUBUH_R.QB %s, %s, %s", rd, rs, rt);
14837  }
14838  
14839  
14840  /*
14841   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14842   *
14843   *   3         2         1
14844   *  10987654321098765432109876543210
14845   *  001000               00010001101
14846   *     rt -----
14847   *          rs -----
14848   *               rd -----
14849   */
14850  static char *SW_16_(uint64 instruction, Dis_info *info)
14851  {
14852      uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
14853      uint64 rs3_value = extract_rs3_6_5_4(instruction);
14854      uint64 u_value = extract_u_3_2_1_0__s2(instruction);
14855  
14856      const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info);
14857      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
14858  
14859      return img_format("SW %s, 0x%" PRIx64 "(%s)", rtz3, u_value, rs3);
14860  }
14861  
14862  
14863  /*
14864   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14865   *
14866   *   3         2         1
14867   *  10987654321098765432109876543210
14868   *  001000               00010001101
14869   *     rt -----
14870   *          rs -----
14871   *               rd -----
14872   */
14873  static char *SW_4X4_(uint64 instruction, Dis_info *info)
14874  {
14875      uint64 rtz4_value = extract_rtz4_9_7_6_5(instruction);
14876      uint64 rs4_value = extract_rs4_4_2_1_0(instruction);
14877      uint64 u_value = extract_u_3_8__s2(instruction);
14878  
14879      const char *rtz4 = GPR(decode_gpr_gpr4_zero(rtz4_value, info), info);
14880      const char *rs4 = GPR(decode_gpr_gpr4(rs4_value, info), info);
14881  
14882      return img_format("SW %s, 0x%" PRIx64 "(%s)", rtz4, u_value, rs4);
14883  }
14884  
14885  
14886  /*
14887   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14888   *
14889   *   3         2         1
14890   *  10987654321098765432109876543210
14891   *  001000               00010001101
14892   *     rt -----
14893   *          rs -----
14894   *               rd -----
14895   */
14896  static char *SW_GP16_(uint64 instruction, Dis_info *info)
14897  {
14898      uint64 u_value = extract_u_6_5_4_3_2_1_0__s2(instruction);
14899      uint64 rtz3_value = extract_rtz3_9_8_7(instruction);
14900  
14901      const char *rtz3 = GPR(decode_gpr_gpr3_src_store(rtz3_value, info), info);
14902  
14903      return img_format("SW %s, 0x%" PRIx64 "($%d)", rtz3, u_value, 28);
14904  }
14905  
14906  
14907  /*
14908   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14909   *
14910   *   3         2         1
14911   *  10987654321098765432109876543210
14912   *  001000               00010001101
14913   *     rt -----
14914   *          rs -----
14915   *               rd -----
14916   */
14917  static char *SW_GP_(uint64 instruction, Dis_info *info)
14918  {
14919      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14920      uint64 u_value = extract_u_20_to_2__s2(instruction);
14921  
14922      const char *rt = GPR(rt_value, info);
14923  
14924      return img_format("SW %s, 0x%" PRIx64 "($%d)", rt, u_value, 28);
14925  }
14926  
14927  
14928  /*
14929   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14930   *
14931   *   3         2         1
14932   *  10987654321098765432109876543210
14933   *  001000               00010001101
14934   *     rt -----
14935   *          rs -----
14936   *               rd -----
14937   */
14938  static char *SW_S9_(uint64 instruction, Dis_info *info)
14939  {
14940      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14941      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
14942      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14943  
14944      const char *rt = GPR(rt_value, info);
14945      const char *rs = GPR(rs_value, info);
14946  
14947      return img_format("SW %s, %" PRId64 "(%s)", rt, s_value, rs);
14948  }
14949  
14950  
14951  /*
14952   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14953   *
14954   *   3         2         1
14955   *  10987654321098765432109876543210
14956   *  001000               00010001101
14957   *     rt -----
14958   *          rs -----
14959   *               rd -----
14960   */
14961  static char *SW_SP_(uint64 instruction, Dis_info *info)
14962  {
14963      uint64 rt_value = extract_rt_9_8_7_6_5(instruction);
14964      uint64 u_value = extract_u_4_3_2_1_0__s2(instruction);
14965  
14966      const char *rt = GPR(rt_value, info);
14967  
14968      return img_format("SW %s, 0x%" PRIx64 "($%d)", rt, u_value, 29);
14969  }
14970  
14971  
14972  /*
14973   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14974   *
14975   *   3         2         1
14976   *  10987654321098765432109876543210
14977   *  001000               00010001101
14978   *     rt -----
14979   *          rs -----
14980   *               rd -----
14981   */
14982  static char *SW_U12_(uint64 instruction, Dis_info *info)
14983  {
14984      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
14985      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
14986      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
14987  
14988      const char *rt = GPR(rt_value, info);
14989      const char *rs = GPR(rs_value, info);
14990  
14991      return img_format("SW %s, 0x%" PRIx64 "(%s)", rt, u_value, rs);
14992  }
14993  
14994  
14995  /*
14996   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
14997   *
14998   *   3         2         1
14999   *  10987654321098765432109876543210
15000   *  001000               00010001101
15001   *     rt -----
15002   *          rs -----
15003   *               rd -----
15004   */
15005  static char *SWC1_GP_(uint64 instruction, Dis_info *info)
15006  {
15007      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15008      uint64 u_value = extract_u_17_to_2__s2(instruction);
15009  
15010      const char *ft = FPR(ft_value, info);
15011  
15012      return img_format("SWC1 %s, 0x%" PRIx64 "($%d)", ft, u_value, 28);
15013  }
15014  
15015  
15016  /*
15017   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15018   *
15019   *   3         2         1
15020   *  10987654321098765432109876543210
15021   *  001000               00010001101
15022   *     rt -----
15023   *          rs -----
15024   *               rd -----
15025   */
15026  static char *SWC1_S9_(uint64 instruction, Dis_info *info)
15027  {
15028      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15029      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15030      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15031  
15032      const char *ft = FPR(ft_value, info);
15033      const char *rs = GPR(rs_value, info);
15034  
15035      return img_format("SWC1 %s, %" PRId64 "(%s)", ft, s_value, rs);
15036  }
15037  
15038  
15039  /*
15040   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15041   *
15042   *   3         2         1
15043   *  10987654321098765432109876543210
15044   *  001000               00010001101
15045   *     rt -----
15046   *          rs -----
15047   *               rd -----
15048   */
15049  static char *SWC1_U12_(uint64 instruction, Dis_info *info)
15050  {
15051      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15052      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15053      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15054  
15055      const char *ft = FPR(ft_value, info);
15056      const char *rs = GPR(rs_value, info);
15057  
15058      return img_format("SWC1 %s, 0x%" PRIx64 "(%s)", ft, u_value, rs);
15059  }
15060  
15061  
15062  /*
15063   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15064   *
15065   *   3         2         1
15066   *  10987654321098765432109876543210
15067   *  001000               00010001101
15068   *     rt -----
15069   *          rs -----
15070   *               rd -----
15071   */
15072  static char *SWC1X(uint64 instruction, Dis_info *info)
15073  {
15074      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15075      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15076      uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15077  
15078      const char *ft = FPR(ft_value, info);
15079      const char *rs = GPR(rs_value, info);
15080      const char *rt = GPR(rt_value, info);
15081  
15082      return img_format("SWC1X %s, %s(%s)", ft, rs, rt);
15083  }
15084  
15085  
15086  /*
15087   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15088   *
15089   *   3         2         1
15090   *  10987654321098765432109876543210
15091   *  001000               00010001101
15092   *     rt -----
15093   *          rs -----
15094   *               rd -----
15095   */
15096  static char *SWC1XS(uint64 instruction, Dis_info *info)
15097  {
15098      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15099      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15100      uint64 ft_value = extract_ft_15_14_13_12_11(instruction);
15101  
15102      const char *ft = FPR(ft_value, info);
15103      const char *rs = GPR(rs_value, info);
15104      const char *rt = GPR(rt_value, info);
15105  
15106      return img_format("SWC1XS %s, %s(%s)", ft, rs, rt);
15107  }
15108  
15109  
15110  /*
15111   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15112   *
15113   *   3         2         1
15114   *  10987654321098765432109876543210
15115   *  001000               00010001101
15116   *     rt -----
15117   *          rs -----
15118   *               rd -----
15119   */
15120  static char *SWC2(uint64 instruction, Dis_info *info)
15121  {
15122      uint64 cs_value = extract_cs_25_24_23_22_21(instruction);
15123      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15124      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15125  
15126      const char *rs = GPR(rs_value, info);
15127  
15128      return img_format("SWC2 CP%" PRIu64 ", %" PRId64 "(%s)",
15129                        cs_value, s_value, rs);
15130  }
15131  
15132  
15133  /*
15134   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15135   *
15136   *   3         2         1
15137   *  10987654321098765432109876543210
15138   *  001000               00010001101
15139   *     rt -----
15140   *          rs -----
15141   *               rd -----
15142   */
15143  static char *SWE(uint64 instruction, Dis_info *info)
15144  {
15145      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15146      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15147      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15148  
15149      const char *rt = GPR(rt_value, info);
15150      const char *rs = GPR(rs_value, info);
15151  
15152      return img_format("SWE %s, %" PRId64 "(%s)", rt, s_value, rs);
15153  }
15154  
15155  
15156  /*
15157   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15158   *
15159   *   3         2         1
15160   *  10987654321098765432109876543210
15161   *  001000               00010001101
15162   *     rt -----
15163   *          rs -----
15164   *               rd -----
15165   */
15166  static char *SWM(uint64 instruction, Dis_info *info)
15167  {
15168      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15169      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15170      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15171      uint64 count3_value = extract_count3_14_13_12(instruction);
15172  
15173      const char *rt = GPR(rt_value, info);
15174      const char *rs = GPR(rs_value, info);
15175      uint64 count3 = encode_count3_from_count(count3_value);
15176  
15177      return img_format("SWM %s, %" PRId64 "(%s), 0x%" PRIx64,
15178                        rt, s_value, rs, count3);
15179  }
15180  
15181  
15182  /*
15183   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15184   *
15185   *   3         2         1
15186   *  10987654321098765432109876543210
15187   *  001000               00010001101
15188   *     rt -----
15189   *          rs -----
15190   *               rd -----
15191   */
15192  static char *SWPC_48_(uint64 instruction, Dis_info *info)
15193  {
15194      uint64 rt_value = extract_rt_41_40_39_38_37(instruction);
15195      int64 s_value = extract_s__se31_15_to_0_31_to_16(instruction);
15196  
15197      const char *rt = GPR(rt_value, info);
15198      g_autofree char *s = ADDRESS(s_value, 6, info);
15199  
15200      return img_format("SWPC %s, %s", rt, s);
15201  }
15202  
15203  
15204  /*
15205   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15206   *
15207   *   3         2         1
15208   *  10987654321098765432109876543210
15209   *  001000               00010001101
15210   *     rt -----
15211   *          rs -----
15212   *               rd -----
15213   */
15214  static char *SWX(uint64 instruction, Dis_info *info)
15215  {
15216      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15217      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15218      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15219  
15220      const char *rd = GPR(rd_value, info);
15221      const char *rs = GPR(rs_value, info);
15222      const char *rt = GPR(rt_value, info);
15223  
15224      return img_format("SWX %s, %s(%s)", rd, rs, rt);
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 *SWXS(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      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15243  
15244      const char *rd = GPR(rd_value, info);
15245      const char *rs = GPR(rs_value, info);
15246      const char *rt = GPR(rt_value, info);
15247  
15248      return img_format("SWXS %s, %s(%s)", rd, rs, rt);
15249  }
15250  
15251  
15252  /*
15253   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15254   *
15255   *   3         2         1
15256   *  10987654321098765432109876543210
15257   *  001000               00010001101
15258   *     rt -----
15259   *          rs -----
15260   *               rd -----
15261   */
15262  static char *SYNC(uint64 instruction, Dis_info *info)
15263  {
15264      uint64 stype_value = extract_stype_20_19_18_17_16(instruction);
15265  
15266  
15267      return img_format("SYNC 0x%" PRIx64, stype_value);
15268  }
15269  
15270  
15271  /*
15272   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15273   *
15274   *   3         2         1
15275   *  10987654321098765432109876543210
15276   *  001000               00010001101
15277   *     rt -----
15278   *          rs -----
15279   *               rd -----
15280   */
15281  static char *SYNCI(uint64 instruction, Dis_info *info)
15282  {
15283      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15284      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15285  
15286      const char *rs = GPR(rs_value, info);
15287  
15288      return img_format("SYNCI %" PRId64 "(%s)", s_value, rs);
15289  }
15290  
15291  
15292  /*
15293   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15294   *
15295   *   3         2         1
15296   *  10987654321098765432109876543210
15297   *  001000               00010001101
15298   *     rt -----
15299   *          rs -----
15300   *               rd -----
15301   */
15302  static char *SYNCIE(uint64 instruction, Dis_info *info)
15303  {
15304      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15305      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15306  
15307      const char *rs = GPR(rs_value, info);
15308  
15309      return img_format("SYNCIE %" PRId64 "(%s)", s_value, rs);
15310  }
15311  
15312  
15313  /*
15314   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15315   *
15316   *   3         2         1
15317   *  10987654321098765432109876543210
15318   *  001000               00010001101
15319   *     rt -----
15320   *          rs -----
15321   *               rd -----
15322   */
15323  static char *SYSCALL_16_(uint64 instruction, Dis_info *info)
15324  {
15325      uint64 code_value = extract_code_1_0(instruction);
15326  
15327  
15328      return img_format("SYSCALL 0x%" PRIx64, code_value);
15329  }
15330  
15331  
15332  /*
15333   * SYSCALL code - System Call. Cause a System Call Exception
15334   *
15335   *   3         2         1
15336   *  10987654321098765432109876543210
15337   *  00000000000010
15338   *           code ------------------
15339   */
15340  static char *SYSCALL_32_(uint64 instruction, Dis_info *info)
15341  {
15342      uint64 code_value = extract_code_17_to_0(instruction);
15343  
15344  
15345      return img_format("SYSCALL 0x%" PRIx64, code_value);
15346  }
15347  
15348  
15349  /*
15350   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15351   *
15352   *   3         2         1
15353   *  10987654321098765432109876543210
15354   *  001000               00010001101
15355   *     rt -----
15356   *          rs -----
15357   *               rd -----
15358   */
15359  static char *TEQ(uint64 instruction, Dis_info *info)
15360  {
15361      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15362      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15363  
15364      const char *rs = GPR(rs_value, info);
15365      const char *rt = GPR(rt_value, info);
15366  
15367      return img_format("TEQ %s, %s", rs, rt);
15368  }
15369  
15370  
15371  /*
15372   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15373   *
15374   *   3         2         1
15375   *  10987654321098765432109876543210
15376   *  001000               00010001101
15377   *     rt -----
15378   *          rs -----
15379   *               rd -----
15380   */
15381  static char *TLBGINV(uint64 instruction, Dis_info *info)
15382  {
15383      (void)instruction;
15384  
15385      return g_strdup("TLBGINV ");
15386  }
15387  
15388  
15389  /*
15390   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15391   *
15392   *   3         2         1
15393   *  10987654321098765432109876543210
15394   *  001000               00010001101
15395   *     rt -----
15396   *          rs -----
15397   *               rd -----
15398   */
15399  static char *TLBGINVF(uint64 instruction, Dis_info *info)
15400  {
15401      (void)instruction;
15402  
15403      return g_strdup("TLBGINVF ");
15404  }
15405  
15406  
15407  /*
15408   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15409   *
15410   *   3         2         1
15411   *  10987654321098765432109876543210
15412   *  001000               00010001101
15413   *     rt -----
15414   *          rs -----
15415   *               rd -----
15416   */
15417  static char *TLBGP(uint64 instruction, Dis_info *info)
15418  {
15419      (void)instruction;
15420  
15421      return g_strdup("TLBGP ");
15422  }
15423  
15424  
15425  /*
15426   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15427   *
15428   *   3         2         1
15429   *  10987654321098765432109876543210
15430   *  001000               00010001101
15431   *     rt -----
15432   *          rs -----
15433   *               rd -----
15434   */
15435  static char *TLBGR(uint64 instruction, Dis_info *info)
15436  {
15437      (void)instruction;
15438  
15439      return g_strdup("TLBGR ");
15440  }
15441  
15442  
15443  /*
15444   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15445   *
15446   *   3         2         1
15447   *  10987654321098765432109876543210
15448   *  001000               00010001101
15449   *     rt -----
15450   *          rs -----
15451   *               rd -----
15452   */
15453  static char *TLBGWI(uint64 instruction, Dis_info *info)
15454  {
15455      (void)instruction;
15456  
15457      return g_strdup("TLBGWI ");
15458  }
15459  
15460  
15461  /*
15462   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15463   *
15464   *   3         2         1
15465   *  10987654321098765432109876543210
15466   *  001000               00010001101
15467   *     rt -----
15468   *          rs -----
15469   *               rd -----
15470   */
15471  static char *TLBGWR(uint64 instruction, Dis_info *info)
15472  {
15473      (void)instruction;
15474  
15475      return g_strdup("TLBGWR ");
15476  }
15477  
15478  
15479  /*
15480   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15481   *
15482   *   3         2         1
15483   *  10987654321098765432109876543210
15484   *  001000               00010001101
15485   *     rt -----
15486   *          rs -----
15487   *               rd -----
15488   */
15489  static char *TLBINV(uint64 instruction, Dis_info *info)
15490  {
15491      (void)instruction;
15492  
15493      return g_strdup("TLBINV ");
15494  }
15495  
15496  
15497  /*
15498   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15499   *
15500   *   3         2         1
15501   *  10987654321098765432109876543210
15502   *  001000               00010001101
15503   *     rt -----
15504   *          rs -----
15505   *               rd -----
15506   */
15507  static char *TLBINVF(uint64 instruction, Dis_info *info)
15508  {
15509      (void)instruction;
15510  
15511      return g_strdup("TLBINVF ");
15512  }
15513  
15514  
15515  /*
15516   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15517   *
15518   *   3         2         1
15519   *  10987654321098765432109876543210
15520   *  001000               00010001101
15521   *     rt -----
15522   *          rs -----
15523   *               rd -----
15524   */
15525  static char *TLBP(uint64 instruction, Dis_info *info)
15526  {
15527      (void)instruction;
15528  
15529      return g_strdup("TLBP ");
15530  }
15531  
15532  
15533  /*
15534   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15535   *
15536   *   3         2         1
15537   *  10987654321098765432109876543210
15538   *  001000               00010001101
15539   *     rt -----
15540   *          rs -----
15541   *               rd -----
15542   */
15543  static char *TLBR(uint64 instruction, Dis_info *info)
15544  {
15545      (void)instruction;
15546  
15547      return g_strdup("TLBR ");
15548  }
15549  
15550  
15551  /*
15552   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15553   *
15554   *   3         2         1
15555   *  10987654321098765432109876543210
15556   *  001000               00010001101
15557   *     rt -----
15558   *          rs -----
15559   *               rd -----
15560   */
15561  static char *TLBWI(uint64 instruction, Dis_info *info)
15562  {
15563      (void)instruction;
15564  
15565      return g_strdup("TLBWI ");
15566  }
15567  
15568  
15569  /*
15570   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15571   *
15572   *   3         2         1
15573   *  10987654321098765432109876543210
15574   *  001000               00010001101
15575   *     rt -----
15576   *          rs -----
15577   *               rd -----
15578   */
15579  static char *TLBWR(uint64 instruction, Dis_info *info)
15580  {
15581      (void)instruction;
15582  
15583      return g_strdup("TLBWR ");
15584  }
15585  
15586  
15587  /*
15588   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15589   *
15590   *   3         2         1
15591   *  10987654321098765432109876543210
15592   *  001000               00010001101
15593   *     rt -----
15594   *          rs -----
15595   *               rd -----
15596   */
15597  static char *TNE(uint64 instruction, Dis_info *info)
15598  {
15599      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15600      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15601  
15602      const char *rs = GPR(rs_value, info);
15603      const char *rt = GPR(rt_value, info);
15604  
15605      return img_format("TNE %s, %s", rs, rt);
15606  }
15607  
15608  
15609  /*
15610   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15611   *
15612   *   3         2         1
15613   *  10987654321098765432109876543210
15614   *  001000               00010001101
15615   *     rt -----
15616   *          rs -----
15617   *               rd -----
15618   */
15619  static char *TRUNC_L_D(uint64 instruction, Dis_info *info)
15620  {
15621      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15622      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15623  
15624      const char *ft = FPR(ft_value, info);
15625      const char *fs = FPR(fs_value, info);
15626  
15627      return img_format("TRUNC.L.D %s, %s", ft, fs);
15628  }
15629  
15630  
15631  /*
15632   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15633   *
15634   *   3         2         1
15635   *  10987654321098765432109876543210
15636   *  001000               00010001101
15637   *     rt -----
15638   *          rs -----
15639   *               rd -----
15640   */
15641  static char *TRUNC_L_S(uint64 instruction, Dis_info *info)
15642  {
15643      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15644      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15645  
15646      const char *ft = FPR(ft_value, info);
15647      const char *fs = FPR(fs_value, info);
15648  
15649      return img_format("TRUNC.L.S %s, %s", ft, fs);
15650  }
15651  
15652  
15653  /*
15654   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15655   *
15656   *   3         2         1
15657   *  10987654321098765432109876543210
15658   *  001000               00010001101
15659   *     rt -----
15660   *          rs -----
15661   *               rd -----
15662   */
15663  static char *TRUNC_W_D(uint64 instruction, Dis_info *info)
15664  {
15665      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15666      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15667  
15668      const char *ft = FPR(ft_value, info);
15669      const char *fs = FPR(fs_value, info);
15670  
15671      return img_format("TRUNC.W.D %s, %s", ft, fs);
15672  }
15673  
15674  
15675  /*
15676   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15677   *
15678   *   3         2         1
15679   *  10987654321098765432109876543210
15680   *  001000               00010001101
15681   *     rt -----
15682   *          rs -----
15683   *               rd -----
15684   */
15685  static char *TRUNC_W_S(uint64 instruction, Dis_info *info)
15686  {
15687      uint64 ft_value = extract_ft_25_24_23_22_21(instruction);
15688      uint64 fs_value = extract_fs_20_19_18_17_16(instruction);
15689  
15690      const char *ft = FPR(ft_value, info);
15691      const char *fs = FPR(fs_value, info);
15692  
15693      return img_format("TRUNC.W.S %s, %s", ft, fs);
15694  }
15695  
15696  
15697  /*
15698   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15699   *
15700   *   3         2         1
15701   *  10987654321098765432109876543210
15702   *  001000               00010001101
15703   *     rt -----
15704   *          rs -----
15705   *               rd -----
15706   */
15707  static char *UALDM(uint64 instruction, Dis_info *info)
15708  {
15709      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15710      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15711      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15712      uint64 count3_value = extract_count3_14_13_12(instruction);
15713  
15714      const char *rt = GPR(rt_value, info);
15715      const char *rs = GPR(rs_value, info);
15716      uint64 count3 = encode_count3_from_count(count3_value);
15717  
15718      return img_format("UALDM %s, %" PRId64 "(%s), 0x%" PRIx64,
15719                        rt, s_value, rs, count3);
15720  }
15721  
15722  
15723  /*
15724   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15725   *
15726   *   3         2         1
15727   *  10987654321098765432109876543210
15728   *  001000               00010001101
15729   *     rt -----
15730   *          rs -----
15731   *               rd -----
15732   */
15733  static char *UALH(uint64 instruction, Dis_info *info)
15734  {
15735      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15736      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15737      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15738  
15739      const char *rt = GPR(rt_value, info);
15740      const char *rs = GPR(rs_value, info);
15741  
15742      return img_format("UALH %s, %" PRId64 "(%s)", rt, s_value, rs);
15743  }
15744  
15745  
15746  /*
15747   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15748   *
15749   *   3         2         1
15750   *  10987654321098765432109876543210
15751   *  001000               00010001101
15752   *     rt -----
15753   *          rs -----
15754   *               rd -----
15755   */
15756  static char *UALWM(uint64 instruction, Dis_info *info)
15757  {
15758      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15759      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15760      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15761      uint64 count3_value = extract_count3_14_13_12(instruction);
15762  
15763      const char *rt = GPR(rt_value, info);
15764      const char *rs = GPR(rs_value, info);
15765      uint64 count3 = encode_count3_from_count(count3_value);
15766  
15767      return img_format("UALWM %s, %" PRId64 "(%s), 0x%" PRIx64,
15768                        rt, s_value, rs, count3);
15769  }
15770  
15771  
15772  /*
15773   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15774   *
15775   *   3         2         1
15776   *  10987654321098765432109876543210
15777   *  001000               00010001101
15778   *     rt -----
15779   *          rs -----
15780   *               rd -----
15781   */
15782  static char *UASDM(uint64 instruction, Dis_info *info)
15783  {
15784      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15785      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15786      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15787      uint64 count3_value = extract_count3_14_13_12(instruction);
15788  
15789      const char *rt = GPR(rt_value, info);
15790      const char *rs = GPR(rs_value, info);
15791      uint64 count3 = encode_count3_from_count(count3_value);
15792  
15793      return img_format("UASDM %s, %" PRId64 "(%s), 0x%" PRIx64,
15794                        rt, s_value, rs, count3);
15795  }
15796  
15797  
15798  /*
15799   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15800   *
15801   *   3         2         1
15802   *  10987654321098765432109876543210
15803   *  001000               00010001101
15804   *     rt -----
15805   *          rs -----
15806   *               rd -----
15807   */
15808  static char *UASH(uint64 instruction, Dis_info *info)
15809  {
15810      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15811      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15812      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15813  
15814      const char *rt = GPR(rt_value, info);
15815      const char *rs = GPR(rs_value, info);
15816  
15817      return img_format("UASH %s, %" PRId64 "(%s)", rt, s_value, rs);
15818  }
15819  
15820  
15821  /*
15822   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15823   *
15824   *   3         2         1
15825   *  10987654321098765432109876543210
15826   *  001000               00010001101
15827   *     rt -----
15828   *          rs -----
15829   *               rd -----
15830   */
15831  static char *UASWM(uint64 instruction, Dis_info *info)
15832  {
15833      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15834      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15835      int64 s_value = extract_s__se8_15_7_6_5_4_3_2_1_0(instruction);
15836      uint64 count3_value = extract_count3_14_13_12(instruction);
15837  
15838      const char *rt = GPR(rt_value, info);
15839      const char *rs = GPR(rs_value, info);
15840      uint64 count3 = encode_count3_from_count(count3_value);
15841  
15842      return img_format("UASWM %s, %" PRId64 "(%s), 0x%" PRIx64,
15843                        rt, s_value, rs, count3);
15844  }
15845  
15846  
15847  /*
15848   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15849   *
15850   *   3         2         1
15851   *  10987654321098765432109876543210
15852   *  001000               00010001101
15853   *     rt -----
15854   *          rs -----
15855   *               rd -----
15856   */
15857  static char *UDI(uint64 instruction, Dis_info *info)
15858  {
15859      uint64 op_value = extract_op_25_to_3(instruction);
15860  
15861  
15862      return img_format("UDI 0x%" PRIx64, op_value);
15863  }
15864  
15865  
15866  /*
15867   * WAIT code - Enter Wait State
15868   *
15869   *   3         2         1
15870   *  10987654321098765432109876543210
15871   *  001000          1100001101111111
15872   *   code ----------
15873   */
15874  static char *WAIT(uint64 instruction, Dis_info *info)
15875  {
15876      uint64 code_value = extract_code_25_24_23_22_21_20_19_18_17_16(instruction);
15877  
15878  
15879      return img_format("WAIT 0x%" PRIx64, code_value);
15880  }
15881  
15882  
15883  /*
15884   * [DSP] WRDSP rt, mask - Write selected fields from a GPR to the DSPControl
15885   *         register
15886   *
15887   *   3         2         1
15888   *  10987654321098765432109876543210
15889   *  001000            01011001111111
15890   *     rt -----
15891   *        mask -------
15892   */
15893  static char *WRDSP(uint64 instruction, Dis_info *info)
15894  {
15895      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15896      uint64 mask_value = extract_mask_20_19_18_17_16_15_14(instruction);
15897  
15898      const char *rt = GPR(rt_value, info);
15899  
15900      return img_format("WRDSP %s, 0x%" PRIx64, rt, mask_value);
15901  }
15902  
15903  
15904  /*
15905   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15906   *
15907   *   3         2         1
15908   *  10987654321098765432109876543210
15909   *  001000               00010001101
15910   *     rt -----
15911   *          rs -----
15912   *               rd -----
15913   */
15914  static char *WRPGPR(uint64 instruction, Dis_info *info)
15915  {
15916      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15917      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15918  
15919      const char *rt = GPR(rt_value, info);
15920      const char *rs = GPR(rs_value, info);
15921  
15922      return img_format("WRPGPR %s, %s", rt, rs);
15923  }
15924  
15925  
15926  /*
15927   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15928   *
15929   *   3         2         1
15930   *  10987654321098765432109876543210
15931   *  001000               00010001101
15932   *     rt -----
15933   *          rs -----
15934   *               rd -----
15935   */
15936  static char *XOR_16_(uint64 instruction, Dis_info *info)
15937  {
15938      uint64 rt3_value = extract_rt3_9_8_7(instruction);
15939      uint64 rs3_value = extract_rs3_6_5_4(instruction);
15940  
15941      const char *rs3 = GPR(decode_gpr_gpr3(rs3_value, info), info);
15942      const char *rt3 = GPR(decode_gpr_gpr3(rt3_value, info), info);
15943  
15944      return img_format("XOR %s, %s", rs3, rt3);
15945  }
15946  
15947  
15948  /*
15949   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15950   *
15951   *   3         2         1
15952   *  10987654321098765432109876543210
15953   *  001000               00010001101
15954   *     rt -----
15955   *          rs -----
15956   *               rd -----
15957   */
15958  static char *XOR_32_(uint64 instruction, Dis_info *info)
15959  {
15960      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15961      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15962      uint64 rd_value = extract_rd_15_14_13_12_11(instruction);
15963  
15964      const char *rd = GPR(rd_value, info);
15965      const char *rs = GPR(rs_value, info);
15966      const char *rt = GPR(rt_value, info);
15967  
15968      return img_format("XOR %s, %s, %s", rd, rs, rt);
15969  }
15970  
15971  
15972  /*
15973   * ADDQH_R.W rd, rt, rs - Add Fractional Words And Shift Right to Halve Results
15974   *
15975   *   3         2         1
15976   *  10987654321098765432109876543210
15977   *  001000               00010001101
15978   *     rt -----
15979   *          rs -----
15980   *               rd -----
15981   */
15982  static char *XORI(uint64 instruction, Dis_info *info)
15983  {
15984      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
15985      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
15986      uint64 u_value = extract_u_11_10_9_8_7_6_5_4_3_2_1_0(instruction);
15987  
15988      const char *rt = GPR(rt_value, info);
15989      const char *rs = GPR(rs_value, info);
15990  
15991      return img_format("XORI %s, %s, 0x%" PRIx64, rt, rs, u_value);
15992  }
15993  
15994  
15995  /*
15996   * YIELD rt, rs -
15997   *
15998   *   3         2         1
15999   *  10987654321098765432109876543210
16000   *  001000               00010001101
16001   *     rt -----
16002   *          rs -----
16003   */
16004  static char *YIELD(uint64 instruction, Dis_info *info)
16005  {
16006      uint64 rt_value = extract_rt_25_24_23_22_21(instruction);
16007      uint64 rs_value = extract_rs_20_19_18_17_16(instruction);
16008  
16009      const char *rt = GPR(rt_value, info);
16010      const char *rs = GPR(rs_value, info);
16011  
16012      return img_format("YIELD %s, %s", rt, rs);
16013  }
16014  
16015  
16016  
16017  /*
16018   *                nanoMIPS instruction pool organization
16019   *                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16020   *
16021   *
16022   *                 ┌─ P.ADDIU ─── P.RI ─── P.SYSCALL
16023   *                 │
16024   *                 │                                      ┌─ P.TRAP
16025   *                 │                                      │
16026   *                 │                      ┌─ _POOL32A0_0 ─┼─ P.CMOVE
16027   *                 │                      │               │
16028   *                 │                      │               └─ P.SLTU
16029   *                 │        ┌─ _POOL32A0 ─┤
16030   *                 │        │             │
16031   *                 │        │             │
16032   *                 │        │             └─ _POOL32A0_1 ─── CRC32
16033   *                 │        │
16034   *                 ├─ P32A ─┤
16035   *                 │        │                           ┌─ PP.LSX
16036   *                 │        │             ┌─ P.LSX ─────┤
16037   *                 │        │             │             └─ PP.LSXS
16038   *                 │        └─ _POOL32A7 ─┤
16039   *                 │                      │             ┌─ POOL32Axf_4
16040   *                 │                      └─ POOL32Axf ─┤
16041   *                 │                                    └─ POOL32Axf_5
16042   *                 │
16043   *                 ├─ PBAL
16044   *                 │
16045   *                 ├─ P.GP.W   ┌─ PP.LSX
16046   *         ┌─ P32 ─┤           │
16047   *         │       ├─ P.GP.BH ─┴─ PP.LSXS
16048   *         │       │
16049   *         │       ├─ P.J ─────── PP.BALRSC
16050   *         │       │
16051   *         │       ├─ P48I
16052   *         │       │           ┌─ P.SR
16053   *         │       │           │
16054   *         │       │           ├─ P.SHIFT
16055   *         │       │           │
16056   *         │       ├─ P.U12 ───┼─ P.ROTX
16057   *         │       │           │
16058   *         │       │           ├─ P.INS
16059   *         │       │           │
16060   *         │       │           └─ P.EXT
16061   *         │       │
16062   *         │       ├─ P.LS.U12 ── P.PREF.U12
16063   *         │       │
16064   *         │       ├─ P.BR1 ───── P.BR3A
16065   *         │       │
16066   *         │       │           ┌─ P.LS.S0 ─── P16.SYSCALL
16067   *         │       │           │
16068   *         │       │           │           ┌─ P.LL
16069   *         │       │           ├─ P.LS.S1 ─┤
16070   *         │       │           │           └─ P.SC
16071   *         │       │           │
16072   *         │       │           │           ┌─ P.PREFE
16073   *  MAJOR ─┤       ├─ P.LS.S9 ─┤           │
16074   *         │       │           ├─ P.LS.E0 ─┼─ P.LLE
16075   *         │       │           │           │
16076   *         │       │           │           └─ P.SCE
16077   *         │       │           │
16078   *         │       │           ├─ P.LS.WM
16079   *         │       │           │
16080   *         │       │           └─ P.LS.UAWM
16081   *         │       │
16082   *         │       │
16083   *         │       ├─ P.BR2
16084   *         │       │
16085   *         │       ├─ P.BRI
16086   *         │       │
16087   *         │       └─ P.LUI
16088   *         │
16089   *         │
16090   *         │       ┌─ P16.MV ──── P16.RI ─── P16.SYSCALL
16091   *         │       │
16092   *         │       ├─ P16.SR
16093   *         │       │
16094   *         │       ├─ P16.SHIFT
16095   *         │       │
16096   *         │       ├─ P16.4x4
16097   *         │       │
16098   *         │       ├─ P16C ────── POOL16C_0 ── POOL16C_00
16099   *         │       │
16100   *         └─ P16 ─┼─ P16.LB
16101   *                 │
16102   *                 ├─ P16.A1
16103   *                 │
16104   *                 ├─ P16.LH
16105   *                 │
16106   *                 ├─ P16.A2 ──── P.ADDIU[RS5]
16107   *                 │
16108   *                 ├─ P16.ADDU
16109   *                 │
16110   *                 └─ P16.BR ──┬─ P16.JRC
16111   *                             │
16112   *                             └─ P16.BR1
16113   *
16114   *
16115   *  (FP, DPS, and some minor instruction pools are omitted from the diagram)
16116   *
16117   */
16118  
16119  typedef enum  {
16120      instruction,
16121      call_instruction,
16122      branch_instruction,
16123      return_instruction,
16124      reserved_block,
16125      pool,
16126  } TABLE_ENTRY_TYPE;
16127  
16128  typedef enum {
16129      MIPS64_    = 0x00000001,
16130      XNP_       = 0x00000002,
16131      XMMS_      = 0x00000004,
16132      EVA_       = 0x00000008,
16133      DSP_       = 0x00000010,
16134      MT_        = 0x00000020,
16135      EJTAG_     = 0x00000040,
16136      TLBINV_    = 0x00000080,
16137      CP0_       = 0x00000100,
16138      CP1_       = 0x00000200,
16139      CP2_       = 0x00000400,
16140      UDI_       = 0x00000800,
16141      MCU_       = 0x00001000,
16142      VZ_        = 0x00002000,
16143      TLB_       = 0x00004000,
16144      MVH_       = 0x00008000,
16145      ALL_ATTRIBUTES = 0xffffffffull,
16146  } TABLE_ATTRIBUTE_TYPE;
16147  
16148  typedef bool (*conditional_function)(uint64 instruction);
16149  typedef char * (*disassembly_function)(uint64 instruction,
16150                                              Dis_info *info);
16151  
16152  typedef struct Pool {
16153      TABLE_ENTRY_TYPE     type;
16154      const struct Pool    *next_table;
16155      int                  next_table_size;
16156      int                  instructions_size;
16157      uint64               mask;
16158      uint64               value;
16159      disassembly_function disassembly;
16160      conditional_function condition;
16161      uint64               attributes;
16162  } Pool;
16163  
16164  static const Pool P_SYSCALL[2] = {
16165      { instruction         , 0                   , 0   , 32,
16166         0xfffc0000, 0x00080000, &SYSCALL_32_      , 0,
16167         0x0                 },        /* SYSCALL[32] */
16168      { instruction         , 0                   , 0   , 32,
16169         0xfffc0000, 0x000c0000, &HYPCALL          , 0,
16170         CP0_ | VZ_          },        /* HYPCALL */
16171  };
16172  
16173  
16174  static const Pool P_RI[4] = {
16175      { instruction         , 0                   , 0   , 32,
16176         0xfff80000, 0x00000000, &SIGRIE           , 0,
16177         0x0                 },        /* SIGRIE */
16178      { pool                , P_SYSCALL           , 2   , 32,
16179         0xfff80000, 0x00080000, 0                      , 0,
16180         0x0                 },        /* P.SYSCALL */
16181      { instruction         , 0                   , 0   , 32,
16182         0xfff80000, 0x00100000, &BREAK_32_        , 0,
16183         0x0                 },        /* BREAK[32] */
16184      { instruction         , 0                   , 0   , 32,
16185         0xfff80000, 0x00180000, &SDBBP_32_        , 0,
16186         EJTAG_              },        /* SDBBP[32] */
16187  };
16188  
16189  
16190  static const Pool P_ADDIU[2] = {
16191      { pool                , P_RI                , 4   , 32,
16192         0xffe00000, 0x00000000, 0                      , 0,
16193         0x0                 },        /* P.RI */
16194      { instruction         , 0                   , 0   , 32,
16195         0xfc000000, 0x00000000, &ADDIU_32_        , &ADDIU_32__cond   ,
16196         0x0                 },        /* ADDIU[32] */
16197  };
16198  
16199  
16200  static const Pool P_TRAP[2] = {
16201      { instruction         , 0                   , 0   , 32,
16202         0xfc0007ff, 0x20000000, &TEQ              , 0,
16203         XMMS_               },        /* TEQ */
16204      { instruction         , 0                   , 0   , 32,
16205         0xfc0007ff, 0x20000400, &TNE              , 0,
16206         XMMS_               },        /* TNE */
16207  };
16208  
16209  
16210  static const Pool P_CMOVE[2] = {
16211      { instruction         , 0                   , 0   , 32,
16212         0xfc0007ff, 0x20000210, &MOVZ             , 0,
16213         0x0                 },        /* MOVZ */
16214      { instruction         , 0                   , 0   , 32,
16215         0xfc0007ff, 0x20000610, &MOVN             , 0,
16216         0x0                 },        /* MOVN */
16217  };
16218  
16219  
16220  static const Pool P_D_MT_VPE[2] = {
16221      { instruction         , 0                   , 0   , 32,
16222         0xfc1f3fff, 0x20010ab0, &DMT              , 0,
16223         MT_                 },        /* DMT */
16224      { instruction         , 0                   , 0   , 32,
16225         0xfc1f3fff, 0x20000ab0, &DVPE             , 0,
16226         MT_                 },        /* DVPE */
16227  };
16228  
16229  
16230  static const Pool P_E_MT_VPE[2] = {
16231      { instruction         , 0                   , 0   , 32,
16232         0xfc1f3fff, 0x20010eb0, &EMT              , 0,
16233         MT_                 },        /* EMT */
16234      { instruction         , 0                   , 0   , 32,
16235         0xfc1f3fff, 0x20000eb0, &EVPE             , 0,
16236         MT_                 },        /* EVPE */
16237  };
16238  
16239  
16240  static const Pool _P_MT_VPE[2] = {
16241      { pool                , P_D_MT_VPE          , 2   , 32,
16242         0xfc003fff, 0x20000ab0, 0                      , 0,
16243         0x0                 },        /* P.D_MT_VPE */
16244      { pool                , P_E_MT_VPE          , 2   , 32,
16245         0xfc003fff, 0x20000eb0, 0                      , 0,
16246         0x0                 },        /* P.E_MT_VPE */
16247  };
16248  
16249  
16250  static const Pool P_MT_VPE[8] = {
16251      { reserved_block      , 0                   , 0   , 32,
16252         0xfc003bff, 0x200002b0, 0                      , 0,
16253         0x0                 },        /* P.MT_VPE~*(0) */
16254      { pool                , _P_MT_VPE           , 2   , 32,
16255         0xfc003bff, 0x20000ab0, 0                      , 0,
16256         0x0                 },        /* _P.MT_VPE */
16257      { reserved_block      , 0                   , 0   , 32,
16258         0xfc003bff, 0x200012b0, 0                      , 0,
16259         0x0                 },        /* P.MT_VPE~*(2) */
16260      { reserved_block      , 0                   , 0   , 32,
16261         0xfc003bff, 0x20001ab0, 0                      , 0,
16262         0x0                 },        /* P.MT_VPE~*(3) */
16263      { reserved_block      , 0                   , 0   , 32,
16264         0xfc003bff, 0x200022b0, 0                      , 0,
16265         0x0                 },        /* P.MT_VPE~*(4) */
16266      { reserved_block      , 0                   , 0   , 32,
16267         0xfc003bff, 0x20002ab0, 0                      , 0,
16268         0x0                 },        /* P.MT_VPE~*(5) */
16269      { reserved_block      , 0                   , 0   , 32,
16270         0xfc003bff, 0x200032b0, 0                      , 0,
16271         0x0                 },        /* P.MT_VPE~*(6) */
16272      { reserved_block      , 0                   , 0   , 32,
16273         0xfc003bff, 0x20003ab0, 0                      , 0,
16274         0x0                 },        /* P.MT_VPE~*(7) */
16275  };
16276  
16277  
16278  static const Pool P_DVP[2] = {
16279      { instruction         , 0                   , 0   , 32,
16280         0xfc00ffff, 0x20000390, &DVP              , 0,
16281         0x0                 },        /* DVP */
16282      { instruction         , 0                   , 0   , 32,
16283         0xfc00ffff, 0x20000790, &EVP              , 0,
16284         0x0                 },        /* EVP */
16285  };
16286  
16287  
16288  static const Pool P_SLTU[2] = {
16289      { pool                , P_DVP               , 2   , 32,
16290         0xfc00fbff, 0x20000390, 0                      , 0,
16291         0x0                 },        /* P.DVP */
16292      { instruction         , 0                   , 0   , 32,
16293         0xfc0003ff, 0x20000390, &SLTU             , &SLTU_cond        ,
16294         0x0                 },        /* SLTU */
16295  };
16296  
16297  
16298  static const Pool _POOL32A0[128] = {
16299      { pool                , P_TRAP              , 2   , 32,
16300         0xfc0003ff, 0x20000000, 0                      , 0,
16301         0x0                 },        /* P.TRAP */
16302      { instruction         , 0                   , 0   , 32,
16303         0xfc0003ff, 0x20000008, &SEB              , 0,
16304         XMMS_               },        /* SEB */
16305      { instruction         , 0                   , 0   , 32,
16306         0xfc0003ff, 0x20000010, &SLLV             , 0,
16307         0x0                 },        /* SLLV */
16308      { instruction         , 0                   , 0   , 32,
16309         0xfc0003ff, 0x20000018, &MUL_32_          , 0,
16310         0x0                 },        /* MUL[32] */
16311      { reserved_block      , 0                   , 0   , 32,
16312         0xfc0003ff, 0x20000020, 0                      , 0,
16313         0x0                 },        /* _POOL32A0~*(4) */
16314      { reserved_block      , 0                   , 0   , 32,
16315         0xfc0003ff, 0x20000028, 0                      , 0,
16316         0x0                 },        /* _POOL32A0~*(5) */
16317      { instruction         , 0                   , 0   , 32,
16318         0xfc0003ff, 0x20000030, &MFC0             , 0,
16319         0x0                 },        /* MFC0 */
16320      { instruction         , 0                   , 0   , 32,
16321         0xfc0003ff, 0x20000038, &MFHC0            , 0,
16322         CP0_ | MVH_         },        /* MFHC0 */
16323      { reserved_block      , 0                   , 0   , 32,
16324         0xfc0003ff, 0x20000040, 0                      , 0,
16325         0x0                 },        /* _POOL32A0~*(8) */
16326      { instruction         , 0                   , 0   , 32,
16327         0xfc0003ff, 0x20000048, &SEH              , 0,
16328         0x0                 },        /* SEH */
16329      { instruction         , 0                   , 0   , 32,
16330         0xfc0003ff, 0x20000050, &SRLV             , 0,
16331         0x0                 },        /* SRLV */
16332      { instruction         , 0                   , 0   , 32,
16333         0xfc0003ff, 0x20000058, &MUH              , 0,
16334         0x0                 },        /* MUH */
16335      { reserved_block      , 0                   , 0   , 32,
16336         0xfc0003ff, 0x20000060, 0                      , 0,
16337         0x0                 },        /* _POOL32A0~*(12) */
16338      { reserved_block      , 0                   , 0   , 32,
16339         0xfc0003ff, 0x20000068, 0                      , 0,
16340         0x0                 },        /* _POOL32A0~*(13) */
16341      { instruction         , 0                   , 0   , 32,
16342         0xfc0003ff, 0x20000070, &MTC0             , 0,
16343         CP0_                },        /* MTC0 */
16344      { instruction         , 0                   , 0   , 32,
16345         0xfc0003ff, 0x20000078, &MTHC0            , 0,
16346         CP0_ | MVH_         },        /* MTHC0 */
16347      { reserved_block      , 0                   , 0   , 32,
16348         0xfc0003ff, 0x20000080, 0                      , 0,
16349         0x0                 },        /* _POOL32A0~*(16) */
16350      { reserved_block      , 0                   , 0   , 32,
16351         0xfc0003ff, 0x20000088, 0                      , 0,
16352         0x0                 },        /* _POOL32A0~*(17) */
16353      { instruction         , 0                   , 0   , 32,
16354         0xfc0003ff, 0x20000090, &SRAV             , 0,
16355         0x0                 },        /* SRAV */
16356      { instruction         , 0                   , 0   , 32,
16357         0xfc0003ff, 0x20000098, &MULU             , 0,
16358         0x0                 },        /* MULU */
16359      { reserved_block      , 0                   , 0   , 32,
16360         0xfc0003ff, 0x200000a0, 0                      , 0,
16361         0x0                 },        /* _POOL32A0~*(20) */
16362      { reserved_block      , 0                   , 0   , 32,
16363         0xfc0003ff, 0x200000a8, 0                      , 0,
16364         0x0                 },        /* _POOL32A0~*(21) */
16365      { instruction         , 0                   , 0   , 32,
16366         0xfc0003ff, 0x200000b0, &MFGC0            , 0,
16367         CP0_ | VZ_          },        /* MFGC0 */
16368      { instruction         , 0                   , 0   , 32,
16369         0xfc0003ff, 0x200000b8, &MFHGC0           , 0,
16370         CP0_ | VZ_ | MVH_   },        /* MFHGC0 */
16371      { reserved_block      , 0                   , 0   , 32,
16372         0xfc0003ff, 0x200000c0, 0                      , 0,
16373         0x0                 },        /* _POOL32A0~*(24) */
16374      { reserved_block      , 0                   , 0   , 32,
16375         0xfc0003ff, 0x200000c8, 0                      , 0,
16376         0x0                 },        /* _POOL32A0~*(25) */
16377      { instruction         , 0                   , 0   , 32,
16378         0xfc0003ff, 0x200000d0, &ROTRV            , 0,
16379         0x0                 },        /* ROTRV */
16380      { instruction         , 0                   , 0   , 32,
16381         0xfc0003ff, 0x200000d8, &MUHU             , 0,
16382         0x0                 },        /* MUHU */
16383      { reserved_block      , 0                   , 0   , 32,
16384         0xfc0003ff, 0x200000e0, 0                      , 0,
16385         0x0                 },        /* _POOL32A0~*(28) */
16386      { reserved_block      , 0                   , 0   , 32,
16387         0xfc0003ff, 0x200000e8, 0                      , 0,
16388         0x0                 },        /* _POOL32A0~*(29) */
16389      { instruction         , 0                   , 0   , 32,
16390         0xfc0003ff, 0x200000f0, &MTGC0            , 0,
16391         CP0_ | VZ_          },        /* MTGC0 */
16392      { instruction         , 0                   , 0   , 32,
16393         0xfc0003ff, 0x200000f8, &MTHGC0           , 0,
16394         CP0_ | VZ_ | MVH_   },        /* MTHGC0 */
16395      { reserved_block      , 0                   , 0   , 32,
16396         0xfc0003ff, 0x20000100, 0                      , 0,
16397         0x0                 },        /* _POOL32A0~*(32) */
16398      { reserved_block      , 0                   , 0   , 32,
16399         0xfc0003ff, 0x20000108, 0                      , 0,
16400         0x0                 },        /* _POOL32A0~*(33) */
16401      { instruction         , 0                   , 0   , 32,
16402         0xfc0003ff, 0x20000110, &ADD              , 0,
16403         XMMS_               },        /* ADD */
16404      { instruction         , 0                   , 0   , 32,
16405         0xfc0003ff, 0x20000118, &DIV              , 0,
16406         0x0                 },        /* DIV */
16407      { reserved_block      , 0                   , 0   , 32,
16408         0xfc0003ff, 0x20000120, 0                      , 0,
16409         0x0                 },        /* _POOL32A0~*(36) */
16410      { reserved_block      , 0                   , 0   , 32,
16411         0xfc0003ff, 0x20000128, 0                      , 0,
16412         0x0                 },        /* _POOL32A0~*(37) */
16413      { instruction         , 0                   , 0   , 32,
16414         0xfc0003ff, 0x20000130, &DMFC0            , 0,
16415         CP0_ | MIPS64_      },        /* DMFC0 */
16416      { reserved_block      , 0                   , 0   , 32,
16417         0xfc0003ff, 0x20000138, 0                      , 0,
16418         0x0                 },        /* _POOL32A0~*(39) */
16419      { reserved_block      , 0                   , 0   , 32,
16420         0xfc0003ff, 0x20000140, 0                      , 0,
16421         0x0                 },        /* _POOL32A0~*(40) */
16422      { reserved_block      , 0                   , 0   , 32,
16423         0xfc0003ff, 0x20000148, 0                      , 0,
16424         0x0                 },        /* _POOL32A0~*(41) */
16425      { instruction         , 0                   , 0   , 32,
16426         0xfc0003ff, 0x20000150, &ADDU_32_         , 0,
16427         0x0                 },        /* ADDU[32] */
16428      { instruction         , 0                   , 0   , 32,
16429         0xfc0003ff, 0x20000158, &MOD              , 0,
16430         0x0                 },        /* MOD */
16431      { reserved_block      , 0                   , 0   , 32,
16432         0xfc0003ff, 0x20000160, 0                      , 0,
16433         0x0                 },        /* _POOL32A0~*(44) */
16434      { reserved_block      , 0                   , 0   , 32,
16435         0xfc0003ff, 0x20000168, 0                      , 0,
16436         0x0                 },        /* _POOL32A0~*(45) */
16437      { instruction         , 0                   , 0   , 32,
16438         0xfc0003ff, 0x20000170, &DMTC0            , 0,
16439         CP0_ | MIPS64_      },        /* DMTC0 */
16440      { reserved_block      , 0                   , 0   , 32,
16441         0xfc0003ff, 0x20000178, 0                      , 0,
16442         0x0                 },        /* _POOL32A0~*(47) */
16443      { reserved_block      , 0                   , 0   , 32,
16444         0xfc0003ff, 0x20000180, 0                      , 0,
16445         0x0                 },        /* _POOL32A0~*(48) */
16446      { reserved_block      , 0                   , 0   , 32,
16447         0xfc0003ff, 0x20000188, 0                      , 0,
16448         0x0                 },        /* _POOL32A0~*(49) */
16449      { instruction         , 0                   , 0   , 32,
16450         0xfc0003ff, 0x20000190, &SUB              , 0,
16451         XMMS_               },        /* SUB */
16452      { instruction         , 0                   , 0   , 32,
16453         0xfc0003ff, 0x20000198, &DIVU             , 0,
16454         0x0                 },        /* DIVU */
16455      { reserved_block      , 0                   , 0   , 32,
16456         0xfc0003ff, 0x200001a0, 0                      , 0,
16457         0x0                 },        /* _POOL32A0~*(52) */
16458      { reserved_block      , 0                   , 0   , 32,
16459         0xfc0003ff, 0x200001a8, 0                      , 0,
16460         0x0                 },        /* _POOL32A0~*(53) */
16461      { instruction         , 0                   , 0   , 32,
16462         0xfc0003ff, 0x200001b0, &DMFGC0           , 0,
16463         CP0_ | MIPS64_ | VZ_},        /* DMFGC0 */
16464      { reserved_block      , 0                   , 0   , 32,
16465         0xfc0003ff, 0x200001b8, 0                      , 0,
16466         0x0                 },        /* _POOL32A0~*(55) */
16467      { instruction         , 0                   , 0   , 32,
16468         0xfc0003ff, 0x200001c0, &RDHWR            , 0,
16469         XMMS_               },        /* RDHWR */
16470      { reserved_block      , 0                   , 0   , 32,
16471         0xfc0003ff, 0x200001c8, 0                      , 0,
16472         0x0                 },        /* _POOL32A0~*(57) */
16473      { instruction         , 0                   , 0   , 32,
16474         0xfc0003ff, 0x200001d0, &SUBU_32_         , 0,
16475         0x0                 },        /* SUBU[32] */
16476      { instruction         , 0                   , 0   , 32,
16477         0xfc0003ff, 0x200001d8, &MODU             , 0,
16478         0x0                 },        /* MODU */
16479      { reserved_block      , 0                   , 0   , 32,
16480         0xfc0003ff, 0x200001e0, 0                      , 0,
16481         0x0                 },        /* _POOL32A0~*(60) */
16482      { reserved_block      , 0                   , 0   , 32,
16483         0xfc0003ff, 0x200001e8, 0                      , 0,
16484         0x0                 },        /* _POOL32A0~*(61) */
16485      { instruction         , 0                   , 0   , 32,
16486         0xfc0003ff, 0x200001f0, &DMTGC0           , 0,
16487         CP0_ | MIPS64_ | VZ_},        /* DMTGC0 */
16488      { reserved_block      , 0                   , 0   , 32,
16489         0xfc0003ff, 0x200001f8, 0                      , 0,
16490         0x0                 },        /* _POOL32A0~*(63) */
16491      { reserved_block      , 0                   , 0   , 32,
16492         0xfc0003ff, 0x20000200, 0                      , 0,
16493         0x0                 },        /* _POOL32A0~*(64) */
16494      { reserved_block      , 0                   , 0   , 32,
16495         0xfc0003ff, 0x20000208, 0                      , 0,
16496         0x0                 },        /* _POOL32A0~*(65) */
16497      { pool                , P_CMOVE             , 2   , 32,
16498         0xfc0003ff, 0x20000210, 0                      , 0,
16499         0x0                 },        /* P.CMOVE */
16500      { reserved_block      , 0                   , 0   , 32,
16501         0xfc0003ff, 0x20000218, 0                      , 0,
16502         0x0                 },        /* _POOL32A0~*(67) */
16503      { reserved_block      , 0                   , 0   , 32,
16504         0xfc0003ff, 0x20000220, 0                      , 0,
16505         0x0                 },        /* _POOL32A0~*(68) */
16506      { instruction         , 0                   , 0   , 32,
16507         0xfc0003ff, 0x20000228, &FORK             , 0,
16508         MT_                 },        /* FORK */
16509      { instruction         , 0                   , 0   , 32,
16510         0xfc0003ff, 0x20000230, &MFTR             , 0,
16511         MT_                 },        /* MFTR */
16512      { instruction         , 0                   , 0   , 32,
16513         0xfc0003ff, 0x20000238, &MFHTR            , 0,
16514         MT_                 },        /* MFHTR */
16515      { reserved_block      , 0                   , 0   , 32,
16516         0xfc0003ff, 0x20000240, 0                      , 0,
16517         0x0                 },        /* _POOL32A0~*(72) */
16518      { reserved_block      , 0                   , 0   , 32,
16519         0xfc0003ff, 0x20000248, 0                      , 0,
16520         0x0                 },        /* _POOL32A0~*(73) */
16521      { instruction         , 0                   , 0   , 32,
16522         0xfc0003ff, 0x20000250, &AND_32_          , 0,
16523         0x0                 },        /* AND[32] */
16524      { reserved_block      , 0                   , 0   , 32,
16525         0xfc0003ff, 0x20000258, 0                      , 0,
16526         0x0                 },        /* _POOL32A0~*(75) */
16527      { reserved_block      , 0                   , 0   , 32,
16528         0xfc0003ff, 0x20000260, 0                      , 0,
16529         0x0                 },        /* _POOL32A0~*(76) */
16530      { instruction         , 0                   , 0   , 32,
16531         0xfc0003ff, 0x20000268, &YIELD            , 0,
16532         MT_                 },        /* YIELD */
16533      { instruction         , 0                   , 0   , 32,
16534         0xfc0003ff, 0x20000270, &MTTR             , 0,
16535         MT_                 },        /* MTTR */
16536      { instruction         , 0                   , 0   , 32,
16537         0xfc0003ff, 0x20000278, &MTHTR            , 0,
16538         MT_                 },        /* MTHTR */
16539      { reserved_block      , 0                   , 0   , 32,
16540         0xfc0003ff, 0x20000280, 0                      , 0,
16541         0x0                 },        /* _POOL32A0~*(80) */
16542      { reserved_block      , 0                   , 0   , 32,
16543         0xfc0003ff, 0x20000288, 0                      , 0,
16544         0x0                 },        /* _POOL32A0~*(81) */
16545      { instruction         , 0                   , 0   , 32,
16546         0xfc0003ff, 0x20000290, &OR_32_           , 0,
16547         0x0                 },        /* OR[32] */
16548      { reserved_block      , 0                   , 0   , 32,
16549         0xfc0003ff, 0x20000298, 0                      , 0,
16550         0x0                 },        /* _POOL32A0~*(83) */
16551      { reserved_block      , 0                   , 0   , 32,
16552         0xfc0003ff, 0x200002a0, 0                      , 0,
16553         0x0                 },        /* _POOL32A0~*(84) */
16554      { reserved_block      , 0                   , 0   , 32,
16555         0xfc0003ff, 0x200002a8, 0                      , 0,
16556         0x0                 },        /* _POOL32A0~*(85) */
16557      { pool                , P_MT_VPE            , 8   , 32,
16558         0xfc0003ff, 0x200002b0, 0                      , 0,
16559         0x0                 },        /* P.MT_VPE */
16560      { reserved_block      , 0                   , 0   , 32,
16561         0xfc0003ff, 0x200002b8, 0                      , 0,
16562         0x0                 },        /* _POOL32A0~*(87) */
16563      { reserved_block      , 0                   , 0   , 32,
16564         0xfc0003ff, 0x200002c0, 0                      , 0,
16565         0x0                 },        /* _POOL32A0~*(88) */
16566      { reserved_block      , 0                   , 0   , 32,
16567         0xfc0003ff, 0x200002c8, 0                      , 0,
16568         0x0                 },        /* _POOL32A0~*(89) */
16569      { instruction         , 0                   , 0   , 32,
16570         0xfc0003ff, 0x200002d0, &NOR              , 0,
16571         0x0                 },        /* NOR */
16572      { reserved_block      , 0                   , 0   , 32,
16573         0xfc0003ff, 0x200002d8, 0                      , 0,
16574         0x0                 },        /* _POOL32A0~*(91) */
16575      { reserved_block      , 0                   , 0   , 32,
16576         0xfc0003ff, 0x200002e0, 0                      , 0,
16577         0x0                 },        /* _POOL32A0~*(92) */
16578      { reserved_block      , 0                   , 0   , 32,
16579         0xfc0003ff, 0x200002e8, 0                      , 0,
16580         0x0                 },        /* _POOL32A0~*(93) */
16581      { reserved_block      , 0                   , 0   , 32,
16582         0xfc0003ff, 0x200002f0, 0                      , 0,
16583         0x0                 },        /* _POOL32A0~*(94) */
16584      { reserved_block      , 0                   , 0   , 32,
16585         0xfc0003ff, 0x200002f8, 0                      , 0,
16586         0x0                 },        /* _POOL32A0~*(95) */
16587      { reserved_block      , 0                   , 0   , 32,
16588         0xfc0003ff, 0x20000300, 0                      , 0,
16589         0x0                 },        /* _POOL32A0~*(96) */
16590      { reserved_block      , 0                   , 0   , 32,
16591         0xfc0003ff, 0x20000308, 0                      , 0,
16592         0x0                 },        /* _POOL32A0~*(97) */
16593      { instruction         , 0                   , 0   , 32,
16594         0xfc0003ff, 0x20000310, &XOR_32_          , 0,
16595         0x0                 },        /* XOR[32] */
16596      { reserved_block      , 0                   , 0   , 32,
16597         0xfc0003ff, 0x20000318, 0                      , 0,
16598         0x0                 },        /* _POOL32A0~*(99) */
16599      { reserved_block      , 0                   , 0   , 32,
16600         0xfc0003ff, 0x20000320, 0                      , 0,
16601         0x0                 },        /* _POOL32A0~*(100) */
16602      { reserved_block      , 0                   , 0   , 32,
16603         0xfc0003ff, 0x20000328, 0                      , 0,
16604         0x0                 },        /* _POOL32A0~*(101) */
16605      { reserved_block      , 0                   , 0   , 32,
16606         0xfc0003ff, 0x20000330, 0                      , 0,
16607         0x0                 },        /* _POOL32A0~*(102) */
16608      { reserved_block      , 0                   , 0   , 32,
16609         0xfc0003ff, 0x20000338, 0                      , 0,
16610         0x0                 },        /* _POOL32A0~*(103) */
16611      { reserved_block      , 0                   , 0   , 32,
16612         0xfc0003ff, 0x20000340, 0                      , 0,
16613         0x0                 },        /* _POOL32A0~*(104) */
16614      { reserved_block      , 0                   , 0   , 32,
16615         0xfc0003ff, 0x20000348, 0                      , 0,
16616         0x0                 },        /* _POOL32A0~*(105) */
16617      { instruction         , 0                   , 0   , 32,
16618         0xfc0003ff, 0x20000350, &SLT              , 0,
16619         0x0                 },        /* SLT */
16620      { reserved_block      , 0                   , 0   , 32,
16621         0xfc0003ff, 0x20000358, 0                      , 0,
16622         0x0                 },        /* _POOL32A0~*(107) */
16623      { reserved_block      , 0                   , 0   , 32,
16624         0xfc0003ff, 0x20000360, 0                      , 0,
16625         0x0                 },        /* _POOL32A0~*(108) */
16626      { reserved_block      , 0                   , 0   , 32,
16627         0xfc0003ff, 0x20000368, 0                      , 0,
16628         0x0                 },        /* _POOL32A0~*(109) */
16629      { reserved_block      , 0                   , 0   , 32,
16630         0xfc0003ff, 0x20000370, 0                      , 0,
16631         0x0                 },        /* _POOL32A0~*(110) */
16632      { reserved_block      , 0                   , 0   , 32,
16633         0xfc0003ff, 0x20000378, 0                      , 0,
16634         0x0                 },        /* _POOL32A0~*(111) */
16635      { reserved_block      , 0                   , 0   , 32,
16636         0xfc0003ff, 0x20000380, 0                      , 0,
16637         0x0                 },        /* _POOL32A0~*(112) */
16638      { reserved_block      , 0                   , 0   , 32,
16639         0xfc0003ff, 0x20000388, 0                      , 0,
16640         0x0                 },        /* _POOL32A0~*(113) */
16641      { pool                , P_SLTU              , 2   , 32,
16642         0xfc0003ff, 0x20000390, 0                      , 0,
16643         0x0                 },        /* P.SLTU */
16644      { reserved_block      , 0                   , 0   , 32,
16645         0xfc0003ff, 0x20000398, 0                      , 0,
16646         0x0                 },        /* _POOL32A0~*(115) */
16647      { reserved_block      , 0                   , 0   , 32,
16648         0xfc0003ff, 0x200003a0, 0                      , 0,
16649         0x0                 },        /* _POOL32A0~*(116) */
16650      { reserved_block      , 0                   , 0   , 32,
16651         0xfc0003ff, 0x200003a8, 0                      , 0,
16652         0x0                 },        /* _POOL32A0~*(117) */
16653      { reserved_block      , 0                   , 0   , 32,
16654         0xfc0003ff, 0x200003b0, 0                      , 0,
16655         0x0                 },        /* _POOL32A0~*(118) */
16656      { reserved_block      , 0                   , 0   , 32,
16657         0xfc0003ff, 0x200003b8, 0                      , 0,
16658         0x0                 },        /* _POOL32A0~*(119) */
16659      { reserved_block      , 0                   , 0   , 32,
16660         0xfc0003ff, 0x200003c0, 0                      , 0,
16661         0x0                 },        /* _POOL32A0~*(120) */
16662      { reserved_block      , 0                   , 0   , 32,
16663         0xfc0003ff, 0x200003c8, 0                      , 0,
16664         0x0                 },        /* _POOL32A0~*(121) */
16665      { instruction         , 0                   , 0   , 32,
16666         0xfc0003ff, 0x200003d0, &SOV              , 0,
16667         0x0                 },        /* SOV */
16668      { reserved_block      , 0                   , 0   , 32,
16669         0xfc0003ff, 0x200003d8, 0                      , 0,
16670         0x0                 },        /* _POOL32A0~*(123) */
16671      { reserved_block      , 0                   , 0   , 32,
16672         0xfc0003ff, 0x200003e0, 0                      , 0,
16673         0x0                 },        /* _POOL32A0~*(124) */
16674      { reserved_block      , 0                   , 0   , 32,
16675         0xfc0003ff, 0x200003e8, 0                      , 0,
16676         0x0                 },        /* _POOL32A0~*(125) */
16677      { reserved_block      , 0                   , 0   , 32,
16678         0xfc0003ff, 0x200003f0, 0                      , 0,
16679         0x0                 },        /* _POOL32A0~*(126) */
16680      { reserved_block      , 0                   , 0   , 32,
16681         0xfc0003ff, 0x200003f8, 0                      , 0,
16682         0x0                 },        /* _POOL32A0~*(127) */
16683  };
16684  
16685  
16686  static const Pool ADDQ__S__PH[2] = {
16687      { instruction         , 0                   , 0   , 32,
16688         0xfc0007ff, 0x2000000d, &ADDQ_PH          , 0,
16689         DSP_                },        /* ADDQ.PH */
16690      { instruction         , 0                   , 0   , 32,
16691         0xfc0007ff, 0x2000040d, &ADDQ_S_PH        , 0,
16692         DSP_                },        /* ADDQ_S.PH */
16693  };
16694  
16695  
16696  static const Pool MUL__S__PH[2] = {
16697      { instruction         , 0                   , 0   , 32,
16698         0xfc0007ff, 0x2000002d, &MUL_PH           , 0,
16699         DSP_                },        /* MUL.PH */
16700      { instruction         , 0                   , 0   , 32,
16701         0xfc0007ff, 0x2000042d, &MUL_S_PH         , 0,
16702         DSP_                },        /* MUL_S.PH */
16703  };
16704  
16705  
16706  static const Pool ADDQH__R__PH[2] = {
16707      { instruction         , 0                   , 0   , 32,
16708         0xfc0007ff, 0x2000004d, &ADDQH_PH         , 0,
16709         DSP_                },        /* ADDQH.PH */
16710      { instruction         , 0                   , 0   , 32,
16711         0xfc0007ff, 0x2000044d, &ADDQH_R_PH       , 0,
16712         DSP_                },        /* ADDQH_R.PH */
16713  };
16714  
16715  
16716  static const Pool ADDQH__R__W[2] = {
16717      { instruction         , 0                   , 0   , 32,
16718         0xfc0007ff, 0x2000008d, &ADDQH_W          , 0,
16719         DSP_                },        /* ADDQH.W */
16720      { instruction         , 0                   , 0   , 32,
16721         0xfc0007ff, 0x2000048d, &ADDQH_R_W        , 0,
16722         DSP_                },        /* ADDQH_R.W */
16723  };
16724  
16725  
16726  static const Pool ADDU__S__QB[2] = {
16727      { instruction         , 0                   , 0   , 32,
16728         0xfc0007ff, 0x200000cd, &ADDU_QB          , 0,
16729         DSP_                },        /* ADDU.QB */
16730      { instruction         , 0                   , 0   , 32,
16731         0xfc0007ff, 0x200004cd, &ADDU_S_QB        , 0,
16732         DSP_                },        /* ADDU_S.QB */
16733  };
16734  
16735  
16736  static const Pool ADDU__S__PH[2] = {
16737      { instruction         , 0                   , 0   , 32,
16738         0xfc0007ff, 0x2000010d, &ADDU_PH          , 0,
16739         DSP_                },        /* ADDU.PH */
16740      { instruction         , 0                   , 0   , 32,
16741         0xfc0007ff, 0x2000050d, &ADDU_S_PH        , 0,
16742         DSP_                },        /* ADDU_S.PH */
16743  };
16744  
16745  
16746  static const Pool ADDUH__R__QB[2] = {
16747      { instruction         , 0                   , 0   , 32,
16748         0xfc0007ff, 0x2000014d, &ADDUH_QB         , 0,
16749         DSP_                },        /* ADDUH.QB */
16750      { instruction         , 0                   , 0   , 32,
16751         0xfc0007ff, 0x2000054d, &ADDUH_R_QB       , 0,
16752         DSP_                },        /* ADDUH_R.QB */
16753  };
16754  
16755  
16756  static const Pool SHRAV__R__PH[2] = {
16757      { instruction         , 0                   , 0   , 32,
16758         0xfc0007ff, 0x2000018d, &SHRAV_PH         , 0,
16759         DSP_                },        /* SHRAV.PH */
16760      { instruction         , 0                   , 0   , 32,
16761         0xfc0007ff, 0x2000058d, &SHRAV_R_PH       , 0,
16762         DSP_                },        /* SHRAV_R.PH */
16763  };
16764  
16765  
16766  static const Pool SHRAV__R__QB[2] = {
16767      { instruction         , 0                   , 0   , 32,
16768         0xfc0007ff, 0x200001cd, &SHRAV_QB         , 0,
16769         DSP_                },        /* SHRAV.QB */
16770      { instruction         , 0                   , 0   , 32,
16771         0xfc0007ff, 0x200005cd, &SHRAV_R_QB       , 0,
16772         DSP_                },        /* SHRAV_R.QB */
16773  };
16774  
16775  
16776  static const Pool SUBQ__S__PH[2] = {
16777      { instruction         , 0                   , 0   , 32,
16778         0xfc0007ff, 0x2000020d, &SUBQ_PH          , 0,
16779         DSP_                },        /* SUBQ.PH */
16780      { instruction         , 0                   , 0   , 32,
16781         0xfc0007ff, 0x2000060d, &SUBQ_S_PH        , 0,
16782         DSP_                },        /* SUBQ_S.PH */
16783  };
16784  
16785  
16786  static const Pool SUBQH__R__PH[2] = {
16787      { instruction         , 0                   , 0   , 32,
16788         0xfc0007ff, 0x2000024d, &SUBQH_PH         , 0,
16789         DSP_                },        /* SUBQH.PH */
16790      { instruction         , 0                   , 0   , 32,
16791         0xfc0007ff, 0x2000064d, &SUBQH_R_PH       , 0,
16792         DSP_                },        /* SUBQH_R.PH */
16793  };
16794  
16795  
16796  static const Pool SUBQH__R__W[2] = {
16797      { instruction         , 0                   , 0   , 32,
16798         0xfc0007ff, 0x2000028d, &SUBQH_W          , 0,
16799         DSP_                },        /* SUBQH.W */
16800      { instruction         , 0                   , 0   , 32,
16801         0xfc0007ff, 0x2000068d, &SUBQH_R_W        , 0,
16802         DSP_                },        /* SUBQH_R.W */
16803  };
16804  
16805  
16806  static const Pool SUBU__S__QB[2] = {
16807      { instruction         , 0                   , 0   , 32,
16808         0xfc0007ff, 0x200002cd, &SUBU_QB          , 0,
16809         DSP_                },        /* SUBU.QB */
16810      { instruction         , 0                   , 0   , 32,
16811         0xfc0007ff, 0x200006cd, &SUBU_S_QB        , 0,
16812         DSP_                },        /* SUBU_S.QB */
16813  };
16814  
16815  
16816  static const Pool SUBU__S__PH[2] = {
16817      { instruction         , 0                   , 0   , 32,
16818         0xfc0007ff, 0x2000030d, &SUBU_PH          , 0,
16819         DSP_                },        /* SUBU.PH */
16820      { instruction         , 0                   , 0   , 32,
16821         0xfc0007ff, 0x2000070d, &SUBU_S_PH        , 0,
16822         DSP_                },        /* SUBU_S.PH */
16823  };
16824  
16825  
16826  static const Pool SHRA__R__PH[2] = {
16827      { instruction         , 0                   , 0   , 32,
16828         0xfc0007ff, 0x20000335, &SHRA_PH          , 0,
16829         DSP_                },        /* SHRA.PH */
16830      { instruction         , 0                   , 0   , 32,
16831         0xfc0007ff, 0x20000735, &SHRA_R_PH        , 0,
16832         DSP_                },        /* SHRA_R.PH */
16833  };
16834  
16835  
16836  static const Pool SUBUH__R__QB[2] = {
16837      { instruction         , 0                   , 0   , 32,
16838         0xfc0007ff, 0x2000034d, &SUBUH_QB         , 0,
16839         DSP_                },        /* SUBUH.QB */
16840      { instruction         , 0                   , 0   , 32,
16841         0xfc0007ff, 0x2000074d, &SUBUH_R_QB       , 0,
16842         DSP_                },        /* SUBUH_R.QB */
16843  };
16844  
16845  
16846  static const Pool SHLLV__S__PH[2] = {
16847      { instruction         , 0                   , 0   , 32,
16848         0xfc0007ff, 0x2000038d, &SHLLV_PH         , 0,
16849         DSP_                },        /* SHLLV.PH */
16850      { instruction         , 0                   , 0   , 32,
16851         0xfc0007ff, 0x2000078d, &SHLLV_S_PH       , 0,
16852         DSP_                },        /* SHLLV_S.PH */
16853  };
16854  
16855  
16856  static const Pool SHLL__S__PH[4] = {
16857      { instruction         , 0                   , 0   , 32,
16858         0xfc000fff, 0x200003b5, &SHLL_PH          , 0,
16859         DSP_                },        /* SHLL.PH */
16860      { reserved_block      , 0                   , 0   , 32,
16861         0xfc000fff, 0x200007b5, 0                      , 0,
16862         0x0                 },        /* SHLL[_S].PH~*(1) */
16863      { instruction         , 0                   , 0   , 32,
16864         0xfc000fff, 0x20000bb5, &SHLL_S_PH        , 0,
16865         DSP_                },        /* SHLL_S.PH */
16866      { reserved_block      , 0                   , 0   , 32,
16867         0xfc000fff, 0x20000fb5, 0                      , 0,
16868         0x0                 },        /* SHLL[_S].PH~*(3) */
16869  };
16870  
16871  
16872  static const Pool PRECR_SRA__R__PH_W[2] = {
16873      { instruction         , 0                   , 0   , 32,
16874         0xfc0007ff, 0x200003cd, &PRECR_SRA_PH_W   , 0,
16875         DSP_                },        /* PRECR_SRA.PH.W */
16876      { instruction         , 0                   , 0   , 32,
16877         0xfc0007ff, 0x200007cd, &PRECR_SRA_R_PH_W , 0,
16878         DSP_                },        /* PRECR_SRA_R.PH.W */
16879  };
16880  
16881  
16882  static const Pool _POOL32A5[128] = {
16883      { instruction         , 0                   , 0   , 32,
16884         0xfc0003ff, 0x20000005, &CMP_EQ_PH        , 0,
16885         DSP_                },        /* CMP.EQ.PH */
16886      { pool                , ADDQ__S__PH         , 2   , 32,
16887         0xfc0003ff, 0x2000000d, 0                      , 0,
16888         0x0                 },        /* ADDQ[_S].PH */
16889      { reserved_block      , 0                   , 0   , 32,
16890         0xfc0003ff, 0x20000015, 0                      , 0,
16891         0x0                 },        /* _POOL32A5~*(2) */
16892      { instruction         , 0                   , 0   , 32,
16893         0xfc0003ff, 0x2000001d, &SHILO            , 0,
16894         DSP_                },        /* SHILO */
16895      { instruction         , 0                   , 0   , 32,
16896         0xfc0003ff, 0x20000025, &MULEQ_S_W_PHL    , 0,
16897         DSP_                },        /* MULEQ_S.W.PHL */
16898      { pool                , MUL__S__PH          , 2   , 32,
16899         0xfc0003ff, 0x2000002d, 0                      , 0,
16900         0x0                 },        /* MUL[_S].PH */
16901      { reserved_block      , 0                   , 0   , 32,
16902         0xfc0003ff, 0x20000035, 0                      , 0,
16903         0x0                 },        /* _POOL32A5~*(6) */
16904      { instruction         , 0                   , 0   , 32,
16905         0xfc0003ff, 0x2000003d, &REPL_PH          , 0,
16906         DSP_                },        /* REPL.PH */
16907      { instruction         , 0                   , 0   , 32,
16908         0xfc0003ff, 0x20000045, &CMP_LT_PH        , 0,
16909         DSP_                },        /* CMP.LT.PH */
16910      { pool                , ADDQH__R__PH        , 2   , 32,
16911         0xfc0003ff, 0x2000004d, 0                      , 0,
16912         0x0                 },        /* ADDQH[_R].PH */
16913      { reserved_block      , 0                   , 0   , 32,
16914         0xfc0003ff, 0x20000055, 0                      , 0,
16915         0x0                 },        /* _POOL32A5~*(10) */
16916      { reserved_block      , 0                   , 0   , 32,
16917         0xfc0003ff, 0x2000005d, 0                      , 0,
16918         0x0                 },        /* _POOL32A5~*(11) */
16919      { instruction         , 0                   , 0   , 32,
16920         0xfc0003ff, 0x20000065, &MULEQ_S_W_PHR    , 0,
16921         DSP_                },        /* MULEQ_S.W.PHR */
16922      { instruction         , 0                   , 0   , 32,
16923         0xfc0003ff, 0x2000006d, &PRECR_QB_PH      , 0,
16924         DSP_                },        /* PRECR.QB.PH */
16925      { reserved_block      , 0                   , 0   , 32,
16926         0xfc0003ff, 0x20000075, 0                      , 0,
16927         0x0                 },        /* _POOL32A5~*(14) */
16928      { reserved_block      , 0                   , 0   , 32,
16929         0xfc0003ff, 0x2000007d, 0                      , 0,
16930         0x0                 },        /* _POOL32A5~*(15) */
16931      { instruction         , 0                   , 0   , 32,
16932         0xfc0003ff, 0x20000085, &CMP_LE_PH        , 0,
16933         DSP_                },        /* CMP.LE.PH */
16934      { pool                , ADDQH__R__W         , 2   , 32,
16935         0xfc0003ff, 0x2000008d, 0                      , 0,
16936         0x0                 },        /* ADDQH[_R].W */
16937      { instruction         , 0                   , 0   , 32,
16938         0xfc0003ff, 0x20000095, &MULEU_S_PH_QBL   , 0,
16939         DSP_                },        /* MULEU_S.PH.QBL */
16940      { reserved_block      , 0                   , 0   , 32,
16941         0xfc0003ff, 0x2000009d, 0                      , 0,
16942         0x0                 },        /* _POOL32A5~*(19) */
16943      { reserved_block      , 0                   , 0   , 32,
16944         0xfc0003ff, 0x200000a5, 0                      , 0,
16945         0x0                 },        /* _POOL32A5~*(20) */
16946      { instruction         , 0                   , 0   , 32,
16947         0xfc0003ff, 0x200000ad, &PRECRQ_QB_PH     , 0,
16948         DSP_                },        /* PRECRQ.QB.PH */
16949      { reserved_block      , 0                   , 0   , 32,
16950         0xfc0003ff, 0x200000b5, 0                      , 0,
16951         0x0                 },        /* _POOL32A5~*(22) */
16952      { reserved_block      , 0                   , 0   , 32,
16953         0xfc0003ff, 0x200000bd, 0                      , 0,
16954         0x0                 },        /* _POOL32A5~*(23) */
16955      { instruction         , 0                   , 0   , 32,
16956         0xfc0003ff, 0x200000c5, &CMPGU_EQ_QB      , 0,
16957         DSP_                },        /* CMPGU.EQ.QB */
16958      { pool                , ADDU__S__QB         , 2   , 32,
16959         0xfc0003ff, 0x200000cd, 0                      , 0,
16960         0x0                 },        /* ADDU[_S].QB */
16961      { instruction         , 0                   , 0   , 32,
16962         0xfc0003ff, 0x200000d5, &MULEU_S_PH_QBR   , 0,
16963         DSP_                },        /* MULEU_S.PH.QBR */
16964      { reserved_block      , 0                   , 0   , 32,
16965         0xfc0003ff, 0x200000dd, 0                      , 0,
16966         0x0                 },        /* _POOL32A5~*(27) */
16967      { reserved_block      , 0                   , 0   , 32,
16968         0xfc0003ff, 0x200000e5, 0                      , 0,
16969         0x0                 },        /* _POOL32A5~*(28) */
16970      { instruction         , 0                   , 0   , 32,
16971         0xfc0003ff, 0x200000ed, &PRECRQ_PH_W      , 0,
16972         DSP_                },        /* PRECRQ.PH.W */
16973      { reserved_block      , 0                   , 0   , 32,
16974         0xfc0003ff, 0x200000f5, 0                      , 0,
16975         0x0                 },        /* _POOL32A5~*(30) */
16976      { reserved_block      , 0                   , 0   , 32,
16977         0xfc0003ff, 0x200000fd, 0                      , 0,
16978         0x0                 },        /* _POOL32A5~*(31) */
16979      { instruction         , 0                   , 0   , 32,
16980         0xfc0003ff, 0x20000105, &CMPGU_LT_QB      , 0,
16981         DSP_                },        /* CMPGU.LT.QB */
16982      { pool                , ADDU__S__PH         , 2   , 32,
16983         0xfc0003ff, 0x2000010d, 0                      , 0,
16984         0x0                 },        /* ADDU[_S].PH */
16985      { instruction         , 0                   , 0   , 32,
16986         0xfc0003ff, 0x20000115, &MULQ_RS_PH       , 0,
16987         DSP_                },        /* MULQ_RS.PH */
16988      { reserved_block      , 0                   , 0   , 32,
16989         0xfc0003ff, 0x2000011d, 0                      , 0,
16990         0x0                 },        /* _POOL32A5~*(35) */
16991      { reserved_block      , 0                   , 0   , 32,
16992         0xfc0003ff, 0x20000125, 0                      , 0,
16993         0x0                 },        /* _POOL32A5~*(36) */
16994      { instruction         , 0                   , 0   , 32,
16995         0xfc0003ff, 0x2000012d, &PRECRQ_RS_PH_W   , 0,
16996         DSP_                },        /* PRECRQ_RS.PH.W */
16997      { reserved_block      , 0                   , 0   , 32,
16998         0xfc0003ff, 0x20000135, 0                      , 0,
16999         0x0                 },        /* _POOL32A5~*(38) */
17000      { reserved_block      , 0                   , 0   , 32,
17001         0xfc0003ff, 0x2000013d, 0                      , 0,
17002         0x0                 },        /* _POOL32A5~*(39) */
17003      { instruction         , 0                   , 0   , 32,
17004         0xfc0003ff, 0x20000145, &CMPGU_LE_QB      , 0,
17005         DSP_                },        /* CMPGU.LE.QB */
17006      { pool                , ADDUH__R__QB        , 2   , 32,
17007         0xfc0003ff, 0x2000014d, 0                      , 0,
17008         0x0                 },        /* ADDUH[_R].QB */
17009      { instruction         , 0                   , 0   , 32,
17010         0xfc0003ff, 0x20000155, &MULQ_S_PH        , 0,
17011         DSP_                },        /* MULQ_S.PH */
17012      { reserved_block      , 0                   , 0   , 32,
17013         0xfc0003ff, 0x2000015d, 0                      , 0,
17014         0x0                 },        /* _POOL32A5~*(43) */
17015      { reserved_block      , 0                   , 0   , 32,
17016         0xfc0003ff, 0x20000165, 0                      , 0,
17017         0x0                 },        /* _POOL32A5~*(44) */
17018      { instruction         , 0                   , 0   , 32,
17019         0xfc0003ff, 0x2000016d, &PRECRQU_S_QB_PH  , 0,
17020         DSP_                },        /* PRECRQU_S.QB.PH */
17021      { reserved_block      , 0                   , 0   , 32,
17022         0xfc0003ff, 0x20000175, 0                      , 0,
17023         0x0                 },        /* _POOL32A5~*(46) */
17024      { reserved_block      , 0                   , 0   , 32,
17025         0xfc0003ff, 0x2000017d, 0                      , 0,
17026         0x0                 },        /* _POOL32A5~*(47) */
17027      { instruction         , 0                   , 0   , 32,
17028         0xfc0003ff, 0x20000185, &CMPGDU_EQ_QB     , 0,
17029         DSP_                },        /* CMPGDU.EQ.QB */
17030      { pool                , SHRAV__R__PH        , 2   , 32,
17031         0xfc0003ff, 0x2000018d, 0                      , 0,
17032         0x0                 },        /* SHRAV[_R].PH */
17033      { instruction         , 0                   , 0   , 32,
17034         0xfc0003ff, 0x20000195, &MULQ_RS_W        , 0,
17035         DSP_                },        /* MULQ_RS.W */
17036      { reserved_block      , 0                   , 0   , 32,
17037         0xfc0003ff, 0x2000019d, 0                      , 0,
17038         0x0                 },        /* _POOL32A5~*(51) */
17039      { reserved_block      , 0                   , 0   , 32,
17040         0xfc0003ff, 0x200001a5, 0                      , 0,
17041         0x0                 },        /* _POOL32A5~*(52) */
17042      { instruction         , 0                   , 0   , 32,
17043         0xfc0003ff, 0x200001ad, &PACKRL_PH        , 0,
17044         DSP_                },        /* PACKRL.PH */
17045      { reserved_block      , 0                   , 0   , 32,
17046         0xfc0003ff, 0x200001b5, 0                      , 0,
17047         0x0                 },        /* _POOL32A5~*(54) */
17048      { reserved_block      , 0                   , 0   , 32,
17049         0xfc0003ff, 0x200001bd, 0                      , 0,
17050         0x0                 },        /* _POOL32A5~*(55) */
17051      { instruction         , 0                   , 0   , 32,
17052         0xfc0003ff, 0x200001c5, &CMPGDU_LT_QB     , 0,
17053         DSP_                },        /* CMPGDU.LT.QB */
17054      { pool                , SHRAV__R__QB        , 2   , 32,
17055         0xfc0003ff, 0x200001cd, 0                      , 0,
17056         0x0                 },        /* SHRAV[_R].QB */
17057      { instruction         , 0                   , 0   , 32,
17058         0xfc0003ff, 0x200001d5, &MULQ_S_W         , 0,
17059         DSP_                },        /* MULQ_S.W */
17060      { reserved_block      , 0                   , 0   , 32,
17061         0xfc0003ff, 0x200001dd, 0                      , 0,
17062         0x0                 },        /* _POOL32A5~*(59) */
17063      { reserved_block      , 0                   , 0   , 32,
17064         0xfc0003ff, 0x200001e5, 0                      , 0,
17065         0x0                 },        /* _POOL32A5~*(60) */
17066      { instruction         , 0                   , 0   , 32,
17067         0xfc0003ff, 0x200001ed, &PICK_QB          , 0,
17068         DSP_                },        /* PICK.QB */
17069      { reserved_block      , 0                   , 0   , 32,
17070         0xfc0003ff, 0x200001f5, 0                      , 0,
17071         0x0                 },        /* _POOL32A5~*(62) */
17072      { reserved_block      , 0                   , 0   , 32,
17073         0xfc0003ff, 0x200001fd, 0                      , 0,
17074         0x0                 },        /* _POOL32A5~*(63) */
17075      { instruction         , 0                   , 0   , 32,
17076         0xfc0003ff, 0x20000205, &CMPGDU_LE_QB     , 0,
17077         DSP_                },        /* CMPGDU.LE.QB */
17078      { pool                , SUBQ__S__PH         , 2   , 32,
17079         0xfc0003ff, 0x2000020d, 0                      , 0,
17080         0x0                 },        /* SUBQ[_S].PH */
17081      { instruction         , 0                   , 0   , 32,
17082         0xfc0003ff, 0x20000215, &APPEND           , 0,
17083         DSP_                },        /* APPEND */
17084      { reserved_block      , 0                   , 0   , 32,
17085         0xfc0003ff, 0x2000021d, 0                      , 0,
17086         0x0                 },        /* _POOL32A5~*(67) */
17087      { reserved_block      , 0                   , 0   , 32,
17088         0xfc0003ff, 0x20000225, 0                      , 0,
17089         0x0                 },        /* _POOL32A5~*(68) */
17090      { instruction         , 0                   , 0   , 32,
17091         0xfc0003ff, 0x2000022d, &PICK_PH          , 0,
17092         DSP_                },        /* PICK.PH */
17093      { reserved_block      , 0                   , 0   , 32,
17094         0xfc0003ff, 0x20000235, 0                      , 0,
17095         0x0                 },        /* _POOL32A5~*(70) */
17096      { reserved_block      , 0                   , 0   , 32,
17097         0xfc0003ff, 0x2000023d, 0                      , 0,
17098         0x0                 },        /* _POOL32A5~*(71) */
17099      { instruction         , 0                   , 0   , 32,
17100         0xfc0003ff, 0x20000245, &CMPU_EQ_QB       , 0,
17101         DSP_                },        /* CMPU.EQ.QB */
17102      { pool                , SUBQH__R__PH        , 2   , 32,
17103         0xfc0003ff, 0x2000024d, 0                      , 0,
17104         0x0                 },        /* SUBQH[_R].PH */
17105      { instruction         , 0                   , 0   , 32,
17106         0xfc0003ff, 0x20000255, &PREPEND          , 0,
17107         DSP_                },        /* PREPEND */
17108      { reserved_block      , 0                   , 0   , 32,
17109         0xfc0003ff, 0x2000025d, 0                      , 0,
17110         0x0                 },        /* _POOL32A5~*(75) */
17111      { reserved_block      , 0                   , 0   , 32,
17112         0xfc0003ff, 0x20000265, 0                      , 0,
17113         0x0                 },        /* _POOL32A5~*(76) */
17114      { reserved_block      , 0                   , 0   , 32,
17115         0xfc0003ff, 0x2000026d, 0                      , 0,
17116         0x0                 },        /* _POOL32A5~*(77) */
17117      { reserved_block      , 0                   , 0   , 32,
17118         0xfc0003ff, 0x20000275, 0                      , 0,
17119         0x0                 },        /* _POOL32A5~*(78) */
17120      { reserved_block      , 0                   , 0   , 32,
17121         0xfc0003ff, 0x2000027d, 0                      , 0,
17122         0x0                 },        /* _POOL32A5~*(79) */
17123      { instruction         , 0                   , 0   , 32,
17124         0xfc0003ff, 0x20000285, &CMPU_LT_QB       , 0,
17125         DSP_                },        /* CMPU.LT.QB */
17126      { pool                , SUBQH__R__W         , 2   , 32,
17127         0xfc0003ff, 0x2000028d, 0                      , 0,
17128         0x0                 },        /* SUBQH[_R].W */
17129      { instruction         , 0                   , 0   , 32,
17130         0xfc0003ff, 0x20000295, &MODSUB           , 0,
17131         DSP_                },        /* MODSUB */
17132      { reserved_block      , 0                   , 0   , 32,
17133         0xfc0003ff, 0x2000029d, 0                      , 0,
17134         0x0                 },        /* _POOL32A5~*(83) */
17135      { reserved_block      , 0                   , 0   , 32,
17136         0xfc0003ff, 0x200002a5, 0                      , 0,
17137         0x0                 },        /* _POOL32A5~*(84) */
17138      { reserved_block      , 0                   , 0   , 32,
17139         0xfc0003ff, 0x200002ad, 0                      , 0,
17140         0x0                 },        /* _POOL32A5~*(85) */
17141      { reserved_block      , 0                   , 0   , 32,
17142         0xfc0003ff, 0x200002b5, 0                      , 0,
17143         0x0                 },        /* _POOL32A5~*(86) */
17144      { reserved_block      , 0                   , 0   , 32,
17145         0xfc0003ff, 0x200002bd, 0                      , 0,
17146         0x0                 },        /* _POOL32A5~*(87) */
17147      { instruction         , 0                   , 0   , 32,
17148         0xfc0003ff, 0x200002c5, &CMPU_LE_QB       , 0,
17149         DSP_                },        /* CMPU.LE.QB */
17150      { pool                , SUBU__S__QB         , 2   , 32,
17151         0xfc0003ff, 0x200002cd, 0                      , 0,
17152         0x0                 },        /* SUBU[_S].QB */
17153      { instruction         , 0                   , 0   , 32,
17154         0xfc0003ff, 0x200002d5, &SHRAV_R_W        , 0,
17155         DSP_                },        /* SHRAV_R.W */
17156      { reserved_block      , 0                   , 0   , 32,
17157         0xfc0003ff, 0x200002dd, 0                      , 0,
17158         0x0                 },        /* _POOL32A5~*(91) */
17159      { reserved_block      , 0                   , 0   , 32,
17160         0xfc0003ff, 0x200002e5, 0                      , 0,
17161         0x0                 },        /* _POOL32A5~*(92) */
17162      { reserved_block      , 0                   , 0   , 32,
17163         0xfc0003ff, 0x200002ed, 0                      , 0,
17164         0x0                 },        /* _POOL32A5~*(93) */
17165      { instruction         , 0                   , 0   , 32,
17166         0xfc0003ff, 0x200002f5, &SHRA_R_W         , 0,
17167         DSP_                },        /* SHRA_R.W */
17168      { reserved_block      , 0                   , 0   , 32,
17169         0xfc0003ff, 0x200002fd, 0                      , 0,
17170         0x0                 },        /* _POOL32A5~*(95) */
17171      { instruction         , 0                   , 0   , 32,
17172         0xfc0003ff, 0x20000305, &ADDQ_S_W         , 0,
17173         DSP_                },        /* ADDQ_S.W */
17174      { pool                , SUBU__S__PH         , 2   , 32,
17175         0xfc0003ff, 0x2000030d, 0                      , 0,
17176         0x0                 },        /* SUBU[_S].PH */
17177      { instruction         , 0                   , 0   , 32,
17178         0xfc0003ff, 0x20000315, &SHRLV_PH         , 0,
17179         DSP_                },        /* SHRLV.PH */
17180      { reserved_block      , 0                   , 0   , 32,
17181         0xfc0003ff, 0x2000031d, 0                      , 0,
17182         0x0                 },        /* _POOL32A5~*(99) */
17183      { reserved_block      , 0                   , 0   , 32,
17184         0xfc0003ff, 0x20000325, 0                      , 0,
17185         0x0                 },        /* _POOL32A5~*(100) */
17186      { reserved_block      , 0                   , 0   , 32,
17187         0xfc0003ff, 0x2000032d, 0                      , 0,
17188         0x0                 },        /* _POOL32A5~*(101) */
17189      { pool                , SHRA__R__PH         , 2   , 32,
17190         0xfc0003ff, 0x20000335, 0                      , 0,
17191         0x0                 },        /* SHRA[_R].PH */
17192      { reserved_block      , 0                   , 0   , 32,
17193         0xfc0003ff, 0x2000033d, 0                      , 0,
17194         0x0                 },        /* _POOL32A5~*(103) */
17195      { instruction         , 0                   , 0   , 32,
17196         0xfc0003ff, 0x20000345, &SUBQ_S_W         , 0,
17197         DSP_                },        /* SUBQ_S.W */
17198      { pool                , SUBUH__R__QB        , 2   , 32,
17199         0xfc0003ff, 0x2000034d, 0                      , 0,
17200         0x0                 },        /* SUBUH[_R].QB */
17201      { instruction         , 0                   , 0   , 32,
17202         0xfc0003ff, 0x20000355, &SHRLV_QB         , 0,
17203         DSP_                },        /* SHRLV.QB */
17204      { reserved_block      , 0                   , 0   , 32,
17205         0xfc0003ff, 0x2000035d, 0                      , 0,
17206         0x0                 },        /* _POOL32A5~*(107) */
17207      { reserved_block      , 0                   , 0   , 32,
17208         0xfc0003ff, 0x20000365, 0                      , 0,
17209         0x0                 },        /* _POOL32A5~*(108) */
17210      { reserved_block      , 0                   , 0   , 32,
17211         0xfc0003ff, 0x2000036d, 0                      , 0,
17212         0x0                 },        /* _POOL32A5~*(109) */
17213      { reserved_block      , 0                   , 0   , 32,
17214         0xfc0003ff, 0x20000375, 0                      , 0,
17215         0x0                 },        /* _POOL32A5~*(110) */
17216      { reserved_block      , 0                   , 0   , 32,
17217         0xfc0003ff, 0x2000037d, 0                      , 0,
17218         0x0                 },        /* _POOL32A5~*(111) */
17219      { instruction         , 0                   , 0   , 32,
17220         0xfc0003ff, 0x20000385, &ADDSC            , 0,
17221         DSP_                },        /* ADDSC */
17222      { pool                , SHLLV__S__PH        , 2   , 32,
17223         0xfc0003ff, 0x2000038d, 0                      , 0,
17224         0x0                 },        /* SHLLV[_S].PH */
17225      { instruction         , 0                   , 0   , 32,
17226         0xfc0003ff, 0x20000395, &SHLLV_QB         , 0,
17227         DSP_                },        /* SHLLV.QB */
17228      { reserved_block      , 0                   , 0   , 32,
17229         0xfc0003ff, 0x2000039d, 0                      , 0,
17230         0x0                 },        /* _POOL32A5~*(115) */
17231      { reserved_block      , 0                   , 0   , 32,
17232         0xfc0003ff, 0x200003a5, 0                      , 0,
17233         0x0                 },        /* _POOL32A5~*(116) */
17234      { reserved_block      , 0                   , 0   , 32,
17235         0xfc0003ff, 0x200003ad, 0                      , 0,
17236         0x0                 },        /* _POOL32A5~*(117) */
17237      { pool                , SHLL__S__PH         , 4   , 32,
17238         0xfc0003ff, 0x200003b5, 0                      , 0,
17239         0x0                 },        /* SHLL[_S].PH */
17240      { reserved_block      , 0                   , 0   , 32,
17241         0xfc0003ff, 0x200003bd, 0                      , 0,
17242         0x0                 },        /* _POOL32A5~*(119) */
17243      { instruction         , 0                   , 0   , 32,
17244         0xfc0003ff, 0x200003c5, &ADDWC            , 0,
17245         DSP_                },        /* ADDWC */
17246      { pool                , PRECR_SRA__R__PH_W  , 2   , 32,
17247         0xfc0003ff, 0x200003cd, 0                      , 0,
17248         0x0                 },        /* PRECR_SRA[_R].PH.W */
17249      { instruction         , 0                   , 0   , 32,
17250         0xfc0003ff, 0x200003d5, &SHLLV_S_W        , 0,
17251         DSP_                },        /* SHLLV_S.W */
17252      { reserved_block      , 0                   , 0   , 32,
17253         0xfc0003ff, 0x200003dd, 0                      , 0,
17254         0x0                 },        /* _POOL32A5~*(123) */
17255      { reserved_block      , 0                   , 0   , 32,
17256         0xfc0003ff, 0x200003e5, 0                      , 0,
17257         0x0                 },        /* _POOL32A5~*(124) */
17258      { reserved_block      , 0                   , 0   , 32,
17259         0xfc0003ff, 0x200003ed, 0                      , 0,
17260         0x0                 },        /* _POOL32A5~*(125) */
17261      { instruction         , 0                   , 0   , 32,
17262         0xfc0003ff, 0x200003f5, &SHLL_S_W         , 0,
17263         DSP_                },        /* SHLL_S.W */
17264      { reserved_block      , 0                   , 0   , 32,
17265         0xfc0003ff, 0x200003fd, 0                      , 0,
17266         0x0                 },        /* _POOL32A5~*(127) */
17267  };
17268  
17269  
17270  static const Pool PP_LSX[16] = {
17271      { instruction         , 0                   , 0   , 32,
17272         0xfc0007ff, 0x20000007, &LBX              , 0,
17273         0x0                 },        /* LBX */
17274      { instruction         , 0                   , 0   , 32,
17275         0xfc0007ff, 0x20000087, &SBX              , 0,
17276         XMMS_               },        /* SBX */
17277      { instruction         , 0                   , 0   , 32,
17278         0xfc0007ff, 0x20000107, &LBUX             , 0,
17279         0x0                 },        /* LBUX */
17280      { reserved_block      , 0                   , 0   , 32,
17281         0xfc0007ff, 0x20000187, 0                      , 0,
17282         0x0                 },        /* PP.LSX~*(3) */
17283      { instruction         , 0                   , 0   , 32,
17284         0xfc0007ff, 0x20000207, &LHX              , 0,
17285         0x0                 },        /* LHX */
17286      { instruction         , 0                   , 0   , 32,
17287         0xfc0007ff, 0x20000287, &SHX              , 0,
17288         XMMS_               },        /* SHX */
17289      { instruction         , 0                   , 0   , 32,
17290         0xfc0007ff, 0x20000307, &LHUX             , 0,
17291         0x0                 },        /* LHUX */
17292      { instruction         , 0                   , 0   , 32,
17293         0xfc0007ff, 0x20000387, &LWUX             , 0,
17294         MIPS64_             },        /* LWUX */
17295      { instruction         , 0                   , 0   , 32,
17296         0xfc0007ff, 0x20000407, &LWX              , 0,
17297         0x0                 },        /* LWX */
17298      { instruction         , 0                   , 0   , 32,
17299         0xfc0007ff, 0x20000487, &SWX              , 0,
17300         XMMS_               },        /* SWX */
17301      { instruction         , 0                   , 0   , 32,
17302         0xfc0007ff, 0x20000507, &LWC1X            , 0,
17303         CP1_                },        /* LWC1X */
17304      { instruction         , 0                   , 0   , 32,
17305         0xfc0007ff, 0x20000587, &SWC1X            , 0,
17306         CP1_                },        /* SWC1X */
17307      { instruction         , 0                   , 0   , 32,
17308         0xfc0007ff, 0x20000607, &LDX              , 0,
17309         MIPS64_             },        /* LDX */
17310      { instruction         , 0                   , 0   , 32,
17311         0xfc0007ff, 0x20000687, &SDX              , 0,
17312         MIPS64_             },        /* SDX */
17313      { instruction         , 0                   , 0   , 32,
17314         0xfc0007ff, 0x20000707, &LDC1X            , 0,
17315         CP1_                },        /* LDC1X */
17316      { instruction         , 0                   , 0   , 32,
17317         0xfc0007ff, 0x20000787, &SDC1X            , 0,
17318         CP1_                },        /* SDC1X */
17319  };
17320  
17321  
17322  static const Pool PP_LSXS[16] = {
17323      { reserved_block      , 0                   , 0   , 32,
17324         0xfc0007ff, 0x20000047, 0                      , 0,
17325         0x0                 },        /* PP.LSXS~*(0) */
17326      { reserved_block      , 0                   , 0   , 32,
17327         0xfc0007ff, 0x200000c7, 0                      , 0,
17328         0x0                 },        /* PP.LSXS~*(1) */
17329      { reserved_block      , 0                   , 0   , 32,
17330         0xfc0007ff, 0x20000147, 0                      , 0,
17331         0x0                 },        /* PP.LSXS~*(2) */
17332      { reserved_block      , 0                   , 0   , 32,
17333         0xfc0007ff, 0x200001c7, 0                      , 0,
17334         0x0                 },        /* PP.LSXS~*(3) */
17335      { instruction         , 0                   , 0   , 32,
17336         0xfc0007ff, 0x20000247, &LHXS             , 0,
17337         0x0                 },        /* LHXS */
17338      { instruction         , 0                   , 0   , 32,
17339         0xfc0007ff, 0x200002c7, &SHXS             , 0,
17340         XMMS_               },        /* SHXS */
17341      { instruction         , 0                   , 0   , 32,
17342         0xfc0007ff, 0x20000347, &LHUXS            , 0,
17343         0x0                 },        /* LHUXS */
17344      { instruction         , 0                   , 0   , 32,
17345         0xfc0007ff, 0x200003c7, &LWUXS            , 0,
17346         MIPS64_             },        /* LWUXS */
17347      { instruction         , 0                   , 0   , 32,
17348         0xfc0007ff, 0x20000447, &LWXS_32_         , 0,
17349         0x0                 },        /* LWXS[32] */
17350      { instruction         , 0                   , 0   , 32,
17351         0xfc0007ff, 0x200004c7, &SWXS             , 0,
17352         XMMS_               },        /* SWXS */
17353      { instruction         , 0                   , 0   , 32,
17354         0xfc0007ff, 0x20000547, &LWC1XS           , 0,
17355         CP1_                },        /* LWC1XS */
17356      { instruction         , 0                   , 0   , 32,
17357         0xfc0007ff, 0x200005c7, &SWC1XS           , 0,
17358         CP1_                },        /* SWC1XS */
17359      { instruction         , 0                   , 0   , 32,
17360         0xfc0007ff, 0x20000647, &LDXS             , 0,
17361         MIPS64_             },        /* LDXS */
17362      { instruction         , 0                   , 0   , 32,
17363         0xfc0007ff, 0x200006c7, &SDXS             , 0,
17364         MIPS64_             },        /* SDXS */
17365      { instruction         , 0                   , 0   , 32,
17366         0xfc0007ff, 0x20000747, &LDC1XS           , 0,
17367         CP1_                },        /* LDC1XS */
17368      { instruction         , 0                   , 0   , 32,
17369         0xfc0007ff, 0x200007c7, &SDC1XS           , 0,
17370         CP1_                },        /* SDC1XS */
17371  };
17372  
17373  
17374  static const Pool P_LSX[2] = {
17375      { pool                , PP_LSX              , 16  , 32,
17376         0xfc00007f, 0x20000007, 0                      , 0,
17377         0x0                 },        /* PP.LSX */
17378      { pool                , PP_LSXS             , 16  , 32,
17379         0xfc00007f, 0x20000047, 0                      , 0,
17380         0x0                 },        /* PP.LSXS */
17381  };
17382  
17383  
17384  static const Pool POOL32Axf_1_0[4] = {
17385      { instruction         , 0                   , 0   , 32,
17386         0xfc003fff, 0x2000007f, &MFHI_DSP_        , 0,
17387         DSP_                },        /* MFHI[DSP] */
17388      { instruction         , 0                   , 0   , 32,
17389         0xfc003fff, 0x2000107f, &MFLO_DSP_        , 0,
17390         DSP_                },        /* MFLO[DSP] */
17391      { instruction         , 0                   , 0   , 32,
17392         0xfc003fff, 0x2000207f, &MTHI_DSP_        , 0,
17393         DSP_                },        /* MTHI[DSP] */
17394      { instruction         , 0                   , 0   , 32,
17395         0xfc003fff, 0x2000307f, &MTLO_DSP_        , 0,
17396         DSP_                },        /* MTLO[DSP] */
17397  };
17398  
17399  
17400  static const Pool POOL32Axf_1_1[4] = {
17401      { instruction         , 0                   , 0   , 32,
17402         0xfc003fff, 0x2000027f, &MTHLIP           , 0,
17403         DSP_                },        /* MTHLIP */
17404      { instruction         , 0                   , 0   , 32,
17405         0xfc003fff, 0x2000127f, &SHILOV           , 0,
17406         DSP_                },        /* SHILOV */
17407      { reserved_block      , 0                   , 0   , 32,
17408         0xfc003fff, 0x2000227f, 0                      , 0,
17409         0x0                 },        /* POOL32Axf_1_1~*(2) */
17410      { reserved_block      , 0                   , 0   , 32,
17411         0xfc003fff, 0x2000327f, 0                      , 0,
17412         0x0                 },        /* POOL32Axf_1_1~*(3) */
17413  };
17414  
17415  
17416  static const Pool POOL32Axf_1_3[4] = {
17417      { instruction         , 0                   , 0   , 32,
17418         0xfc003fff, 0x2000067f, &RDDSP            , 0,
17419         DSP_                },        /* RDDSP */
17420      { instruction         , 0                   , 0   , 32,
17421         0xfc003fff, 0x2000167f, &WRDSP            , 0,
17422         DSP_                },        /* WRDSP */
17423      { instruction         , 0                   , 0   , 32,
17424         0xfc003fff, 0x2000267f, &EXTP             , 0,
17425         DSP_                },        /* EXTP */
17426      { instruction         , 0                   , 0   , 32,
17427         0xfc003fff, 0x2000367f, &EXTPDP           , 0,
17428         DSP_                },        /* EXTPDP */
17429  };
17430  
17431  
17432  static const Pool POOL32Axf_1_4[2] = {
17433      { instruction         , 0                   , 0   , 32,
17434         0xfc001fff, 0x2000087f, &SHLL_QB          , 0,
17435         DSP_                },        /* SHLL.QB */
17436      { instruction         , 0                   , 0   , 32,
17437         0xfc001fff, 0x2000187f, &SHRL_QB          , 0,
17438         DSP_                },        /* SHRL.QB */
17439  };
17440  
17441  
17442  static const Pool MAQ_S_A__W_PHR[2] = {
17443      { instruction         , 0                   , 0   , 32,
17444         0xfc003fff, 0x20000a7f, &MAQ_S_W_PHR      , 0,
17445         DSP_                },        /* MAQ_S.W.PHR */
17446      { instruction         , 0                   , 0   , 32,
17447         0xfc003fff, 0x20002a7f, &MAQ_SA_W_PHR     , 0,
17448         DSP_                },        /* MAQ_SA.W.PHR */
17449  };
17450  
17451  
17452  static const Pool MAQ_S_A__W_PHL[2] = {
17453      { instruction         , 0                   , 0   , 32,
17454         0xfc003fff, 0x20001a7f, &MAQ_S_W_PHL      , 0,
17455         DSP_                },        /* MAQ_S.W.PHL */
17456      { instruction         , 0                   , 0   , 32,
17457         0xfc003fff, 0x20003a7f, &MAQ_SA_W_PHL     , 0,
17458         DSP_                },        /* MAQ_SA.W.PHL */
17459  };
17460  
17461  
17462  static const Pool POOL32Axf_1_5[2] = {
17463      { pool                , MAQ_S_A__W_PHR      , 2   , 32,
17464         0xfc001fff, 0x20000a7f, 0                      , 0,
17465         0x0                 },        /* MAQ_S[A].W.PHR */
17466      { pool                , MAQ_S_A__W_PHL      , 2   , 32,
17467         0xfc001fff, 0x20001a7f, 0                      , 0,
17468         0x0                 },        /* MAQ_S[A].W.PHL */
17469  };
17470  
17471  
17472  static const Pool POOL32Axf_1_7[4] = {
17473      { instruction         , 0                   , 0   , 32,
17474         0xfc003fff, 0x20000e7f, &EXTR_W           , 0,
17475         DSP_                },        /* EXTR.W */
17476      { instruction         , 0                   , 0   , 32,
17477         0xfc003fff, 0x20001e7f, &EXTR_R_W         , 0,
17478         DSP_                },        /* EXTR_R.W */
17479      { instruction         , 0                   , 0   , 32,
17480         0xfc003fff, 0x20002e7f, &EXTR_RS_W        , 0,
17481         DSP_                },        /* EXTR_RS.W */
17482      { instruction         , 0                   , 0   , 32,
17483         0xfc003fff, 0x20003e7f, &EXTR_S_H         , 0,
17484         DSP_                },        /* EXTR_S.H */
17485  };
17486  
17487  
17488  static const Pool POOL32Axf_1[8] = {
17489      { pool                , POOL32Axf_1_0       , 4   , 32,
17490         0xfc000fff, 0x2000007f, 0                      , 0,
17491         0x0                 },        /* POOL32Axf_1_0 */
17492      { pool                , POOL32Axf_1_1       , 4   , 32,
17493         0xfc000fff, 0x2000027f, 0                      , 0,
17494         0x0                 },        /* POOL32Axf_1_1 */
17495      { reserved_block      , 0                   , 0   , 32,
17496         0xfc000fff, 0x2000047f, 0                      , 0,
17497         0x0                 },        /* POOL32Axf_1~*(2) */
17498      { pool                , POOL32Axf_1_3       , 4   , 32,
17499         0xfc000fff, 0x2000067f, 0                      , 0,
17500         0x0                 },        /* POOL32Axf_1_3 */
17501      { pool                , POOL32Axf_1_4       , 2   , 32,
17502         0xfc000fff, 0x2000087f, 0                      , 0,
17503         0x0                 },        /* POOL32Axf_1_4 */
17504      { pool                , POOL32Axf_1_5       , 2   , 32,
17505         0xfc000fff, 0x20000a7f, 0                      , 0,
17506         0x0                 },        /* POOL32Axf_1_5 */
17507      { reserved_block      , 0                   , 0   , 32,
17508         0xfc000fff, 0x20000c7f, 0                      , 0,
17509         0x0                 },        /* POOL32Axf_1~*(6) */
17510      { pool                , POOL32Axf_1_7       , 4   , 32,
17511         0xfc000fff, 0x20000e7f, 0                      , 0,
17512         0x0                 },        /* POOL32Axf_1_7 */
17513  };
17514  
17515  
17516  static const Pool POOL32Axf_2_DSP__0_7[8] = {
17517      { instruction         , 0                   , 0   , 32,
17518         0xfc003fff, 0x200000bf, &DPA_W_PH         , 0,
17519         DSP_                },        /* DPA.W.PH */
17520      { instruction         , 0                   , 0   , 32,
17521         0xfc003fff, 0x200002bf, &DPAQ_S_W_PH      , 0,
17522         DSP_                },        /* DPAQ_S.W.PH */
17523      { instruction         , 0                   , 0   , 32,
17524         0xfc003fff, 0x200004bf, &DPS_W_PH         , 0,
17525         DSP_                },        /* DPS.W.PH */
17526      { instruction         , 0                   , 0   , 32,
17527         0xfc003fff, 0x200006bf, &DPSQ_S_W_PH      , 0,
17528         DSP_                },        /* DPSQ_S.W.PH */
17529      { reserved_block      , 0                   , 0   , 32,
17530         0xfc003fff, 0x200008bf, 0                      , 0,
17531         0x0                 },        /* POOL32Axf_2(DSP)_0_7~*(4) */
17532      { instruction         , 0                   , 0   , 32,
17533         0xfc003fff, 0x20000abf, &MADD_DSP_        , 0,
17534         DSP_                },        /* MADD[DSP] */
17535      { instruction         , 0                   , 0   , 32,
17536         0xfc003fff, 0x20000cbf, &MULT_DSP_        , 0,
17537         DSP_                },        /* MULT[DSP] */
17538      { instruction         , 0                   , 0   , 32,
17539         0xfc003fff, 0x20000ebf, &EXTRV_W          , 0,
17540         DSP_                },        /* EXTRV.W */
17541  };
17542  
17543  
17544  static const Pool POOL32Axf_2_DSP__8_15[8] = {
17545      { instruction         , 0                   , 0   , 32,
17546         0xfc003fff, 0x200010bf, &DPAX_W_PH        , 0,
17547         DSP_                },        /* DPAX.W.PH */
17548      { instruction         , 0                   , 0   , 32,
17549         0xfc003fff, 0x200012bf, &DPAQ_SA_L_W      , 0,
17550         DSP_                },        /* DPAQ_SA.L.W */
17551      { instruction         , 0                   , 0   , 32,
17552         0xfc003fff, 0x200014bf, &DPSX_W_PH        , 0,
17553         DSP_                },        /* DPSX.W.PH */
17554      { instruction         , 0                   , 0   , 32,
17555         0xfc003fff, 0x200016bf, &DPSQ_SA_L_W      , 0,
17556         DSP_                },        /* DPSQ_SA.L.W */
17557      { reserved_block      , 0                   , 0   , 32,
17558         0xfc003fff, 0x200018bf, 0                      , 0,
17559         0x0                 },        /* POOL32Axf_2(DSP)_8_15~*(4) */
17560      { instruction         , 0                   , 0   , 32,
17561         0xfc003fff, 0x20001abf, &MADDU_DSP_       , 0,
17562         DSP_                },        /* MADDU[DSP] */
17563      { instruction         , 0                   , 0   , 32,
17564         0xfc003fff, 0x20001cbf, &MULTU_DSP_       , 0,
17565         DSP_                },        /* MULTU[DSP] */
17566      { instruction         , 0                   , 0   , 32,
17567         0xfc003fff, 0x20001ebf, &EXTRV_R_W        , 0,
17568         DSP_                },        /* EXTRV_R.W */
17569  };
17570  
17571  
17572  static const Pool POOL32Axf_2_DSP__16_23[8] = {
17573      { instruction         , 0                   , 0   , 32,
17574         0xfc003fff, 0x200020bf, &DPAU_H_QBL       , 0,
17575         DSP_                },        /* DPAU.H.QBL */
17576      { instruction         , 0                   , 0   , 32,
17577         0xfc003fff, 0x200022bf, &DPAQX_S_W_PH     , 0,
17578         DSP_                },        /* DPAQX_S.W.PH */
17579      { instruction         , 0                   , 0   , 32,
17580         0xfc003fff, 0x200024bf, &DPSU_H_QBL       , 0,
17581         DSP_                },        /* DPSU.H.QBL */
17582      { instruction         , 0                   , 0   , 32,
17583         0xfc003fff, 0x200026bf, &DPSQX_S_W_PH     , 0,
17584         DSP_                },        /* DPSQX_S.W.PH */
17585      { instruction         , 0                   , 0   , 32,
17586         0xfc003fff, 0x200028bf, &EXTPV            , 0,
17587         DSP_                },        /* EXTPV */
17588      { instruction         , 0                   , 0   , 32,
17589         0xfc003fff, 0x20002abf, &MSUB_DSP_        , 0,
17590         DSP_                },        /* MSUB[DSP] */
17591      { instruction         , 0                   , 0   , 32,
17592         0xfc003fff, 0x20002cbf, &MULSA_W_PH       , 0,
17593         DSP_                },        /* MULSA.W.PH */
17594      { instruction         , 0                   , 0   , 32,
17595         0xfc003fff, 0x20002ebf, &EXTRV_RS_W       , 0,
17596         DSP_                },        /* EXTRV_RS.W */
17597  };
17598  
17599  
17600  static const Pool POOL32Axf_2_DSP__24_31[8] = {
17601      { instruction         , 0                   , 0   , 32,
17602         0xfc003fff, 0x200030bf, &DPAU_H_QBR       , 0,
17603         DSP_                },        /* DPAU.H.QBR */
17604      { instruction         , 0                   , 0   , 32,
17605         0xfc003fff, 0x200032bf, &DPAQX_SA_W_PH    , 0,
17606         DSP_                },        /* DPAQX_SA.W.PH */
17607      { instruction         , 0                   , 0   , 32,
17608         0xfc003fff, 0x200034bf, &DPSU_H_QBR       , 0,
17609         DSP_                },        /* DPSU.H.QBR */
17610      { instruction         , 0                   , 0   , 32,
17611         0xfc003fff, 0x200036bf, &DPSQX_SA_W_PH    , 0,
17612         DSP_                },        /* DPSQX_SA.W.PH */
17613      { instruction         , 0                   , 0   , 32,
17614         0xfc003fff, 0x200038bf, &EXTPDPV          , 0,
17615         DSP_                },        /* EXTPDPV */
17616      { instruction         , 0                   , 0   , 32,
17617         0xfc003fff, 0x20003abf, &MSUBU_DSP_       , 0,
17618         DSP_                },        /* MSUBU[DSP] */
17619      { instruction         , 0                   , 0   , 32,
17620         0xfc003fff, 0x20003cbf, &MULSAQ_S_W_PH    , 0,
17621         DSP_                },        /* MULSAQ_S.W.PH */
17622      { instruction         , 0                   , 0   , 32,
17623         0xfc003fff, 0x20003ebf, &EXTRV_S_H        , 0,
17624         DSP_                },        /* EXTRV_S.H */
17625  };
17626  
17627  
17628  static const Pool POOL32Axf_2[4] = {
17629      { pool                , POOL32Axf_2_DSP__0_7, 8   , 32,
17630         0xfc0031ff, 0x200000bf, 0                      , 0,
17631         0x0                 },        /* POOL32Axf_2(DSP)_0_7 */
17632      { pool                , POOL32Axf_2_DSP__8_15, 8   , 32,
17633         0xfc0031ff, 0x200010bf, 0                      , 0,
17634         0x0                 },        /* POOL32Axf_2(DSP)_8_15 */
17635      { pool                , POOL32Axf_2_DSP__16_23, 8   , 32,
17636         0xfc0031ff, 0x200020bf, 0                      , 0,
17637         0x0                 },        /* POOL32Axf_2(DSP)_16_23 */
17638      { pool                , POOL32Axf_2_DSP__24_31, 8   , 32,
17639         0xfc0031ff, 0x200030bf, 0                      , 0,
17640         0x0                 },        /* POOL32Axf_2(DSP)_24_31 */
17641  };
17642  
17643  
17644  static const Pool POOL32Axf_4[128] = {
17645      { instruction         , 0                   , 0   , 32,
17646         0xfc00ffff, 0x2000013f, &ABSQ_S_QB        , 0,
17647         DSP_                },        /* ABSQ_S.QB */
17648      { instruction         , 0                   , 0   , 32,
17649         0xfc00ffff, 0x2000033f, &REPLV_PH         , 0,
17650         DSP_                },        /* REPLV.PH */
17651      { reserved_block      , 0                   , 0   , 32,
17652         0xfc00ffff, 0x2000053f, 0                      , 0,
17653         0x0                 },        /* POOL32Axf_4~*(2) */
17654      { reserved_block      , 0                   , 0   , 32,
17655         0xfc00ffff, 0x2000073f, 0                      , 0,
17656         0x0                 },        /* POOL32Axf_4~*(3) */
17657      { reserved_block      , 0                   , 0   , 32,
17658         0xfc00ffff, 0x2000093f, 0                      , 0,
17659         0x0                 },        /* POOL32Axf_4~*(4) */
17660      { reserved_block      , 0                   , 0   , 32,
17661         0xfc00ffff, 0x20000b3f, 0                      , 0,
17662         0x0                 },        /* POOL32Axf_4~*(5) */
17663      { reserved_block      , 0                   , 0   , 32,
17664         0xfc00ffff, 0x20000d3f, 0                      , 0,
17665         0x0                 },        /* POOL32Axf_4~*(6) */
17666      { reserved_block      , 0                   , 0   , 32,
17667         0xfc00ffff, 0x20000f3f, 0                      , 0,
17668         0x0                 },        /* POOL32Axf_4~*(7) */
17669      { instruction         , 0                   , 0   , 32,
17670         0xfc00ffff, 0x2000113f, &ABSQ_S_PH        , 0,
17671         DSP_                },        /* ABSQ_S.PH */
17672      { instruction         , 0                   , 0   , 32,
17673         0xfc00ffff, 0x2000133f, &REPLV_QB         , 0,
17674         DSP_                },        /* REPLV.QB */
17675      { reserved_block      , 0                   , 0   , 32,
17676         0xfc00ffff, 0x2000153f, 0                      , 0,
17677         0x0                 },        /* POOL32Axf_4~*(10) */
17678      { reserved_block      , 0                   , 0   , 32,
17679         0xfc00ffff, 0x2000173f, 0                      , 0,
17680         0x0                 },        /* POOL32Axf_4~*(11) */
17681      { reserved_block      , 0                   , 0   , 32,
17682         0xfc00ffff, 0x2000193f, 0                      , 0,
17683         0x0                 },        /* POOL32Axf_4~*(12) */
17684      { reserved_block      , 0                   , 0   , 32,
17685         0xfc00ffff, 0x20001b3f, 0                      , 0,
17686         0x0                 },        /* POOL32Axf_4~*(13) */
17687      { reserved_block      , 0                   , 0   , 32,
17688         0xfc00ffff, 0x20001d3f, 0                      , 0,
17689         0x0                 },        /* POOL32Axf_4~*(14) */
17690      { reserved_block      , 0                   , 0   , 32,
17691         0xfc00ffff, 0x20001f3f, 0                      , 0,
17692         0x0                 },        /* POOL32Axf_4~*(15) */
17693      { instruction         , 0                   , 0   , 32,
17694         0xfc00ffff, 0x2000213f, &ABSQ_S_W         , 0,
17695         DSP_                },        /* ABSQ_S.W */
17696      { reserved_block      , 0                   , 0   , 32,
17697         0xfc00ffff, 0x2000233f, 0                      , 0,
17698         0x0                 },        /* POOL32Axf_4~*(17) */
17699      { reserved_block      , 0                   , 0   , 32,
17700         0xfc00ffff, 0x2000253f, 0                      , 0,
17701         0x0                 },        /* POOL32Axf_4~*(18) */
17702      { reserved_block      , 0                   , 0   , 32,
17703         0xfc00ffff, 0x2000273f, 0                      , 0,
17704         0x0                 },        /* POOL32Axf_4~*(19) */
17705      { reserved_block      , 0                   , 0   , 32,
17706         0xfc00ffff, 0x2000293f, 0                      , 0,
17707         0x0                 },        /* POOL32Axf_4~*(20) */
17708      { reserved_block      , 0                   , 0   , 32,
17709         0xfc00ffff, 0x20002b3f, 0                      , 0,
17710         0x0                 },        /* POOL32Axf_4~*(21) */
17711      { reserved_block      , 0                   , 0   , 32,
17712         0xfc00ffff, 0x20002d3f, 0                      , 0,
17713         0x0                 },        /* POOL32Axf_4~*(22) */
17714      { reserved_block      , 0                   , 0   , 32,
17715         0xfc00ffff, 0x20002f3f, 0                      , 0,
17716         0x0                 },        /* POOL32Axf_4~*(23) */
17717      { reserved_block      , 0                   , 0   , 32,
17718         0xfc00ffff, 0x2000313f, 0                      , 0,
17719         0x0                 },        /* POOL32Axf_4~*(24) */
17720      { reserved_block      , 0                   , 0   , 32,
17721         0xfc00ffff, 0x2000333f, 0                      , 0,
17722         0x0                 },        /* POOL32Axf_4~*(25) */
17723      { reserved_block      , 0                   , 0   , 32,
17724         0xfc00ffff, 0x2000353f, 0                      , 0,
17725         0x0                 },        /* POOL32Axf_4~*(26) */
17726      { reserved_block      , 0                   , 0   , 32,
17727         0xfc00ffff, 0x2000373f, 0                      , 0,
17728         0x0                 },        /* POOL32Axf_4~*(27) */
17729      { reserved_block      , 0                   , 0   , 32,
17730         0xfc00ffff, 0x2000393f, 0                      , 0,
17731         0x0                 },        /* POOL32Axf_4~*(28) */
17732      { reserved_block      , 0                   , 0   , 32,
17733         0xfc00ffff, 0x20003b3f, 0                      , 0,
17734         0x0                 },        /* POOL32Axf_4~*(29) */
17735      { reserved_block      , 0                   , 0   , 32,
17736         0xfc00ffff, 0x20003d3f, 0                      , 0,
17737         0x0                 },        /* POOL32Axf_4~*(30) */
17738      { reserved_block      , 0                   , 0   , 32,
17739         0xfc00ffff, 0x20003f3f, 0                      , 0,
17740         0x0                 },        /* POOL32Axf_4~*(31) */
17741      { instruction         , 0                   , 0   , 32,
17742         0xfc00ffff, 0x2000413f, &INSV             , 0,
17743         DSP_                },        /* INSV */
17744      { reserved_block      , 0                   , 0   , 32,
17745         0xfc00ffff, 0x2000433f, 0                      , 0,
17746         0x0                 },        /* POOL32Axf_4~*(33) */
17747      { reserved_block      , 0                   , 0   , 32,
17748         0xfc00ffff, 0x2000453f, 0                      , 0,
17749         0x0                 },        /* POOL32Axf_4~*(34) */
17750      { reserved_block      , 0                   , 0   , 32,
17751         0xfc00ffff, 0x2000473f, 0                      , 0,
17752         0x0                 },        /* POOL32Axf_4~*(35) */
17753      { reserved_block      , 0                   , 0   , 32,
17754         0xfc00ffff, 0x2000493f, 0                      , 0,
17755         0x0                 },        /* POOL32Axf_4~*(36) */
17756      { instruction         , 0                   , 0   , 32,
17757         0xfc00ffff, 0x20004b3f, &CLO              , 0,
17758         XMMS_               },        /* CLO */
17759      { instruction         , 0                   , 0   , 32,
17760         0xfc00ffff, 0x20004d3f, &MFC2             , 0,
17761         CP2_                },        /* MFC2 */
17762      { reserved_block      , 0                   , 0   , 32,
17763         0xfc00ffff, 0x20004f3f, 0                      , 0,
17764         0x0                 },        /* POOL32Axf_4~*(39) */
17765      { instruction         , 0                   , 0   , 32,
17766         0xfc00ffff, 0x2000513f, &PRECEQ_W_PHL     , 0,
17767         DSP_                },        /* PRECEQ.W.PHL */
17768      { reserved_block      , 0                   , 0   , 32,
17769         0xfc00ffff, 0x2000533f, 0                      , 0,
17770         0x0                 },        /* POOL32Axf_4~*(41) */
17771      { reserved_block      , 0                   , 0   , 32,
17772         0xfc00ffff, 0x2000553f, 0                      , 0,
17773         0x0                 },        /* POOL32Axf_4~*(42) */
17774      { reserved_block      , 0                   , 0   , 32,
17775         0xfc00ffff, 0x2000573f, 0                      , 0,
17776         0x0                 },        /* POOL32Axf_4~*(43) */
17777      { reserved_block      , 0                   , 0   , 32,
17778         0xfc00ffff, 0x2000593f, 0                      , 0,
17779         0x0                 },        /* POOL32Axf_4~*(44) */
17780      { instruction         , 0                   , 0   , 32,
17781         0xfc00ffff, 0x20005b3f, &CLZ              , 0,
17782         XMMS_               },        /* CLZ */
17783      { instruction         , 0                   , 0   , 32,
17784         0xfc00ffff, 0x20005d3f, &MTC2             , 0,
17785         CP2_                },        /* MTC2 */
17786      { reserved_block      , 0                   , 0   , 32,
17787         0xfc00ffff, 0x20005f3f, 0                      , 0,
17788         0x0                 },        /* POOL32Axf_4~*(47) */
17789      { instruction         , 0                   , 0   , 32,
17790         0xfc00ffff, 0x2000613f, &PRECEQ_W_PHR     , 0,
17791         DSP_                },        /* PRECEQ.W.PHR */
17792      { reserved_block      , 0                   , 0   , 32,
17793         0xfc00ffff, 0x2000633f, 0                      , 0,
17794         0x0                 },        /* POOL32Axf_4~*(49) */
17795      { reserved_block      , 0                   , 0   , 32,
17796         0xfc00ffff, 0x2000653f, 0                      , 0,
17797         0x0                 },        /* POOL32Axf_4~*(50) */
17798      { reserved_block      , 0                   , 0   , 32,
17799         0xfc00ffff, 0x2000673f, 0                      , 0,
17800         0x0                 },        /* POOL32Axf_4~*(51) */
17801      { reserved_block      , 0                   , 0   , 32,
17802         0xfc00ffff, 0x2000693f, 0                      , 0,
17803         0x0                 },        /* POOL32Axf_4~*(52) */
17804      { reserved_block      , 0                   , 0   , 32,
17805         0xfc00ffff, 0x20006b3f, 0                      , 0,
17806         0x0                 },        /* POOL32Axf_4~*(53) */
17807      { instruction         , 0                   , 0   , 32,
17808         0xfc00ffff, 0x20006d3f, &DMFC2            , 0,
17809         CP2_                },        /* DMFC2 */
17810      { reserved_block      , 0                   , 0   , 32,
17811         0xfc00ffff, 0x20006f3f, 0                      , 0,
17812         0x0                 },        /* POOL32Axf_4~*(55) */
17813      { instruction         , 0                   , 0   , 32,
17814         0xfc00ffff, 0x2000713f, &PRECEQU_PH_QBL   , 0,
17815         DSP_                },        /* PRECEQU.PH.QBL */
17816      { instruction         , 0                   , 0   , 32,
17817         0xfc00ffff, 0x2000733f, &PRECEQU_PH_QBLA  , 0,
17818         DSP_                },        /* PRECEQU.PH.QBLA */
17819      { reserved_block      , 0                   , 0   , 32,
17820         0xfc00ffff, 0x2000753f, 0                      , 0,
17821         0x0                 },        /* POOL32Axf_4~*(58) */
17822      { reserved_block      , 0                   , 0   , 32,
17823         0xfc00ffff, 0x2000773f, 0                      , 0,
17824         0x0                 },        /* POOL32Axf_4~*(59) */
17825      { reserved_block      , 0                   , 0   , 32,
17826         0xfc00ffff, 0x2000793f, 0                      , 0,
17827         0x0                 },        /* POOL32Axf_4~*(60) */
17828      { reserved_block      , 0                   , 0   , 32,
17829         0xfc00ffff, 0x20007b3f, 0                      , 0,
17830         0x0                 },        /* POOL32Axf_4~*(61) */
17831      { instruction         , 0                   , 0   , 32,
17832         0xfc00ffff, 0x20007d3f, &DMTC2            , 0,
17833         CP2_                },        /* DMTC2 */
17834      { reserved_block      , 0                   , 0   , 32,
17835         0xfc00ffff, 0x20007f3f, 0                      , 0,
17836         0x0                 },        /* POOL32Axf_4~*(63) */
17837      { reserved_block      , 0                   , 0   , 32,
17838         0xfc00ffff, 0x2000813f, 0                      , 0,
17839         0x0                 },        /* POOL32Axf_4~*(64) */
17840      { reserved_block      , 0                   , 0   , 32,
17841         0xfc00ffff, 0x2000833f, 0                      , 0,
17842         0x0                 },        /* POOL32Axf_4~*(65) */
17843      { reserved_block      , 0                   , 0   , 32,
17844         0xfc00ffff, 0x2000853f, 0                      , 0,
17845         0x0                 },        /* POOL32Axf_4~*(66) */
17846      { reserved_block      , 0                   , 0   , 32,
17847         0xfc00ffff, 0x2000873f, 0                      , 0,
17848         0x0                 },        /* POOL32Axf_4~*(67) */
17849      { reserved_block      , 0                   , 0   , 32,
17850         0xfc00ffff, 0x2000893f, 0                      , 0,
17851         0x0                 },        /* POOL32Axf_4~*(68) */
17852      { reserved_block      , 0                   , 0   , 32,
17853         0xfc00ffff, 0x20008b3f, 0                      , 0,
17854         0x0                 },        /* POOL32Axf_4~*(69) */
17855      { instruction         , 0                   , 0   , 32,
17856         0xfc00ffff, 0x20008d3f, &MFHC2            , 0,
17857         CP2_                },        /* MFHC2 */
17858      { reserved_block      , 0                   , 0   , 32,
17859         0xfc00ffff, 0x20008f3f, 0                      , 0,
17860         0x0                 },        /* POOL32Axf_4~*(71) */
17861      { instruction         , 0                   , 0   , 32,
17862         0xfc00ffff, 0x2000913f, &PRECEQU_PH_QBR   , 0,
17863         DSP_                },        /* PRECEQU.PH.QBR */
17864      { instruction         , 0                   , 0   , 32,
17865         0xfc00ffff, 0x2000933f, &PRECEQU_PH_QBRA  , 0,
17866         DSP_                },        /* PRECEQU.PH.QBRA */
17867      { reserved_block      , 0                   , 0   , 32,
17868         0xfc00ffff, 0x2000953f, 0                      , 0,
17869         0x0                 },        /* POOL32Axf_4~*(74) */
17870      { reserved_block      , 0                   , 0   , 32,
17871         0xfc00ffff, 0x2000973f, 0                      , 0,
17872         0x0                 },        /* POOL32Axf_4~*(75) */
17873      { reserved_block      , 0                   , 0   , 32,
17874         0xfc00ffff, 0x2000993f, 0                      , 0,
17875         0x0                 },        /* POOL32Axf_4~*(76) */
17876      { reserved_block      , 0                   , 0   , 32,
17877         0xfc00ffff, 0x20009b3f, 0                      , 0,
17878         0x0                 },        /* POOL32Axf_4~*(77) */
17879      { instruction         , 0                   , 0   , 32,
17880         0xfc00ffff, 0x20009d3f, &MTHC2            , 0,
17881         CP2_                },        /* MTHC2 */
17882      { reserved_block      , 0                   , 0   , 32,
17883         0xfc00ffff, 0x20009f3f, 0                      , 0,
17884         0x0                 },        /* POOL32Axf_4~*(79) */
17885      { reserved_block      , 0                   , 0   , 32,
17886         0xfc00ffff, 0x2000a13f, 0                      , 0,
17887         0x0                 },        /* POOL32Axf_4~*(80) */
17888      { reserved_block      , 0                   , 0   , 32,
17889         0xfc00ffff, 0x2000a33f, 0                      , 0,
17890         0x0                 },        /* POOL32Axf_4~*(81) */
17891      { reserved_block      , 0                   , 0   , 32,
17892         0xfc00ffff, 0x2000a53f, 0                      , 0,
17893         0x0                 },        /* POOL32Axf_4~*(82) */
17894      { reserved_block      , 0                   , 0   , 32,
17895         0xfc00ffff, 0x2000a73f, 0                      , 0,
17896         0x0                 },        /* POOL32Axf_4~*(83) */
17897      { reserved_block      , 0                   , 0   , 32,
17898         0xfc00ffff, 0x2000a93f, 0                      , 0,
17899         0x0                 },        /* POOL32Axf_4~*(84) */
17900      { reserved_block      , 0                   , 0   , 32,
17901         0xfc00ffff, 0x2000ab3f, 0                      , 0,
17902         0x0                 },        /* POOL32Axf_4~*(85) */
17903      { reserved_block      , 0                   , 0   , 32,
17904         0xfc00ffff, 0x2000ad3f, 0                      , 0,
17905         0x0                 },        /* POOL32Axf_4~*(86) */
17906      { reserved_block      , 0                   , 0   , 32,
17907         0xfc00ffff, 0x2000af3f, 0                      , 0,
17908         0x0                 },        /* POOL32Axf_4~*(87) */
17909      { instruction         , 0                   , 0   , 32,
17910         0xfc00ffff, 0x2000b13f, &PRECEU_PH_QBL    , 0,
17911         DSP_                },        /* PRECEU.PH.QBL */
17912      { instruction         , 0                   , 0   , 32,
17913         0xfc00ffff, 0x2000b33f, &PRECEU_PH_QBLA   , 0,
17914         DSP_                },        /* PRECEU.PH.QBLA */
17915      { reserved_block      , 0                   , 0   , 32,
17916         0xfc00ffff, 0x2000b53f, 0                      , 0,
17917         0x0                 },        /* POOL32Axf_4~*(90) */
17918      { reserved_block      , 0                   , 0   , 32,
17919         0xfc00ffff, 0x2000b73f, 0                      , 0,
17920         0x0                 },        /* POOL32Axf_4~*(91) */
17921      { reserved_block      , 0                   , 0   , 32,
17922         0xfc00ffff, 0x2000b93f, 0                      , 0,
17923         0x0                 },        /* POOL32Axf_4~*(92) */
17924      { reserved_block      , 0                   , 0   , 32,
17925         0xfc00ffff, 0x2000bb3f, 0                      , 0,
17926         0x0                 },        /* POOL32Axf_4~*(93) */
17927      { reserved_block      , 0                   , 0   , 32,
17928         0xfc00ffff, 0x2000bd3f, 0                      , 0,
17929         0x0                 },        /* POOL32Axf_4~*(94) */
17930      { reserved_block      , 0                   , 0   , 32,
17931         0xfc00ffff, 0x2000bf3f, 0                      , 0,
17932         0x0                 },        /* POOL32Axf_4~*(95) */
17933      { reserved_block      , 0                   , 0   , 32,
17934         0xfc00ffff, 0x2000c13f, 0                      , 0,
17935         0x0                 },        /* POOL32Axf_4~*(96) */
17936      { reserved_block      , 0                   , 0   , 32,
17937         0xfc00ffff, 0x2000c33f, 0                      , 0,
17938         0x0                 },        /* POOL32Axf_4~*(97) */
17939      { reserved_block      , 0                   , 0   , 32,
17940         0xfc00ffff, 0x2000c53f, 0                      , 0,
17941         0x0                 },        /* POOL32Axf_4~*(98) */
17942      { reserved_block      , 0                   , 0   , 32,
17943         0xfc00ffff, 0x2000c73f, 0                      , 0,
17944         0x0                 },        /* POOL32Axf_4~*(99) */
17945      { reserved_block      , 0                   , 0   , 32,
17946         0xfc00ffff, 0x2000c93f, 0                      , 0,
17947         0x0                 },        /* POOL32Axf_4~*(100) */
17948      { reserved_block      , 0                   , 0   , 32,
17949         0xfc00ffff, 0x2000cb3f, 0                      , 0,
17950         0x0                 },        /* POOL32Axf_4~*(101) */
17951      { instruction         , 0                   , 0   , 32,
17952         0xfc00ffff, 0x2000cd3f, &CFC2             , 0,
17953         CP2_                },        /* CFC2 */
17954      { reserved_block      , 0                   , 0   , 32,
17955         0xfc00ffff, 0x2000cf3f, 0                      , 0,
17956         0x0                 },        /* POOL32Axf_4~*(103) */
17957      { instruction         , 0                   , 0   , 32,
17958         0xfc00ffff, 0x2000d13f, &PRECEU_PH_QBR    , 0,
17959         DSP_                },        /* PRECEU.PH.QBR */
17960      { instruction         , 0                   , 0   , 32,
17961         0xfc00ffff, 0x2000d33f, &PRECEU_PH_QBRA   , 0,
17962         DSP_                },        /* PRECEU.PH.QBRA */
17963      { reserved_block      , 0                   , 0   , 32,
17964         0xfc00ffff, 0x2000d53f, 0                      , 0,
17965         0x0                 },        /* POOL32Axf_4~*(106) */
17966      { reserved_block      , 0                   , 0   , 32,
17967         0xfc00ffff, 0x2000d73f, 0                      , 0,
17968         0x0                 },        /* POOL32Axf_4~*(107) */
17969      { reserved_block      , 0                   , 0   , 32,
17970         0xfc00ffff, 0x2000d93f, 0                      , 0,
17971         0x0                 },        /* POOL32Axf_4~*(108) */
17972      { reserved_block      , 0                   , 0   , 32,
17973         0xfc00ffff, 0x2000db3f, 0                      , 0,
17974         0x0                 },        /* POOL32Axf_4~*(109) */
17975      { instruction         , 0                   , 0   , 32,
17976         0xfc00ffff, 0x2000dd3f, &CTC2             , 0,
17977         CP2_                },        /* CTC2 */
17978      { reserved_block      , 0                   , 0   , 32,
17979         0xfc00ffff, 0x2000df3f, 0                      , 0,
17980         0x0                 },        /* POOL32Axf_4~*(111) */
17981      { reserved_block      , 0                   , 0   , 32,
17982         0xfc00ffff, 0x2000e13f, 0                      , 0,
17983         0x0                 },        /* POOL32Axf_4~*(112) */
17984      { reserved_block      , 0                   , 0   , 32,
17985         0xfc00ffff, 0x2000e33f, 0                      , 0,
17986         0x0                 },        /* POOL32Axf_4~*(113) */
17987      { reserved_block      , 0                   , 0   , 32,
17988         0xfc00ffff, 0x2000e53f, 0                      , 0,
17989         0x0                 },        /* POOL32Axf_4~*(114) */
17990      { reserved_block      , 0                   , 0   , 32,
17991         0xfc00ffff, 0x2000e73f, 0                      , 0,
17992         0x0                 },        /* POOL32Axf_4~*(115) */
17993      { reserved_block      , 0                   , 0   , 32,
17994         0xfc00ffff, 0x2000e93f, 0                      , 0,
17995         0x0                 },        /* POOL32Axf_4~*(116) */
17996      { reserved_block      , 0                   , 0   , 32,
17997         0xfc00ffff, 0x2000eb3f, 0                      , 0,
17998         0x0                 },        /* POOL32Axf_4~*(117) */
17999      { reserved_block      , 0                   , 0   , 32,
18000         0xfc00ffff, 0x2000ed3f, 0                      , 0,
18001         0x0                 },        /* POOL32Axf_4~*(118) */
18002      { reserved_block      , 0                   , 0   , 32,
18003         0xfc00ffff, 0x2000ef3f, 0                      , 0,
18004         0x0                 },        /* POOL32Axf_4~*(119) */
18005      { instruction         , 0                   , 0   , 32,
18006         0xfc00ffff, 0x2000f13f, &RADDU_W_QB       , 0,
18007         DSP_                },        /* RADDU.W.QB */
18008      { reserved_block      , 0                   , 0   , 32,
18009         0xfc00ffff, 0x2000f33f, 0                      , 0,
18010         0x0                 },        /* POOL32Axf_4~*(121) */
18011      { reserved_block      , 0                   , 0   , 32,
18012         0xfc00ffff, 0x2000f53f, 0                      , 0,
18013         0x0                 },        /* POOL32Axf_4~*(122) */
18014      { reserved_block      , 0                   , 0   , 32,
18015         0xfc00ffff, 0x2000f73f, 0                      , 0,
18016         0x0                 },        /* POOL32Axf_4~*(123) */
18017      { reserved_block      , 0                   , 0   , 32,
18018         0xfc00ffff, 0x2000f93f, 0                      , 0,
18019         0x0                 },        /* POOL32Axf_4~*(124) */
18020      { reserved_block      , 0                   , 0   , 32,
18021         0xfc00ffff, 0x2000fb3f, 0                      , 0,
18022         0x0                 },        /* POOL32Axf_4~*(125) */
18023      { reserved_block      , 0                   , 0   , 32,
18024         0xfc00ffff, 0x2000fd3f, 0                      , 0,
18025         0x0                 },        /* POOL32Axf_4~*(126) */
18026      { reserved_block      , 0                   , 0   , 32,
18027         0xfc00ffff, 0x2000ff3f, 0                      , 0,
18028         0x0                 },        /* POOL32Axf_4~*(127) */
18029  };
18030  
18031  
18032  static const Pool POOL32Axf_5_group0[32] = {
18033      { instruction         , 0                   , 0   , 32,
18034         0xfc00ffff, 0x2000017f, &TLBGP            , 0,
18035         CP0_ | VZ_ | TLB_   },        /* TLBGP */
18036      { instruction         , 0                   , 0   , 32,
18037         0xfc00ffff, 0x2000037f, &TLBP             , 0,
18038         CP0_ | TLB_         },        /* TLBP */
18039      { instruction         , 0                   , 0   , 32,
18040         0xfc00ffff, 0x2000057f, &TLBGINV          , 0,
18041         CP0_ | VZ_ | TLB_ | TLBINV_},        /* TLBGINV */
18042      { instruction         , 0                   , 0   , 32,
18043         0xfc00ffff, 0x2000077f, &TLBINV           , 0,
18044         CP0_ | TLB_ | TLBINV_},        /* TLBINV */
18045      { reserved_block      , 0                   , 0   , 32,
18046         0xfc00ffff, 0x2000097f, 0                      , 0,
18047         0x0                 },        /* POOL32Axf_5_group0~*(4) */
18048      { reserved_block      , 0                   , 0   , 32,
18049         0xfc00ffff, 0x20000b7f, 0                      , 0,
18050         0x0                 },        /* POOL32Axf_5_group0~*(5) */
18051      { reserved_block      , 0                   , 0   , 32,
18052         0xfc00ffff, 0x20000d7f, 0                      , 0,
18053         0x0                 },        /* POOL32Axf_5_group0~*(6) */
18054      { reserved_block      , 0                   , 0   , 32,
18055         0xfc00ffff, 0x20000f7f, 0                      , 0,
18056         0x0                 },        /* POOL32Axf_5_group0~*(7) */
18057      { instruction         , 0                   , 0   , 32,
18058         0xfc00ffff, 0x2000117f, &TLBGR            , 0,
18059         CP0_ | VZ_ | TLB_   },        /* TLBGR */
18060      { instruction         , 0                   , 0   , 32,
18061         0xfc00ffff, 0x2000137f, &TLBR             , 0,
18062         CP0_ | TLB_         },        /* TLBR */
18063      { instruction         , 0                   , 0   , 32,
18064         0xfc00ffff, 0x2000157f, &TLBGINVF         , 0,
18065         CP0_ | VZ_ | TLB_ | TLBINV_},        /* TLBGINVF */
18066      { instruction         , 0                   , 0   , 32,
18067         0xfc00ffff, 0x2000177f, &TLBINVF          , 0,
18068         CP0_ | TLB_ | TLBINV_},        /* TLBINVF */
18069      { reserved_block      , 0                   , 0   , 32,
18070         0xfc00ffff, 0x2000197f, 0                      , 0,
18071         0x0                 },        /* POOL32Axf_5_group0~*(12) */
18072      { reserved_block      , 0                   , 0   , 32,
18073         0xfc00ffff, 0x20001b7f, 0                      , 0,
18074         0x0                 },        /* POOL32Axf_5_group0~*(13) */
18075      { reserved_block      , 0                   , 0   , 32,
18076         0xfc00ffff, 0x20001d7f, 0                      , 0,
18077         0x0                 },        /* POOL32Axf_5_group0~*(14) */
18078      { reserved_block      , 0                   , 0   , 32,
18079         0xfc00ffff, 0x20001f7f, 0                      , 0,
18080         0x0                 },        /* POOL32Axf_5_group0~*(15) */
18081      { instruction         , 0                   , 0   , 32,
18082         0xfc00ffff, 0x2000217f, &TLBGWI           , 0,
18083         CP0_ | VZ_ | TLB_   },        /* TLBGWI */
18084      { instruction         , 0                   , 0   , 32,
18085         0xfc00ffff, 0x2000237f, &TLBWI            , 0,
18086         CP0_ | TLB_         },        /* TLBWI */
18087      { reserved_block      , 0                   , 0   , 32,
18088         0xfc00ffff, 0x2000257f, 0                      , 0,
18089         0x0                 },        /* POOL32Axf_5_group0~*(18) */
18090      { reserved_block      , 0                   , 0   , 32,
18091         0xfc00ffff, 0x2000277f, 0                      , 0,
18092         0x0                 },        /* POOL32Axf_5_group0~*(19) */
18093      { reserved_block      , 0                   , 0   , 32,
18094         0xfc00ffff, 0x2000297f, 0                      , 0,
18095         0x0                 },        /* POOL32Axf_5_group0~*(20) */
18096      { reserved_block      , 0                   , 0   , 32,
18097         0xfc00ffff, 0x20002b7f, 0                      , 0,
18098         0x0                 },        /* POOL32Axf_5_group0~*(21) */
18099      { reserved_block      , 0                   , 0   , 32,
18100         0xfc00ffff, 0x20002d7f, 0                      , 0,
18101         0x0                 },        /* POOL32Axf_5_group0~*(22) */
18102      { reserved_block      , 0                   , 0   , 32,
18103         0xfc00ffff, 0x20002f7f, 0                      , 0,
18104         0x0                 },        /* POOL32Axf_5_group0~*(23) */
18105      { instruction         , 0                   , 0   , 32,
18106         0xfc00ffff, 0x2000317f, &TLBGWR           , 0,
18107         CP0_ | VZ_ | TLB_   },        /* TLBGWR */
18108      { instruction         , 0                   , 0   , 32,
18109         0xfc00ffff, 0x2000337f, &TLBWR            , 0,
18110         CP0_ | TLB_         },        /* TLBWR */
18111      { reserved_block      , 0                   , 0   , 32,
18112         0xfc00ffff, 0x2000357f, 0                      , 0,
18113         0x0                 },        /* POOL32Axf_5_group0~*(26) */
18114      { reserved_block      , 0                   , 0   , 32,
18115         0xfc00ffff, 0x2000377f, 0                      , 0,
18116         0x0                 },        /* POOL32Axf_5_group0~*(27) */
18117      { reserved_block      , 0                   , 0   , 32,
18118         0xfc00ffff, 0x2000397f, 0                      , 0,
18119         0x0                 },        /* POOL32Axf_5_group0~*(28) */
18120      { reserved_block      , 0                   , 0   , 32,
18121         0xfc00ffff, 0x20003b7f, 0                      , 0,
18122         0x0                 },        /* POOL32Axf_5_group0~*(29) */
18123      { reserved_block      , 0                   , 0   , 32,
18124         0xfc00ffff, 0x20003d7f, 0                      , 0,
18125         0x0                 },        /* POOL32Axf_5_group0~*(30) */
18126      { reserved_block      , 0                   , 0   , 32,
18127         0xfc00ffff, 0x20003f7f, 0                      , 0,
18128         0x0                 },        /* POOL32Axf_5_group0~*(31) */
18129  };
18130  
18131  
18132  static const Pool POOL32Axf_5_group1[32] = {
18133      { reserved_block      , 0                   , 0   , 32,
18134         0xfc00ffff, 0x2000417f, 0                      , 0,
18135         0x0                 },        /* POOL32Axf_5_group1~*(0) */
18136      { reserved_block      , 0                   , 0   , 32,
18137         0xfc00ffff, 0x2000437f, 0                      , 0,
18138         0x0                 },        /* POOL32Axf_5_group1~*(1) */
18139      { reserved_block      , 0                   , 0   , 32,
18140         0xfc00ffff, 0x2000457f, 0                      , 0,
18141         0x0                 },        /* POOL32Axf_5_group1~*(2) */
18142      { instruction         , 0                   , 0   , 32,
18143         0xfc00ffff, 0x2000477f, &DI               , 0,
18144         0x0                 },        /* DI */
18145      { reserved_block      , 0                   , 0   , 32,
18146         0xfc00ffff, 0x2000497f, 0                      , 0,
18147         0x0                 },        /* POOL32Axf_5_group1~*(4) */
18148      { reserved_block      , 0                   , 0   , 32,
18149         0xfc00ffff, 0x20004b7f, 0                      , 0,
18150         0x0                 },        /* POOL32Axf_5_group1~*(5) */
18151      { reserved_block      , 0                   , 0   , 32,
18152         0xfc00ffff, 0x20004d7f, 0                      , 0,
18153         0x0                 },        /* POOL32Axf_5_group1~*(6) */
18154      { reserved_block      , 0                   , 0   , 32,
18155         0xfc00ffff, 0x20004f7f, 0                      , 0,
18156         0x0                 },        /* POOL32Axf_5_group1~*(7) */
18157      { reserved_block      , 0                   , 0   , 32,
18158         0xfc00ffff, 0x2000517f, 0                      , 0,
18159         0x0                 },        /* POOL32Axf_5_group1~*(8) */
18160      { reserved_block      , 0                   , 0   , 32,
18161         0xfc00ffff, 0x2000537f, 0                      , 0,
18162         0x0                 },        /* POOL32Axf_5_group1~*(9) */
18163      { reserved_block      , 0                   , 0   , 32,
18164         0xfc00ffff, 0x2000557f, 0                      , 0,
18165         0x0                 },        /* POOL32Axf_5_group1~*(10) */
18166      { instruction         , 0                   , 0   , 32,
18167         0xfc00ffff, 0x2000577f, &EI               , 0,
18168         0x0                 },        /* EI */
18169      { reserved_block      , 0                   , 0   , 32,
18170         0xfc00ffff, 0x2000597f, 0                      , 0,
18171         0x0                 },        /* POOL32Axf_5_group1~*(12) */
18172      { reserved_block      , 0                   , 0   , 32,
18173         0xfc00ffff, 0x20005b7f, 0                      , 0,
18174         0x0                 },        /* POOL32Axf_5_group1~*(13) */
18175      { reserved_block      , 0                   , 0   , 32,
18176         0xfc00ffff, 0x20005d7f, 0                      , 0,
18177         0x0                 },        /* POOL32Axf_5_group1~*(14) */
18178      { reserved_block      , 0                   , 0   , 32,
18179         0xfc00ffff, 0x20005f7f, 0                      , 0,
18180         0x0                 },        /* POOL32Axf_5_group1~*(15) */
18181      { reserved_block      , 0                   , 0   , 32,
18182         0xfc00ffff, 0x2000617f, 0                      , 0,
18183         0x0                 },        /* POOL32Axf_5_group1~*(16) */
18184      { reserved_block      , 0                   , 0   , 32,
18185         0xfc00ffff, 0x2000637f, 0                      , 0,
18186         0x0                 },        /* POOL32Axf_5_group1~*(17) */
18187      { reserved_block      , 0                   , 0   , 32,
18188         0xfc00ffff, 0x2000657f, 0                      , 0,
18189         0x0                 },        /* POOL32Axf_5_group1~*(18) */
18190      { reserved_block      , 0                   , 0   , 32,
18191         0xfc00ffff, 0x2000677f, 0                      , 0,
18192         0x0                 },        /* POOL32Axf_5_group1~*(19) */
18193      { reserved_block      , 0                   , 0   , 32,
18194         0xfc00ffff, 0x2000697f, 0                      , 0,
18195         0x0                 },        /* POOL32Axf_5_group1~*(20) */
18196      { reserved_block      , 0                   , 0   , 32,
18197         0xfc00ffff, 0x20006b7f, 0                      , 0,
18198         0x0                 },        /* POOL32Axf_5_group1~*(21) */
18199      { reserved_block      , 0                   , 0   , 32,
18200         0xfc00ffff, 0x20006d7f, 0                      , 0,
18201         0x0                 },        /* POOL32Axf_5_group1~*(22) */
18202      { reserved_block      , 0                   , 0   , 32,
18203         0xfc00ffff, 0x20006f7f, 0                      , 0,
18204         0x0                 },        /* POOL32Axf_5_group1~*(23) */
18205      { reserved_block      , 0                   , 0   , 32,
18206         0xfc00ffff, 0x2000717f, 0                      , 0,
18207         0x0                 },        /* POOL32Axf_5_group1~*(24) */
18208      { reserved_block      , 0                   , 0   , 32,
18209         0xfc00ffff, 0x2000737f, 0                      , 0,
18210         0x0                 },        /* POOL32Axf_5_group1~*(25) */
18211      { reserved_block      , 0                   , 0   , 32,
18212         0xfc00ffff, 0x2000757f, 0                      , 0,
18213         0x0                 },        /* POOL32Axf_5_group1~*(26) */
18214      { reserved_block      , 0                   , 0   , 32,
18215         0xfc00ffff, 0x2000777f, 0                      , 0,
18216         0x0                 },        /* POOL32Axf_5_group1~*(27) */
18217      { reserved_block      , 0                   , 0   , 32,
18218         0xfc00ffff, 0x2000797f, 0                      , 0,
18219         0x0                 },        /* POOL32Axf_5_group1~*(28) */
18220      { reserved_block      , 0                   , 0   , 32,
18221         0xfc00ffff, 0x20007b7f, 0                      , 0,
18222         0x0                 },        /* POOL32Axf_5_group1~*(29) */
18223      { reserved_block      , 0                   , 0   , 32,
18224         0xfc00ffff, 0x20007d7f, 0                      , 0,
18225         0x0                 },        /* POOL32Axf_5_group1~*(30) */
18226      { reserved_block      , 0                   , 0   , 32,
18227         0xfc00ffff, 0x20007f7f, 0                      , 0,
18228         0x0                 },        /* POOL32Axf_5_group1~*(31) */
18229  };
18230  
18231  
18232  static const Pool ERETx[2] = {
18233      { instruction         , 0                   , 0   , 32,
18234         0xfc01ffff, 0x2000f37f, &ERET             , 0,
18235         0x0                 },        /* ERET */
18236      { instruction         , 0                   , 0   , 32,
18237         0xfc01ffff, 0x2001f37f, &ERETNC           , 0,
18238         0x0                 },        /* ERETNC */
18239  };
18240  
18241  
18242  static const Pool POOL32Axf_5_group3[32] = {
18243      { reserved_block      , 0                   , 0   , 32,
18244         0xfc00ffff, 0x2000c17f, 0                      , 0,
18245         0x0                 },        /* POOL32Axf_5_group3~*(0) */
18246      { instruction         , 0                   , 0   , 32,
18247         0xfc00ffff, 0x2000c37f, &WAIT             , 0,
18248         0x0                 },        /* WAIT */
18249      { reserved_block      , 0                   , 0   , 32,
18250         0xfc00ffff, 0x2000c57f, 0                      , 0,
18251         0x0                 },        /* POOL32Axf_5_group3~*(2) */
18252      { reserved_block      , 0                   , 0   , 32,
18253         0xfc00ffff, 0x2000c77f, 0                      , 0,
18254         0x0                 },        /* POOL32Axf_5_group3~*(3) */
18255      { reserved_block      , 0                   , 0   , 32,
18256         0xfc00ffff, 0x2000c97f, 0                      , 0,
18257         0x0                 },        /* POOL32Axf_5_group3~*(4) */
18258      { reserved_block      , 0                   , 0   , 32,
18259         0xfc00ffff, 0x2000cb7f, 0                      , 0,
18260         0x0                 },        /* POOL32Axf_5_group3~*(5) */
18261      { reserved_block      , 0                   , 0   , 32,
18262         0xfc00ffff, 0x2000cd7f, 0                      , 0,
18263         0x0                 },        /* POOL32Axf_5_group3~*(6) */
18264      { reserved_block      , 0                   , 0   , 32,
18265         0xfc00ffff, 0x2000cf7f, 0                      , 0,
18266         0x0                 },        /* POOL32Axf_5_group3~*(7) */
18267      { reserved_block      , 0                   , 0   , 32,
18268         0xfc00ffff, 0x2000d17f, 0                      , 0,
18269         0x0                 },        /* POOL32Axf_5_group3~*(8) */
18270      { instruction         , 0                   , 0   , 32,
18271         0xfc00ffff, 0x2000d37f, &IRET             , 0,
18272         MCU_                },        /* IRET */
18273      { reserved_block      , 0                   , 0   , 32,
18274         0xfc00ffff, 0x2000d57f, 0                      , 0,
18275         0x0                 },        /* POOL32Axf_5_group3~*(10) */
18276      { reserved_block      , 0                   , 0   , 32,
18277         0xfc00ffff, 0x2000d77f, 0                      , 0,
18278         0x0                 },        /* POOL32Axf_5_group3~*(11) */
18279      { reserved_block      , 0                   , 0   , 32,
18280         0xfc00ffff, 0x2000d97f, 0                      , 0,
18281         0x0                 },        /* POOL32Axf_5_group3~*(12) */
18282      { reserved_block      , 0                   , 0   , 32,
18283         0xfc00ffff, 0x2000db7f, 0                      , 0,
18284         0x0                 },        /* POOL32Axf_5_group3~*(13) */
18285      { reserved_block      , 0                   , 0   , 32,
18286         0xfc00ffff, 0x2000dd7f, 0                      , 0,
18287         0x0                 },        /* POOL32Axf_5_group3~*(14) */
18288      { reserved_block      , 0                   , 0   , 32,
18289         0xfc00ffff, 0x2000df7f, 0                      , 0,
18290         0x0                 },        /* POOL32Axf_5_group3~*(15) */
18291      { instruction         , 0                   , 0   , 32,
18292         0xfc00ffff, 0x2000e17f, &RDPGPR           , 0,
18293         CP0_                },        /* RDPGPR */
18294      { instruction         , 0                   , 0   , 32,
18295         0xfc00ffff, 0x2000e37f, &DERET            , 0,
18296         EJTAG_              },        /* DERET */
18297      { reserved_block      , 0                   , 0   , 32,
18298         0xfc00ffff, 0x2000e57f, 0                      , 0,
18299         0x0                 },        /* POOL32Axf_5_group3~*(18) */
18300      { reserved_block      , 0                   , 0   , 32,
18301         0xfc00ffff, 0x2000e77f, 0                      , 0,
18302         0x0                 },        /* POOL32Axf_5_group3~*(19) */
18303      { reserved_block      , 0                   , 0   , 32,
18304         0xfc00ffff, 0x2000e97f, 0                      , 0,
18305         0x0                 },        /* POOL32Axf_5_group3~*(20) */
18306      { reserved_block      , 0                   , 0   , 32,
18307         0xfc00ffff, 0x2000eb7f, 0                      , 0,
18308         0x0                 },        /* POOL32Axf_5_group3~*(21) */
18309      { reserved_block      , 0                   , 0   , 32,
18310         0xfc00ffff, 0x2000ed7f, 0                      , 0,
18311         0x0                 },        /* POOL32Axf_5_group3~*(22) */
18312      { reserved_block      , 0                   , 0   , 32,
18313         0xfc00ffff, 0x2000ef7f, 0                      , 0,
18314         0x0                 },        /* POOL32Axf_5_group3~*(23) */
18315      { instruction         , 0                   , 0   , 32,
18316         0xfc00ffff, 0x2000f17f, &WRPGPR           , 0,
18317         CP0_                },        /* WRPGPR */
18318      { pool                , ERETx               , 2   , 32,
18319         0xfc00ffff, 0x2000f37f, 0                      , 0,
18320         0x0                 },        /* ERETx */
18321      { reserved_block      , 0                   , 0   , 32,
18322         0xfc00ffff, 0x2000f57f, 0                      , 0,
18323         0x0                 },        /* POOL32Axf_5_group3~*(26) */
18324      { reserved_block      , 0                   , 0   , 32,
18325         0xfc00ffff, 0x2000f77f, 0                      , 0,
18326         0x0                 },        /* POOL32Axf_5_group3~*(27) */
18327      { reserved_block      , 0                   , 0   , 32,
18328         0xfc00ffff, 0x2000f97f, 0                      , 0,
18329         0x0                 },        /* POOL32Axf_5_group3~*(28) */
18330      { reserved_block      , 0                   , 0   , 32,
18331         0xfc00ffff, 0x2000fb7f, 0                      , 0,
18332         0x0                 },        /* POOL32Axf_5_group3~*(29) */
18333      { reserved_block      , 0                   , 0   , 32,
18334         0xfc00ffff, 0x2000fd7f, 0                      , 0,
18335         0x0                 },        /* POOL32Axf_5_group3~*(30) */
18336      { reserved_block      , 0                   , 0   , 32,
18337         0xfc00ffff, 0x2000ff7f, 0                      , 0,
18338         0x0                 },        /* POOL32Axf_5_group3~*(31) */
18339  };
18340  
18341  
18342  static const Pool POOL32Axf_5[4] = {
18343      { pool                , POOL32Axf_5_group0  , 32  , 32,
18344         0xfc00c1ff, 0x2000017f, 0                      , 0,
18345         0x0                 },        /* POOL32Axf_5_group0 */
18346      { pool                , POOL32Axf_5_group1  , 32  , 32,
18347         0xfc00c1ff, 0x2000417f, 0                      , 0,
18348         0x0                 },        /* POOL32Axf_5_group1 */
18349      { reserved_block      , 0                   , 0   , 32,
18350         0xfc00c1ff, 0x2000817f, 0                      , 0,
18351         0x0                 },        /* POOL32Axf_5~*(2) */
18352      { pool                , POOL32Axf_5_group3  , 32  , 32,
18353         0xfc00c1ff, 0x2000c17f, 0                      , 0,
18354         0x0                 },        /* POOL32Axf_5_group3 */
18355  };
18356  
18357  
18358  static const Pool SHRA__R__QB[2] = {
18359      { instruction         , 0                   , 0   , 32,
18360         0xfc001fff, 0x200001ff, &SHRA_QB          , 0,
18361         DSP_                },        /* SHRA.QB */
18362      { instruction         , 0                   , 0   , 32,
18363         0xfc001fff, 0x200011ff, &SHRA_R_QB        , 0,
18364         DSP_                },        /* SHRA_R.QB */
18365  };
18366  
18367  
18368  static const Pool POOL32Axf_7[8] = {
18369      { pool                , SHRA__R__QB         , 2   , 32,
18370         0xfc000fff, 0x200001ff, 0                      , 0,
18371         0x0                 },        /* SHRA[_R].QB */
18372      { instruction         , 0                   , 0   , 32,
18373         0xfc000fff, 0x200003ff, &SHRL_PH          , 0,
18374         DSP_                },        /* SHRL.PH */
18375      { instruction         , 0                   , 0   , 32,
18376         0xfc000fff, 0x200005ff, &REPL_QB          , 0,
18377         DSP_                },        /* REPL.QB */
18378      { reserved_block      , 0                   , 0   , 32,
18379         0xfc000fff, 0x200007ff, 0                      , 0,
18380         0x0                 },        /* POOL32Axf_7~*(3) */
18381      { reserved_block      , 0                   , 0   , 32,
18382         0xfc000fff, 0x200009ff, 0                      , 0,
18383         0x0                 },        /* POOL32Axf_7~*(4) */
18384      { reserved_block      , 0                   , 0   , 32,
18385         0xfc000fff, 0x20000bff, 0                      , 0,
18386         0x0                 },        /* POOL32Axf_7~*(5) */
18387      { reserved_block      , 0                   , 0   , 32,
18388         0xfc000fff, 0x20000dff, 0                      , 0,
18389         0x0                 },        /* POOL32Axf_7~*(6) */
18390      { reserved_block      , 0                   , 0   , 32,
18391         0xfc000fff, 0x20000fff, 0                      , 0,
18392         0x0                 },        /* POOL32Axf_7~*(7) */
18393  };
18394  
18395  
18396  static const Pool POOL32Axf[8] = {
18397      { reserved_block      , 0                   , 0   , 32,
18398         0xfc0001ff, 0x2000003f, 0                      , 0,
18399         0x0                 },        /* POOL32Axf~*(0) */
18400      { pool                , POOL32Axf_1         , 8   , 32,
18401         0xfc0001ff, 0x2000007f, 0                      , 0,
18402         0x0                 },        /* POOL32Axf_1 */
18403      { pool                , POOL32Axf_2         , 4   , 32,
18404         0xfc0001ff, 0x200000bf, 0                      , 0,
18405         0x0                 },        /* POOL32Axf_2 */
18406      { reserved_block      , 0                   , 0   , 32,
18407         0xfc0001ff, 0x200000ff, 0                      , 0,
18408         0x0                 },        /* POOL32Axf~*(3) */
18409      { pool                , POOL32Axf_4         , 128 , 32,
18410         0xfc0001ff, 0x2000013f, 0                      , 0,
18411         0x0                 },        /* POOL32Axf_4 */
18412      { pool                , POOL32Axf_5         , 4   , 32,
18413         0xfc0001ff, 0x2000017f, 0                      , 0,
18414         0x0                 },        /* POOL32Axf_5 */
18415      { reserved_block      , 0                   , 0   , 32,
18416         0xfc0001ff, 0x200001bf, 0                      , 0,
18417         0x0                 },        /* POOL32Axf~*(6) */
18418      { pool                , POOL32Axf_7         , 8   , 32,
18419         0xfc0001ff, 0x200001ff, 0                      , 0,
18420         0x0                 },        /* POOL32Axf_7 */
18421  };
18422  
18423  
18424  static const Pool _POOL32A7[8] = {
18425      { pool                , P_LSX               , 2   , 32,
18426         0xfc00003f, 0x20000007, 0                      , 0,
18427         0x0                 },        /* P.LSX */
18428      { instruction         , 0                   , 0   , 32,
18429         0xfc00003f, 0x2000000f, &LSA              , 0,
18430         0x0                 },        /* LSA */
18431      { reserved_block      , 0                   , 0   , 32,
18432         0xfc00003f, 0x20000017, 0                      , 0,
18433         0x0                 },        /* _POOL32A7~*(2) */
18434      { instruction         , 0                   , 0   , 32,
18435         0xfc00003f, 0x2000001f, &EXTW             , 0,
18436         0x0                 },        /* EXTW */
18437      { reserved_block      , 0                   , 0   , 32,
18438         0xfc00003f, 0x20000027, 0                      , 0,
18439         0x0                 },        /* _POOL32A7~*(4) */
18440      { reserved_block      , 0                   , 0   , 32,
18441         0xfc00003f, 0x2000002f, 0                      , 0,
18442         0x0                 },        /* _POOL32A7~*(5) */
18443      { reserved_block      , 0                   , 0   , 32,
18444         0xfc00003f, 0x20000037, 0                      , 0,
18445         0x0                 },        /* _POOL32A7~*(6) */
18446      { pool                , POOL32Axf           , 8   , 32,
18447         0xfc00003f, 0x2000003f, 0                      , 0,
18448         0x0                 },        /* POOL32Axf */
18449  };
18450  
18451  
18452  static const Pool P32A[8] = {
18453      { pool                , _POOL32A0           , 128 , 32,
18454         0xfc000007, 0x20000000, 0                      , 0,
18455         0x0                 },        /* _POOL32A0 */
18456      { instruction         , 0                   , 0   , 32,
18457         0xfc000007, 0x20000001, &SPECIAL2         , 0,
18458         UDI_                },        /* SPECIAL2 */
18459      { instruction         , 0                   , 0   , 32,
18460         0xfc000007, 0x20000002, &COP2_1           , 0,
18461         CP2_                },        /* COP2_1 */
18462      { instruction         , 0                   , 0   , 32,
18463         0xfc000007, 0x20000003, &UDI              , 0,
18464         UDI_                },        /* UDI */
18465      { reserved_block      , 0                   , 0   , 32,
18466         0xfc000007, 0x20000004, 0                      , 0,
18467         0x0                 },        /* P32A~*(4) */
18468      { pool                , _POOL32A5           , 128 , 32,
18469         0xfc000007, 0x20000005, 0                      , 0,
18470         0x0                 },        /* _POOL32A5 */
18471      { reserved_block      , 0                   , 0   , 32,
18472         0xfc000007, 0x20000006, 0                      , 0,
18473         0x0                 },        /* P32A~*(6) */
18474      { pool                , _POOL32A7           , 8   , 32,
18475         0xfc000007, 0x20000007, 0                      , 0,
18476         0x0                 },        /* _POOL32A7 */
18477  };
18478  
18479  
18480  static const Pool P_GP_D[2] = {
18481      { instruction         , 0                   , 0   , 32,
18482         0xfc000007, 0x40000001, &LD_GP_           , 0,
18483         MIPS64_             },        /* LD[GP] */
18484      { instruction         , 0                   , 0   , 32,
18485         0xfc000007, 0x40000005, &SD_GP_           , 0,
18486         MIPS64_             },        /* SD[GP] */
18487  };
18488  
18489  
18490  static const Pool P_GP_W[4] = {
18491      { instruction         , 0                   , 0   , 32,
18492         0xfc000003, 0x40000000, &ADDIU_GP_W_      , 0,
18493         0x0                 },        /* ADDIU[GP.W] */
18494      { pool                , P_GP_D              , 2   , 32,
18495         0xfc000003, 0x40000001, 0                      , 0,
18496         0x0                 },        /* P.GP.D */
18497      { instruction         , 0                   , 0   , 32,
18498         0xfc000003, 0x40000002, &LW_GP_           , 0,
18499         0x0                 },        /* LW[GP] */
18500      { instruction         , 0                   , 0   , 32,
18501         0xfc000003, 0x40000003, &SW_GP_           , 0,
18502         0x0                 },        /* SW[GP] */
18503  };
18504  
18505  
18506  static const Pool POOL48I[32] = {
18507      { instruction         , 0                   , 0   , 48,
18508         0xfc1f00000000ull, 0x600000000000ull, &LI_48_           , 0,
18509         XMMS_               },        /* LI[48] */
18510      { instruction         , 0                   , 0   , 48,
18511         0xfc1f00000000ull, 0x600100000000ull, &ADDIU_48_        , 0,
18512         XMMS_               },        /* ADDIU[48] */
18513      { instruction         , 0                   , 0   , 48,
18514         0xfc1f00000000ull, 0x600200000000ull, &ADDIU_GP48_      , 0,
18515         XMMS_               },        /* ADDIU[GP48] */
18516      { instruction         , 0                   , 0   , 48,
18517         0xfc1f00000000ull, 0x600300000000ull, &ADDIUPC_48_      , 0,
18518         XMMS_               },        /* ADDIUPC[48] */
18519      { reserved_block      , 0                   , 0   , 48,
18520         0xfc1f00000000ull, 0x600400000000ull, 0                      , 0,
18521         0x0                 },        /* POOL48I~*(4) */
18522      { reserved_block      , 0                   , 0   , 48,
18523         0xfc1f00000000ull, 0x600500000000ull, 0                      , 0,
18524         0x0                 },        /* POOL48I~*(5) */
18525      { reserved_block      , 0                   , 0   , 48,
18526         0xfc1f00000000ull, 0x600600000000ull, 0                      , 0,
18527         0x0                 },        /* POOL48I~*(6) */
18528      { reserved_block      , 0                   , 0   , 48,
18529         0xfc1f00000000ull, 0x600700000000ull, 0                      , 0,
18530         0x0                 },        /* POOL48I~*(7) */
18531      { reserved_block      , 0                   , 0   , 48,
18532         0xfc1f00000000ull, 0x600800000000ull, 0                      , 0,
18533         0x0                 },        /* POOL48I~*(8) */
18534      { reserved_block      , 0                   , 0   , 48,
18535         0xfc1f00000000ull, 0x600900000000ull, 0                      , 0,
18536         0x0                 },        /* POOL48I~*(9) */
18537      { reserved_block      , 0                   , 0   , 48,
18538         0xfc1f00000000ull, 0x600a00000000ull, 0                      , 0,
18539         0x0                 },        /* POOL48I~*(10) */
18540      { instruction         , 0                   , 0   , 48,
18541         0xfc1f00000000ull, 0x600b00000000ull, &LWPC_48_         , 0,
18542         XMMS_               },        /* LWPC[48] */
18543      { reserved_block      , 0                   , 0   , 48,
18544         0xfc1f00000000ull, 0x600c00000000ull, 0                      , 0,
18545         0x0                 },        /* POOL48I~*(12) */
18546      { reserved_block      , 0                   , 0   , 48,
18547         0xfc1f00000000ull, 0x600d00000000ull, 0                      , 0,
18548         0x0                 },        /* POOL48I~*(13) */
18549      { reserved_block      , 0                   , 0   , 48,
18550         0xfc1f00000000ull, 0x600e00000000ull, 0                      , 0,
18551         0x0                 },        /* POOL48I~*(14) */
18552      { instruction         , 0                   , 0   , 48,
18553         0xfc1f00000000ull, 0x600f00000000ull, &SWPC_48_         , 0,
18554         XMMS_               },        /* SWPC[48] */
18555      { reserved_block      , 0                   , 0   , 48,
18556         0xfc1f00000000ull, 0x601000000000ull, 0                      , 0,
18557         0x0                 },        /* POOL48I~*(16) */
18558      { instruction         , 0                   , 0   , 48,
18559         0xfc1f00000000ull, 0x601100000000ull, &DADDIU_48_       , 0,
18560         MIPS64_             },        /* DADDIU[48] */
18561      { reserved_block      , 0                   , 0   , 48,
18562         0xfc1f00000000ull, 0x601200000000ull, 0                      , 0,
18563         0x0                 },        /* POOL48I~*(18) */
18564      { reserved_block      , 0                   , 0   , 48,
18565         0xfc1f00000000ull, 0x601300000000ull, 0                      , 0,
18566         0x0                 },        /* POOL48I~*(19) */
18567      { instruction         , 0                   , 0   , 48,
18568         0xfc1f00000000ull, 0x601400000000ull, &DLUI_48_         , 0,
18569         MIPS64_             },        /* DLUI[48] */
18570      { reserved_block      , 0                   , 0   , 48,
18571         0xfc1f00000000ull, 0x601500000000ull, 0                      , 0,
18572         0x0                 },        /* POOL48I~*(21) */
18573      { reserved_block      , 0                   , 0   , 48,
18574         0xfc1f00000000ull, 0x601600000000ull, 0                      , 0,
18575         0x0                 },        /* POOL48I~*(22) */
18576      { reserved_block      , 0                   , 0   , 48,
18577         0xfc1f00000000ull, 0x601700000000ull, 0                      , 0,
18578         0x0                 },        /* POOL48I~*(23) */
18579      { reserved_block      , 0                   , 0   , 48,
18580         0xfc1f00000000ull, 0x601800000000ull, 0                      , 0,
18581         0x0                 },        /* POOL48I~*(24) */
18582      { reserved_block      , 0                   , 0   , 48,
18583         0xfc1f00000000ull, 0x601900000000ull, 0                      , 0,
18584         0x0                 },        /* POOL48I~*(25) */
18585      { reserved_block      , 0                   , 0   , 48,
18586         0xfc1f00000000ull, 0x601a00000000ull, 0                      , 0,
18587         0x0                 },        /* POOL48I~*(26) */
18588      { instruction         , 0                   , 0   , 48,
18589         0xfc1f00000000ull, 0x601b00000000ull, &LDPC_48_         , 0,
18590         MIPS64_             },        /* LDPC[48] */
18591      { reserved_block      , 0                   , 0   , 48,
18592         0xfc1f00000000ull, 0x601c00000000ull, 0                      , 0,
18593         0x0                 },        /* POOL48I~*(28) */
18594      { reserved_block      , 0                   , 0   , 48,
18595         0xfc1f00000000ull, 0x601d00000000ull, 0                      , 0,
18596         0x0                 },        /* POOL48I~*(29) */
18597      { reserved_block      , 0                   , 0   , 48,
18598         0xfc1f00000000ull, 0x601e00000000ull, 0                      , 0,
18599         0x0                 },        /* POOL48I~*(30) */
18600      { instruction         , 0                   , 0   , 48,
18601         0xfc1f00000000ull, 0x601f00000000ull, &SDPC_48_         , 0,
18602         MIPS64_             },        /* SDPC[48] */
18603  };
18604  
18605  
18606  static const Pool PP_SR[4] = {
18607      { instruction         , 0                   , 0   , 32,
18608         0xfc10f003, 0x80003000, &SAVE_32_         , 0,
18609         0x0                 },        /* SAVE[32] */
18610      { reserved_block      , 0                   , 0   , 32,
18611         0xfc10f003, 0x80003001, 0                      , 0,
18612         0x0                 },        /* PP.SR~*(1) */
18613      { instruction         , 0                   , 0   , 32,
18614         0xfc10f003, 0x80003002, &RESTORE_32_      , 0,
18615         0x0                 },        /* RESTORE[32] */
18616      { return_instruction  , 0                   , 0   , 32,
18617         0xfc10f003, 0x80003003, &RESTORE_JRC_32_  , 0,
18618         0x0                 },        /* RESTORE.JRC[32] */
18619  };
18620  
18621  
18622  static const Pool P_SR_F[8] = {
18623      { instruction         , 0                   , 0   , 32,
18624         0xfc10f007, 0x80103000, &SAVEF            , 0,
18625         CP1_                },        /* SAVEF */
18626      { instruction         , 0                   , 0   , 32,
18627         0xfc10f007, 0x80103001, &RESTOREF         , 0,
18628         CP1_                },        /* RESTOREF */
18629      { reserved_block      , 0                   , 0   , 32,
18630         0xfc10f007, 0x80103002, 0                      , 0,
18631         0x0                 },        /* P.SR.F~*(2) */
18632      { reserved_block      , 0                   , 0   , 32,
18633         0xfc10f007, 0x80103003, 0                      , 0,
18634         0x0                 },        /* P.SR.F~*(3) */
18635      { reserved_block      , 0                   , 0   , 32,
18636         0xfc10f007, 0x80103004, 0                      , 0,
18637         0x0                 },        /* P.SR.F~*(4) */
18638      { reserved_block      , 0                   , 0   , 32,
18639         0xfc10f007, 0x80103005, 0                      , 0,
18640         0x0                 },        /* P.SR.F~*(5) */
18641      { reserved_block      , 0                   , 0   , 32,
18642         0xfc10f007, 0x80103006, 0                      , 0,
18643         0x0                 },        /* P.SR.F~*(6) */
18644      { reserved_block      , 0                   , 0   , 32,
18645         0xfc10f007, 0x80103007, 0                      , 0,
18646         0x0                 },        /* P.SR.F~*(7) */
18647  };
18648  
18649  
18650  static const Pool P_SR[2] = {
18651      { pool                , PP_SR               , 4   , 32,
18652         0xfc10f000, 0x80003000, 0                      , 0,
18653         0x0                 },        /* PP.SR */
18654      { pool                , P_SR_F              , 8   , 32,
18655         0xfc10f000, 0x80103000, 0                      , 0,
18656         0x0                 },        /* P.SR.F */
18657  };
18658  
18659  
18660  static const Pool P_SLL[5] = {
18661      { instruction         , 0                   , 0   , 32,
18662         0xffe0f1ff, 0x8000c000, &NOP_32_          , 0,
18663         0x0                 },        /* NOP[32] */
18664      { instruction         , 0                   , 0   , 32,
18665         0xffe0f1ff, 0x8000c003, &EHB              , 0,
18666         0x0                 },        /* EHB */
18667      { instruction         , 0                   , 0   , 32,
18668         0xffe0f1ff, 0x8000c005, &PAUSE            , 0,
18669         0x0                 },        /* PAUSE */
18670      { instruction         , 0                   , 0   , 32,
18671         0xffe0f1ff, 0x8000c006, &SYNC             , 0,
18672         0x0                 },        /* SYNC */
18673      { instruction         , 0                   , 0   , 32,
18674         0xfc00f1e0, 0x8000c000, &SLL_32_          , 0,
18675         0x0                 },        /* SLL[32] */
18676  };
18677  
18678  
18679  static const Pool P_SHIFT[16] = {
18680      { pool                , P_SLL               , 5   , 32,
18681         0xfc00f1e0, 0x8000c000, 0                      , 0,
18682         0x0                 },        /* P.SLL */
18683      { reserved_block      , 0                   , 0   , 32,
18684         0xfc00f1e0, 0x8000c020, 0                      , 0,
18685         0x0                 },        /* P.SHIFT~*(1) */
18686      { instruction         , 0                   , 0   , 32,
18687         0xfc00f1e0, 0x8000c040, &SRL_32_          , 0,
18688         0x0                 },        /* SRL[32] */
18689      { reserved_block      , 0                   , 0   , 32,
18690         0xfc00f1e0, 0x8000c060, 0                      , 0,
18691         0x0                 },        /* P.SHIFT~*(3) */
18692      { instruction         , 0                   , 0   , 32,
18693         0xfc00f1e0, 0x8000c080, &SRA              , 0,
18694         0x0                 },        /* SRA */
18695      { reserved_block      , 0                   , 0   , 32,
18696         0xfc00f1e0, 0x8000c0a0, 0                      , 0,
18697         0x0                 },        /* P.SHIFT~*(5) */
18698      { instruction         , 0                   , 0   , 32,
18699         0xfc00f1e0, 0x8000c0c0, &ROTR             , 0,
18700         0x0                 },        /* ROTR */
18701      { reserved_block      , 0                   , 0   , 32,
18702         0xfc00f1e0, 0x8000c0e0, 0                      , 0,
18703         0x0                 },        /* P.SHIFT~*(7) */
18704      { instruction         , 0                   , 0   , 32,
18705         0xfc00f1e0, 0x8000c100, &DSLL             , 0,
18706         MIPS64_             },        /* DSLL */
18707      { instruction         , 0                   , 0   , 32,
18708         0xfc00f1e0, 0x8000c120, &DSLL32           , 0,
18709         MIPS64_             },        /* DSLL32 */
18710      { instruction         , 0                   , 0   , 32,
18711         0xfc00f1e0, 0x8000c140, &DSRL             , 0,
18712         MIPS64_             },        /* DSRL */
18713      { instruction         , 0                   , 0   , 32,
18714         0xfc00f1e0, 0x8000c160, &DSRL32           , 0,
18715         MIPS64_             },        /* DSRL32 */
18716      { instruction         , 0                   , 0   , 32,
18717         0xfc00f1e0, 0x8000c180, &DSRA             , 0,
18718         MIPS64_             },        /* DSRA */
18719      { instruction         , 0                   , 0   , 32,
18720         0xfc00f1e0, 0x8000c1a0, &DSRA32           , 0,
18721         MIPS64_             },        /* DSRA32 */
18722      { instruction         , 0                   , 0   , 32,
18723         0xfc00f1e0, 0x8000c1c0, &DROTR            , 0,
18724         MIPS64_             },        /* DROTR */
18725      { instruction         , 0                   , 0   , 32,
18726         0xfc00f1e0, 0x8000c1e0, &DROTR32          , 0,
18727         MIPS64_             },        /* DROTR32 */
18728  };
18729  
18730  
18731  static const Pool P_ROTX[4] = {
18732      { instruction         , 0                   , 0   , 32,
18733         0xfc00f820, 0x8000d000, &ROTX             , 0,
18734         XMMS_               },        /* ROTX */
18735      { reserved_block      , 0                   , 0   , 32,
18736         0xfc00f820, 0x8000d020, 0                      , 0,
18737         0x0                 },        /* P.ROTX~*(1) */
18738      { reserved_block      , 0                   , 0   , 32,
18739         0xfc00f820, 0x8000d800, 0                      , 0,
18740         0x0                 },        /* P.ROTX~*(2) */
18741      { reserved_block      , 0                   , 0   , 32,
18742         0xfc00f820, 0x8000d820, 0                      , 0,
18743         0x0                 },        /* P.ROTX~*(3) */
18744  };
18745  
18746  
18747  static const Pool P_INS[4] = {
18748      { instruction         , 0                   , 0   , 32,
18749         0xfc00f820, 0x8000e000, &INS              , 0,
18750         XMMS_               },        /* INS */
18751      { instruction         , 0                   , 0   , 32,
18752         0xfc00f820, 0x8000e020, &DINSU            , 0,
18753         MIPS64_             },        /* DINSU */
18754      { instruction         , 0                   , 0   , 32,
18755         0xfc00f820, 0x8000e800, &DINSM            , 0,
18756         MIPS64_             },        /* DINSM */
18757      { instruction         , 0                   , 0   , 32,
18758         0xfc00f820, 0x8000e820, &DINS             , 0,
18759         MIPS64_             },        /* DINS */
18760  };
18761  
18762  
18763  static const Pool P_EXT[4] = {
18764      { instruction         , 0                   , 0   , 32,
18765         0xfc00f820, 0x8000f000, &EXT              , 0,
18766         XMMS_               },        /* EXT */
18767      { instruction         , 0                   , 0   , 32,
18768         0xfc00f820, 0x8000f020, &DEXTU            , 0,
18769         MIPS64_             },        /* DEXTU */
18770      { instruction         , 0                   , 0   , 32,
18771         0xfc00f820, 0x8000f800, &DEXTM            , 0,
18772         MIPS64_             },        /* DEXTM */
18773      { instruction         , 0                   , 0   , 32,
18774         0xfc00f820, 0x8000f820, &DEXT             , 0,
18775         MIPS64_             },        /* DEXT */
18776  };
18777  
18778  
18779  static const Pool P_U12[16] = {
18780      { instruction         , 0                   , 0   , 32,
18781         0xfc00f000, 0x80000000, &ORI              , 0,
18782         0x0                 },        /* ORI */
18783      { instruction         , 0                   , 0   , 32,
18784         0xfc00f000, 0x80001000, &XORI             , 0,
18785         0x0                 },        /* XORI */
18786      { instruction         , 0                   , 0   , 32,
18787         0xfc00f000, 0x80002000, &ANDI_32_         , 0,
18788         0x0                 },        /* ANDI[32] */
18789      { pool                , P_SR                , 2   , 32,
18790         0xfc00f000, 0x80003000, 0                      , 0,
18791         0x0                 },        /* P.SR */
18792      { instruction         , 0                   , 0   , 32,
18793         0xfc00f000, 0x80004000, &SLTI             , 0,
18794         0x0                 },        /* SLTI */
18795      { instruction         , 0                   , 0   , 32,
18796         0xfc00f000, 0x80005000, &SLTIU            , 0,
18797         0x0                 },        /* SLTIU */
18798      { instruction         , 0                   , 0   , 32,
18799         0xfc00f000, 0x80006000, &SEQI             , 0,
18800         0x0                 },        /* SEQI */
18801      { reserved_block      , 0                   , 0   , 32,
18802         0xfc00f000, 0x80007000, 0                      , 0,
18803         0x0                 },        /* P.U12~*(7) */
18804      { instruction         , 0                   , 0   , 32,
18805         0xfc00f000, 0x80008000, &ADDIU_NEG_       , 0,
18806         0x0                 },        /* ADDIU[NEG] */
18807      { instruction         , 0                   , 0   , 32,
18808         0xfc00f000, 0x80009000, &DADDIU_U12_      , 0,
18809         MIPS64_             },        /* DADDIU[U12] */
18810      { instruction         , 0                   , 0   , 32,
18811         0xfc00f000, 0x8000a000, &DADDIU_NEG_      , 0,
18812         MIPS64_             },        /* DADDIU[NEG] */
18813      { instruction         , 0                   , 0   , 32,
18814         0xfc00f000, 0x8000b000, &DROTX            , 0,
18815         MIPS64_             },        /* DROTX */
18816      { pool                , P_SHIFT             , 16  , 32,
18817         0xfc00f000, 0x8000c000, 0                      , 0,
18818         0x0                 },        /* P.SHIFT */
18819      { pool                , P_ROTX              , 4   , 32,
18820         0xfc00f000, 0x8000d000, 0                      , 0,
18821         0x0                 },        /* P.ROTX */
18822      { pool                , P_INS               , 4   , 32,
18823         0xfc00f000, 0x8000e000, 0                      , 0,
18824         0x0                 },        /* P.INS */
18825      { pool                , P_EXT               , 4   , 32,
18826         0xfc00f000, 0x8000f000, 0                      , 0,
18827         0x0                 },        /* P.EXT */
18828  };
18829  
18830  
18831  static const Pool RINT_fmt[2] = {
18832      { instruction         , 0                   , 0   , 32,
18833         0xfc0003ff, 0xa0000020, &RINT_S           , 0,
18834         CP1_                },        /* RINT.S */
18835      { instruction         , 0                   , 0   , 32,
18836         0xfc0003ff, 0xa0000220, &RINT_D           , 0,
18837         CP1_                },        /* RINT.D */
18838  };
18839  
18840  
18841  static const Pool ADD_fmt0[2] = {
18842      { instruction         , 0                   , 0   , 32,
18843         0xfc0003ff, 0xa0000030, &ADD_S            , 0,
18844         CP1_                },        /* ADD.S */
18845      { reserved_block      , 0                   , 0   , 32,
18846         0xfc0003ff, 0xa0000230, 0                      , 0,
18847         CP1_                },        /* ADD.fmt0~*(1) */
18848  };
18849  
18850  
18851  static const Pool SELEQZ_fmt[2] = {
18852      { instruction         , 0                   , 0   , 32,
18853         0xfc0003ff, 0xa0000038, &SELEQZ_S         , 0,
18854         CP1_                },        /* SELEQZ.S */
18855      { instruction         , 0                   , 0   , 32,
18856         0xfc0003ff, 0xa0000238, &SELEQZ_D         , 0,
18857         CP1_                },        /* SELEQZ.D */
18858  };
18859  
18860  
18861  static const Pool CLASS_fmt[2] = {
18862      { instruction         , 0                   , 0   , 32,
18863         0xfc0003ff, 0xa0000060, &CLASS_S          , 0,
18864         CP1_                },        /* CLASS.S */
18865      { instruction         , 0                   , 0   , 32,
18866         0xfc0003ff, 0xa0000260, &CLASS_D          , 0,
18867         CP1_                },        /* CLASS.D */
18868  };
18869  
18870  
18871  static const Pool SUB_fmt0[2] = {
18872      { instruction         , 0                   , 0   , 32,
18873         0xfc0003ff, 0xa0000070, &SUB_S            , 0,
18874         CP1_                },        /* SUB.S */
18875      { reserved_block      , 0                   , 0   , 32,
18876         0xfc0003ff, 0xa0000270, 0                      , 0,
18877         CP1_                },        /* SUB.fmt0~*(1) */
18878  };
18879  
18880  
18881  static const Pool SELNEZ_fmt[2] = {
18882      { instruction         , 0                   , 0   , 32,
18883         0xfc0003ff, 0xa0000078, &SELNEZ_S         , 0,
18884         CP1_                },        /* SELNEZ.S */
18885      { instruction         , 0                   , 0   , 32,
18886         0xfc0003ff, 0xa0000278, &SELNEZ_D         , 0,
18887         CP1_                },        /* SELNEZ.D */
18888  };
18889  
18890  
18891  static const Pool MUL_fmt0[2] = {
18892      { instruction         , 0                   , 0   , 32,
18893         0xfc0003ff, 0xa00000b0, &MUL_S            , 0,
18894         CP1_                },        /* MUL.S */
18895      { reserved_block      , 0                   , 0   , 32,
18896         0xfc0003ff, 0xa00002b0, 0                      , 0,
18897         CP1_                },        /* MUL.fmt0~*(1) */
18898  };
18899  
18900  
18901  static const Pool SEL_fmt[2] = {
18902      { instruction         , 0                   , 0   , 32,
18903         0xfc0003ff, 0xa00000b8, &SEL_S            , 0,
18904         CP1_                },        /* SEL.S */
18905      { instruction         , 0                   , 0   , 32,
18906         0xfc0003ff, 0xa00002b8, &SEL_D            , 0,
18907         CP1_                },        /* SEL.D */
18908  };
18909  
18910  
18911  static const Pool DIV_fmt0[2] = {
18912      { instruction         , 0                   , 0   , 32,
18913         0xfc0003ff, 0xa00000f0, &DIV_S            , 0,
18914         CP1_                },        /* DIV.S */
18915      { reserved_block      , 0                   , 0   , 32,
18916         0xfc0003ff, 0xa00002f0, 0                      , 0,
18917         CP1_                },        /* DIV.fmt0~*(1) */
18918  };
18919  
18920  
18921  static const Pool ADD_fmt1[2] = {
18922      { instruction         , 0                   , 0   , 32,
18923         0xfc0003ff, 0xa0000130, &ADD_D            , 0,
18924         CP1_                },        /* ADD.D */
18925      { reserved_block      , 0                   , 0   , 32,
18926         0xfc0003ff, 0xa0000330, 0                      , 0,
18927         CP1_                },        /* ADD.fmt1~*(1) */
18928  };
18929  
18930  
18931  static const Pool SUB_fmt1[2] = {
18932      { instruction         , 0                   , 0   , 32,
18933         0xfc0003ff, 0xa0000170, &SUB_D            , 0,
18934         CP1_                },        /* SUB.D */
18935      { reserved_block      , 0                   , 0   , 32,
18936         0xfc0003ff, 0xa0000370, 0                      , 0,
18937         CP1_                },        /* SUB.fmt1~*(1) */
18938  };
18939  
18940  
18941  static const Pool MUL_fmt1[2] = {
18942      { instruction         , 0                   , 0   , 32,
18943         0xfc0003ff, 0xa00001b0, &MUL_D            , 0,
18944         CP1_                },        /* MUL.D */
18945      { reserved_block      , 0                   , 0   , 32,
18946         0xfc0003ff, 0xa00003b0, 0                      , 0,
18947         CP1_                },        /* MUL.fmt1~*(1) */
18948  };
18949  
18950  
18951  static const Pool MADDF_fmt[2] = {
18952      { instruction         , 0                   , 0   , 32,
18953         0xfc0003ff, 0xa00001b8, &MADDF_S          , 0,
18954         CP1_                },        /* MADDF.S */
18955      { instruction         , 0                   , 0   , 32,
18956         0xfc0003ff, 0xa00003b8, &MADDF_D          , 0,
18957         CP1_                },        /* MADDF.D */
18958  };
18959  
18960  
18961  static const Pool DIV_fmt1[2] = {
18962      { instruction         , 0                   , 0   , 32,
18963         0xfc0003ff, 0xa00001f0, &DIV_D            , 0,
18964         CP1_                },        /* DIV.D */
18965      { reserved_block      , 0                   , 0   , 32,
18966         0xfc0003ff, 0xa00003f0, 0                      , 0,
18967         CP1_                },        /* DIV.fmt1~*(1) */
18968  };
18969  
18970  
18971  static const Pool MSUBF_fmt[2] = {
18972      { instruction         , 0                   , 0   , 32,
18973         0xfc0003ff, 0xa00001f8, &MSUBF_S          , 0,
18974         CP1_                },        /* MSUBF.S */
18975      { instruction         , 0                   , 0   , 32,
18976         0xfc0003ff, 0xa00003f8, &MSUBF_D          , 0,
18977         CP1_                },        /* MSUBF.D */
18978  };
18979  
18980  
18981  static const Pool POOL32F_0[64] = {
18982      { reserved_block      , 0                   , 0   , 32,
18983         0xfc0001ff, 0xa0000000, 0                      , 0,
18984         CP1_                },        /* POOL32F_0~*(0) */
18985      { reserved_block      , 0                   , 0   , 32,
18986         0xfc0001ff, 0xa0000008, 0                      , 0,
18987         CP1_                },        /* POOL32F_0~*(1) */
18988      { reserved_block      , 0                   , 0   , 32,
18989         0xfc0001ff, 0xa0000010, 0                      , 0,
18990         CP1_                },        /* POOL32F_0~*(2) */
18991      { reserved_block      , 0                   , 0   , 32,
18992         0xfc0001ff, 0xa0000018, 0                      , 0,
18993         CP1_                },        /* POOL32F_0~*(3) */
18994      { pool                , RINT_fmt            , 2   , 32,
18995         0xfc0001ff, 0xa0000020, 0                      , 0,
18996         CP1_                },        /* RINT.fmt */
18997      { reserved_block      , 0                   , 0   , 32,
18998         0xfc0001ff, 0xa0000028, 0                      , 0,
18999         CP1_                },        /* POOL32F_0~*(5) */
19000      { pool                , ADD_fmt0            , 2   , 32,
19001         0xfc0001ff, 0xa0000030, 0                      , 0,
19002         CP1_                },        /* ADD.fmt0 */
19003      { pool                , SELEQZ_fmt          , 2   , 32,
19004         0xfc0001ff, 0xa0000038, 0                      , 0,
19005         CP1_                },        /* SELEQZ.fmt */
19006      { reserved_block      , 0                   , 0   , 32,
19007         0xfc0001ff, 0xa0000040, 0                      , 0,
19008         CP1_                },        /* POOL32F_0~*(8) */
19009      { reserved_block      , 0                   , 0   , 32,
19010         0xfc0001ff, 0xa0000048, 0                      , 0,
19011         CP1_                },        /* POOL32F_0~*(9) */
19012      { reserved_block      , 0                   , 0   , 32,
19013         0xfc0001ff, 0xa0000050, 0                      , 0,
19014         CP1_                },        /* POOL32F_0~*(10) */
19015      { reserved_block      , 0                   , 0   , 32,
19016         0xfc0001ff, 0xa0000058, 0                      , 0,
19017         CP1_                },        /* POOL32F_0~*(11) */
19018      { pool                , CLASS_fmt           , 2   , 32,
19019         0xfc0001ff, 0xa0000060, 0                      , 0,
19020         CP1_                },        /* CLASS.fmt */
19021      { reserved_block      , 0                   , 0   , 32,
19022         0xfc0001ff, 0xa0000068, 0                      , 0,
19023         CP1_                },        /* POOL32F_0~*(13) */
19024      { pool                , SUB_fmt0            , 2   , 32,
19025         0xfc0001ff, 0xa0000070, 0                      , 0,
19026         CP1_                },        /* SUB.fmt0 */
19027      { pool                , SELNEZ_fmt          , 2   , 32,
19028         0xfc0001ff, 0xa0000078, 0                      , 0,
19029         CP1_                },        /* SELNEZ.fmt */
19030      { reserved_block      , 0                   , 0   , 32,
19031         0xfc0001ff, 0xa0000080, 0                      , 0,
19032         CP1_                },        /* POOL32F_0~*(16) */
19033      { reserved_block      , 0                   , 0   , 32,
19034         0xfc0001ff, 0xa0000088, 0                      , 0,
19035         CP1_                },        /* POOL32F_0~*(17) */
19036      { reserved_block      , 0                   , 0   , 32,
19037         0xfc0001ff, 0xa0000090, 0                      , 0,
19038         CP1_                },        /* POOL32F_0~*(18) */
19039      { reserved_block      , 0                   , 0   , 32,
19040         0xfc0001ff, 0xa0000098, 0                      , 0,
19041         CP1_                },        /* POOL32F_0~*(19) */
19042      { reserved_block      , 0                   , 0   , 32,
19043         0xfc0001ff, 0xa00000a0, 0                      , 0,
19044         CP1_                },        /* POOL32F_0~*(20) */
19045      { reserved_block      , 0                   , 0   , 32,
19046         0xfc0001ff, 0xa00000a8, 0                      , 0,
19047         CP1_                },        /* POOL32F_0~*(21) */
19048      { pool                , MUL_fmt0            , 2   , 32,
19049         0xfc0001ff, 0xa00000b0, 0                      , 0,
19050         CP1_                },        /* MUL.fmt0 */
19051      { pool                , SEL_fmt             , 2   , 32,
19052         0xfc0001ff, 0xa00000b8, 0                      , 0,
19053         CP1_                },        /* SEL.fmt */
19054      { reserved_block      , 0                   , 0   , 32,
19055         0xfc0001ff, 0xa00000c0, 0                      , 0,
19056         CP1_                },        /* POOL32F_0~*(24) */
19057      { reserved_block      , 0                   , 0   , 32,
19058         0xfc0001ff, 0xa00000c8, 0                      , 0,
19059         CP1_                },        /* POOL32F_0~*(25) */
19060      { reserved_block      , 0                   , 0   , 32,
19061         0xfc0001ff, 0xa00000d0, 0                      , 0,
19062         CP1_                },        /* POOL32F_0~*(26) */
19063      { reserved_block      , 0                   , 0   , 32,
19064         0xfc0001ff, 0xa00000d8, 0                      , 0,
19065         CP1_                },        /* POOL32F_0~*(27) */
19066      { reserved_block      , 0                   , 0   , 32,
19067         0xfc0001ff, 0xa00000e0, 0                      , 0,
19068         CP1_                },        /* POOL32F_0~*(28) */
19069      { reserved_block      , 0                   , 0   , 32,
19070         0xfc0001ff, 0xa00000e8, 0                      , 0,
19071         CP1_                },        /* POOL32F_0~*(29) */
19072      { pool                , DIV_fmt0            , 2   , 32,
19073         0xfc0001ff, 0xa00000f0, 0                      , 0,
19074         CP1_                },        /* DIV.fmt0 */
19075      { reserved_block      , 0                   , 0   , 32,
19076         0xfc0001ff, 0xa00000f8, 0                      , 0,
19077         CP1_                },        /* POOL32F_0~*(31) */
19078      { reserved_block      , 0                   , 0   , 32,
19079         0xfc0001ff, 0xa0000100, 0                      , 0,
19080         CP1_                },        /* POOL32F_0~*(32) */
19081      { reserved_block      , 0                   , 0   , 32,
19082         0xfc0001ff, 0xa0000108, 0                      , 0,
19083         CP1_                },        /* POOL32F_0~*(33) */
19084      { reserved_block      , 0                   , 0   , 32,
19085         0xfc0001ff, 0xa0000110, 0                      , 0,
19086         CP1_                },        /* POOL32F_0~*(34) */
19087      { reserved_block      , 0                   , 0   , 32,
19088         0xfc0001ff, 0xa0000118, 0                      , 0,
19089         CP1_                },        /* POOL32F_0~*(35) */
19090      { reserved_block      , 0                   , 0   , 32,
19091         0xfc0001ff, 0xa0000120, 0                      , 0,
19092         CP1_                },        /* POOL32F_0~*(36) */
19093      { reserved_block      , 0                   , 0   , 32,
19094         0xfc0001ff, 0xa0000128, 0                      , 0,
19095         CP1_                },        /* POOL32F_0~*(37) */
19096      { pool                , ADD_fmt1            , 2   , 32,
19097         0xfc0001ff, 0xa0000130, 0                      , 0,
19098         CP1_                },        /* ADD.fmt1 */
19099      { reserved_block      , 0                   , 0   , 32,
19100         0xfc0001ff, 0xa0000138, 0                      , 0,
19101         CP1_                },        /* POOL32F_0~*(39) */
19102      { reserved_block      , 0                   , 0   , 32,
19103         0xfc0001ff, 0xa0000140, 0                      , 0,
19104         CP1_                },        /* POOL32F_0~*(40) */
19105      { reserved_block      , 0                   , 0   , 32,
19106         0xfc0001ff, 0xa0000148, 0                      , 0,
19107         CP1_                },        /* POOL32F_0~*(41) */
19108      { reserved_block      , 0                   , 0   , 32,
19109         0xfc0001ff, 0xa0000150, 0                      , 0,
19110         CP1_                },        /* POOL32F_0~*(42) */
19111      { reserved_block      , 0                   , 0   , 32,
19112         0xfc0001ff, 0xa0000158, 0                      , 0,
19113         CP1_                },        /* POOL32F_0~*(43) */
19114      { reserved_block      , 0                   , 0   , 32,
19115         0xfc0001ff, 0xa0000160, 0                      , 0,
19116         CP1_                },        /* POOL32F_0~*(44) */
19117      { reserved_block      , 0                   , 0   , 32,
19118         0xfc0001ff, 0xa0000168, 0                      , 0,
19119         CP1_                },        /* POOL32F_0~*(45) */
19120      { pool                , SUB_fmt1            , 2   , 32,
19121         0xfc0001ff, 0xa0000170, 0                      , 0,
19122         CP1_                },        /* SUB.fmt1 */
19123      { reserved_block      , 0                   , 0   , 32,
19124         0xfc0001ff, 0xa0000178, 0                      , 0,
19125         CP1_                },        /* POOL32F_0~*(47) */
19126      { reserved_block      , 0                   , 0   , 32,
19127         0xfc0001ff, 0xa0000180, 0                      , 0,
19128         CP1_                },        /* POOL32F_0~*(48) */
19129      { reserved_block      , 0                   , 0   , 32,
19130         0xfc0001ff, 0xa0000188, 0                      , 0,
19131         CP1_                },        /* POOL32F_0~*(49) */
19132      { reserved_block      , 0                   , 0   , 32,
19133         0xfc0001ff, 0xa0000190, 0                      , 0,
19134         CP1_                },        /* POOL32F_0~*(50) */
19135      { reserved_block      , 0                   , 0   , 32,
19136         0xfc0001ff, 0xa0000198, 0                      , 0,
19137         CP1_                },        /* POOL32F_0~*(51) */
19138      { reserved_block      , 0                   , 0   , 32,
19139         0xfc0001ff, 0xa00001a0, 0                      , 0,
19140         CP1_                },        /* POOL32F_0~*(52) */
19141      { reserved_block      , 0                   , 0   , 32,
19142         0xfc0001ff, 0xa00001a8, 0                      , 0,
19143         CP1_                },        /* POOL32F_0~*(53) */
19144      { pool                , MUL_fmt1            , 2   , 32,
19145         0xfc0001ff, 0xa00001b0, 0                      , 0,
19146         CP1_                },        /* MUL.fmt1 */
19147      { pool                , MADDF_fmt           , 2   , 32,
19148         0xfc0001ff, 0xa00001b8, 0                      , 0,
19149         CP1_                },        /* MADDF.fmt */
19150      { reserved_block      , 0                   , 0   , 32,
19151         0xfc0001ff, 0xa00001c0, 0                      , 0,
19152         CP1_                },        /* POOL32F_0~*(56) */
19153      { reserved_block      , 0                   , 0   , 32,
19154         0xfc0001ff, 0xa00001c8, 0                      , 0,
19155         CP1_                },        /* POOL32F_0~*(57) */
19156      { reserved_block      , 0                   , 0   , 32,
19157         0xfc0001ff, 0xa00001d0, 0                      , 0,
19158         CP1_                },        /* POOL32F_0~*(58) */
19159      { reserved_block      , 0                   , 0   , 32,
19160         0xfc0001ff, 0xa00001d8, 0                      , 0,
19161         CP1_                },        /* POOL32F_0~*(59) */
19162      { reserved_block      , 0                   , 0   , 32,
19163         0xfc0001ff, 0xa00001e0, 0                      , 0,
19164         CP1_                },        /* POOL32F_0~*(60) */
19165      { reserved_block      , 0                   , 0   , 32,
19166         0xfc0001ff, 0xa00001e8, 0                      , 0,
19167         CP1_                },        /* POOL32F_0~*(61) */
19168      { pool                , DIV_fmt1            , 2   , 32,
19169         0xfc0001ff, 0xa00001f0, 0                      , 0,
19170         CP1_                },        /* DIV.fmt1 */
19171      { pool                , MSUBF_fmt           , 2   , 32,
19172         0xfc0001ff, 0xa00001f8, 0                      , 0,
19173         CP1_                },        /* MSUBF.fmt */
19174  };
19175  
19176  
19177  static const Pool MIN_fmt[2] = {
19178      { instruction         , 0                   , 0   , 32,
19179         0xfc00023f, 0xa0000003, &MIN_S            , 0,
19180         CP1_                },        /* MIN.S */
19181      { instruction         , 0                   , 0   , 32,
19182         0xfc00023f, 0xa0000203, &MIN_D            , 0,
19183         CP1_                },        /* MIN.D */
19184  };
19185  
19186  
19187  static const Pool MAX_fmt[2] = {
19188      { instruction         , 0                   , 0   , 32,
19189         0xfc00023f, 0xa000000b, &MAX_S            , 0,
19190         CP1_                },        /* MAX.S */
19191      { instruction         , 0                   , 0   , 32,
19192         0xfc00023f, 0xa000020b, &MAX_D            , 0,
19193         CP1_                },        /* MAX.D */
19194  };
19195  
19196  
19197  static const Pool MINA_fmt[2] = {
19198      { instruction         , 0                   , 0   , 32,
19199         0xfc00023f, 0xa0000023, &MINA_S           , 0,
19200         CP1_                },        /* MINA.S */
19201      { instruction         , 0                   , 0   , 32,
19202         0xfc00023f, 0xa0000223, &MINA_D           , 0,
19203         CP1_                },        /* MINA.D */
19204  };
19205  
19206  
19207  static const Pool MAXA_fmt[2] = {
19208      { instruction         , 0                   , 0   , 32,
19209         0xfc00023f, 0xa000002b, &MAXA_S           , 0,
19210         CP1_                },        /* MAXA.S */
19211      { instruction         , 0                   , 0   , 32,
19212         0xfc00023f, 0xa000022b, &MAXA_D           , 0,
19213         CP1_                },        /* MAXA.D */
19214  };
19215  
19216  
19217  static const Pool CVT_L_fmt[2] = {
19218      { instruction         , 0                   , 0   , 32,
19219         0xfc007fff, 0xa000013b, &CVT_L_S          , 0,
19220         CP1_                },        /* CVT.L.S */
19221      { instruction         , 0                   , 0   , 32,
19222         0xfc007fff, 0xa000413b, &CVT_L_D          , 0,
19223         CP1_                },        /* CVT.L.D */
19224  };
19225  
19226  
19227  static const Pool RSQRT_fmt[2] = {
19228      { instruction         , 0                   , 0   , 32,
19229         0xfc007fff, 0xa000023b, &RSQRT_S          , 0,
19230         CP1_                },        /* RSQRT.S */
19231      { instruction         , 0                   , 0   , 32,
19232         0xfc007fff, 0xa000423b, &RSQRT_D          , 0,
19233         CP1_                },        /* RSQRT.D */
19234  };
19235  
19236  
19237  static const Pool FLOOR_L_fmt[2] = {
19238      { instruction         , 0                   , 0   , 32,
19239         0xfc007fff, 0xa000033b, &FLOOR_L_S        , 0,
19240         CP1_                },        /* FLOOR.L.S */
19241      { instruction         , 0                   , 0   , 32,
19242         0xfc007fff, 0xa000433b, &FLOOR_L_D        , 0,
19243         CP1_                },        /* FLOOR.L.D */
19244  };
19245  
19246  
19247  static const Pool CVT_W_fmt[2] = {
19248      { instruction         , 0                   , 0   , 32,
19249         0xfc007fff, 0xa000093b, &CVT_W_S          , 0,
19250         CP1_                },        /* CVT.W.S */
19251      { instruction         , 0                   , 0   , 32,
19252         0xfc007fff, 0xa000493b, &CVT_W_D          , 0,
19253         CP1_                },        /* CVT.W.D */
19254  };
19255  
19256  
19257  static const Pool SQRT_fmt[2] = {
19258      { instruction         , 0                   , 0   , 32,
19259         0xfc007fff, 0xa0000a3b, &SQRT_S           , 0,
19260         CP1_                },        /* SQRT.S */
19261      { instruction         , 0                   , 0   , 32,
19262         0xfc007fff, 0xa0004a3b, &SQRT_D           , 0,
19263         CP1_                },        /* SQRT.D */
19264  };
19265  
19266  
19267  static const Pool FLOOR_W_fmt[2] = {
19268      { instruction         , 0                   , 0   , 32,
19269         0xfc007fff, 0xa0000b3b, &FLOOR_W_S        , 0,
19270         CP1_                },        /* FLOOR.W.S */
19271      { instruction         , 0                   , 0   , 32,
19272         0xfc007fff, 0xa0004b3b, &FLOOR_W_D        , 0,
19273         CP1_                },        /* FLOOR.W.D */
19274  };
19275  
19276  
19277  static const Pool RECIP_fmt[2] = {
19278      { instruction         , 0                   , 0   , 32,
19279         0xfc007fff, 0xa000123b, &RECIP_S          , 0,
19280         CP1_                },        /* RECIP.S */
19281      { instruction         , 0                   , 0   , 32,
19282         0xfc007fff, 0xa000523b, &RECIP_D          , 0,
19283         CP1_                },        /* RECIP.D */
19284  };
19285  
19286  
19287  static const Pool CEIL_L_fmt[2] = {
19288      { instruction         , 0                   , 0   , 32,
19289         0xfc007fff, 0xa000133b, &CEIL_L_S         , 0,
19290         CP1_                },        /* CEIL.L.S */
19291      { instruction         , 0                   , 0   , 32,
19292         0xfc007fff, 0xa000533b, &CEIL_L_D         , 0,
19293         CP1_                },        /* CEIL.L.D */
19294  };
19295  
19296  
19297  static const Pool CEIL_W_fmt[2] = {
19298      { instruction         , 0                   , 0   , 32,
19299         0xfc007fff, 0xa0001b3b, &CEIL_W_S         , 0,
19300         CP1_                },        /* CEIL.W.S */
19301      { instruction         , 0                   , 0   , 32,
19302         0xfc007fff, 0xa0005b3b, &CEIL_W_D         , 0,
19303         CP1_                },        /* CEIL.W.D */
19304  };
19305  
19306  
19307  static const Pool TRUNC_L_fmt[2] = {
19308      { instruction         , 0                   , 0   , 32,
19309         0xfc007fff, 0xa000233b, &TRUNC_L_S        , 0,
19310         CP1_                },        /* TRUNC.L.S */
19311      { instruction         , 0                   , 0   , 32,
19312         0xfc007fff, 0xa000633b, &TRUNC_L_D        , 0,
19313         CP1_                },        /* TRUNC.L.D */
19314  };
19315  
19316  
19317  static const Pool TRUNC_W_fmt[2] = {
19318      { instruction         , 0                   , 0   , 32,
19319         0xfc007fff, 0xa0002b3b, &TRUNC_W_S        , 0,
19320         CP1_                },        /* TRUNC.W.S */
19321      { instruction         , 0                   , 0   , 32,
19322         0xfc007fff, 0xa0006b3b, &TRUNC_W_D        , 0,
19323         CP1_                },        /* TRUNC.W.D */
19324  };
19325  
19326  
19327  static const Pool ROUND_L_fmt[2] = {
19328      { instruction         , 0                   , 0   , 32,
19329         0xfc007fff, 0xa000333b, &ROUND_L_S        , 0,
19330         CP1_                },        /* ROUND.L.S */
19331      { instruction         , 0                   , 0   , 32,
19332         0xfc007fff, 0xa000733b, &ROUND_L_D        , 0,
19333         CP1_                },        /* ROUND.L.D */
19334  };
19335  
19336  
19337  static const Pool ROUND_W_fmt[2] = {
19338      { instruction         , 0                   , 0   , 32,
19339         0xfc007fff, 0xa0003b3b, &ROUND_W_S        , 0,
19340         CP1_                },        /* ROUND.W.S */
19341      { instruction         , 0                   , 0   , 32,
19342         0xfc007fff, 0xa0007b3b, &ROUND_W_D        , 0,
19343         CP1_                },        /* ROUND.W.D */
19344  };
19345  
19346  
19347  static const Pool POOL32Fxf_0[64] = {
19348      { reserved_block      , 0                   , 0   , 32,
19349         0xfc003fff, 0xa000003b, 0                      , 0,
19350         CP1_                },        /* POOL32Fxf_0~*(0) */
19351      { pool                , CVT_L_fmt           , 2   , 32,
19352         0xfc003fff, 0xa000013b, 0                      , 0,
19353         CP1_                },        /* CVT.L.fmt */
19354      { pool                , RSQRT_fmt           , 2   , 32,
19355         0xfc003fff, 0xa000023b, 0                      , 0,
19356         CP1_                },        /* RSQRT.fmt */
19357      { pool                , FLOOR_L_fmt         , 2   , 32,
19358         0xfc003fff, 0xa000033b, 0                      , 0,
19359         CP1_                },        /* FLOOR.L.fmt */
19360      { reserved_block      , 0                   , 0   , 32,
19361         0xfc003fff, 0xa000043b, 0                      , 0,
19362         CP1_                },        /* POOL32Fxf_0~*(4) */
19363      { reserved_block      , 0                   , 0   , 32,
19364         0xfc003fff, 0xa000053b, 0                      , 0,
19365         CP1_                },        /* POOL32Fxf_0~*(5) */
19366      { reserved_block      , 0                   , 0   , 32,
19367         0xfc003fff, 0xa000063b, 0                      , 0,
19368         CP1_                },        /* POOL32Fxf_0~*(6) */
19369      { reserved_block      , 0                   , 0   , 32,
19370         0xfc003fff, 0xa000073b, 0                      , 0,
19371         CP1_                },        /* POOL32Fxf_0~*(7) */
19372      { reserved_block      , 0                   , 0   , 32,
19373         0xfc003fff, 0xa000083b, 0                      , 0,
19374         CP1_                },        /* POOL32Fxf_0~*(8) */
19375      { pool                , CVT_W_fmt           , 2   , 32,
19376         0xfc003fff, 0xa000093b, 0                      , 0,
19377         CP1_                },        /* CVT.W.fmt */
19378      { pool                , SQRT_fmt            , 2   , 32,
19379         0xfc003fff, 0xa0000a3b, 0                      , 0,
19380         CP1_                },        /* SQRT.fmt */
19381      { pool                , FLOOR_W_fmt         , 2   , 32,
19382         0xfc003fff, 0xa0000b3b, 0                      , 0,
19383         CP1_                },        /* FLOOR.W.fmt */
19384      { reserved_block      , 0                   , 0   , 32,
19385         0xfc003fff, 0xa0000c3b, 0                      , 0,
19386         CP1_                },        /* POOL32Fxf_0~*(12) */
19387      { reserved_block      , 0                   , 0   , 32,
19388         0xfc003fff, 0xa0000d3b, 0                      , 0,
19389         CP1_                },        /* POOL32Fxf_0~*(13) */
19390      { reserved_block      , 0                   , 0   , 32,
19391         0xfc003fff, 0xa0000e3b, 0                      , 0,
19392         CP1_                },        /* POOL32Fxf_0~*(14) */
19393      { reserved_block      , 0                   , 0   , 32,
19394         0xfc003fff, 0xa0000f3b, 0                      , 0,
19395         CP1_                },        /* POOL32Fxf_0~*(15) */
19396      { instruction         , 0                   , 0   , 32,
19397         0xfc003fff, 0xa000103b, &CFC1             , 0,
19398         CP1_                },        /* CFC1 */
19399      { reserved_block      , 0                   , 0   , 32,
19400         0xfc003fff, 0xa000113b, 0                      , 0,
19401         CP1_                },        /* POOL32Fxf_0~*(17) */
19402      { pool                , RECIP_fmt           , 2   , 32,
19403         0xfc003fff, 0xa000123b, 0                      , 0,
19404         CP1_                },        /* RECIP.fmt */
19405      { pool                , CEIL_L_fmt          , 2   , 32,
19406         0xfc003fff, 0xa000133b, 0                      , 0,
19407         CP1_                },        /* CEIL.L.fmt */
19408      { reserved_block      , 0                   , 0   , 32,
19409         0xfc003fff, 0xa000143b, 0                      , 0,
19410         CP1_                },        /* POOL32Fxf_0~*(20) */
19411      { reserved_block      , 0                   , 0   , 32,
19412         0xfc003fff, 0xa000153b, 0                      , 0,
19413         CP1_                },        /* POOL32Fxf_0~*(21) */
19414      { reserved_block      , 0                   , 0   , 32,
19415         0xfc003fff, 0xa000163b, 0                      , 0,
19416         CP1_                },        /* POOL32Fxf_0~*(22) */
19417      { reserved_block      , 0                   , 0   , 32,
19418         0xfc003fff, 0xa000173b, 0                      , 0,
19419         CP1_                },        /* POOL32Fxf_0~*(23) */
19420      { instruction         , 0                   , 0   , 32,
19421         0xfc003fff, 0xa000183b, &CTC1             , 0,
19422         CP1_                },        /* CTC1 */
19423      { reserved_block      , 0                   , 0   , 32,
19424         0xfc003fff, 0xa000193b, 0                      , 0,
19425         CP1_                },        /* POOL32Fxf_0~*(25) */
19426      { reserved_block      , 0                   , 0   , 32,
19427         0xfc003fff, 0xa0001a3b, 0                      , 0,
19428         CP1_                },        /* POOL32Fxf_0~*(26) */
19429      { pool                , CEIL_W_fmt          , 2   , 32,
19430         0xfc003fff, 0xa0001b3b, 0                      , 0,
19431         CP1_                },        /* CEIL.W.fmt */
19432      { reserved_block      , 0                   , 0   , 32,
19433         0xfc003fff, 0xa0001c3b, 0                      , 0,
19434         CP1_                },        /* POOL32Fxf_0~*(28) */
19435      { reserved_block      , 0                   , 0   , 32,
19436         0xfc003fff, 0xa0001d3b, 0                      , 0,
19437         CP1_                },        /* POOL32Fxf_0~*(29) */
19438      { reserved_block      , 0                   , 0   , 32,
19439         0xfc003fff, 0xa0001e3b, 0                      , 0,
19440         CP1_                },        /* POOL32Fxf_0~*(30) */
19441      { reserved_block      , 0                   , 0   , 32,
19442         0xfc003fff, 0xa0001f3b, 0                      , 0,
19443         CP1_                },        /* POOL32Fxf_0~*(31) */
19444      { instruction         , 0                   , 0   , 32,
19445         0xfc003fff, 0xa000203b, &MFC1             , 0,
19446         CP1_                },        /* MFC1 */
19447      { instruction         , 0                   , 0   , 32,
19448         0xfc003fff, 0xa000213b, &CVT_S_PL         , 0,
19449         CP1_                },        /* CVT.S.PL */
19450      { reserved_block      , 0                   , 0   , 32,
19451         0xfc003fff, 0xa000223b, 0                      , 0,
19452         CP1_                },        /* POOL32Fxf_0~*(34) */
19453      { pool                , TRUNC_L_fmt         , 2   , 32,
19454         0xfc003fff, 0xa000233b, 0                      , 0,
19455         CP1_                },        /* TRUNC.L.fmt */
19456      { instruction         , 0                   , 0   , 32,
19457         0xfc003fff, 0xa000243b, &DMFC1            , 0,
19458         CP1_ | MIPS64_      },        /* DMFC1 */
19459      { reserved_block      , 0                   , 0   , 32,
19460         0xfc003fff, 0xa000253b, 0                      , 0,
19461         CP1_                },        /* POOL32Fxf_0~*(37) */
19462      { reserved_block      , 0                   , 0   , 32,
19463         0xfc003fff, 0xa000263b, 0                      , 0,
19464         CP1_                },        /* POOL32Fxf_0~*(38) */
19465      { reserved_block      , 0                   , 0   , 32,
19466         0xfc003fff, 0xa000273b, 0                      , 0,
19467         CP1_                },        /* POOL32Fxf_0~*(39) */
19468      { instruction         , 0                   , 0   , 32,
19469         0xfc003fff, 0xa000283b, &MTC1             , 0,
19470         CP1_                },        /* MTC1 */
19471      { instruction         , 0                   , 0   , 32,
19472         0xfc003fff, 0xa000293b, &CVT_S_PU         , 0,
19473         CP1_                },        /* CVT.S.PU */
19474      { reserved_block      , 0                   , 0   , 32,
19475         0xfc003fff, 0xa0002a3b, 0                      , 0,
19476         CP1_                },        /* POOL32Fxf_0~*(42) */
19477      { pool                , TRUNC_W_fmt         , 2   , 32,
19478         0xfc003fff, 0xa0002b3b, 0                      , 0,
19479         CP1_                },        /* TRUNC.W.fmt */
19480      { instruction         , 0                   , 0   , 32,
19481         0xfc003fff, 0xa0002c3b, &DMTC1            , 0,
19482         CP1_ | MIPS64_      },        /* DMTC1 */
19483      { reserved_block      , 0                   , 0   , 32,
19484         0xfc003fff, 0xa0002d3b, 0                      , 0,
19485         CP1_                },        /* POOL32Fxf_0~*(45) */
19486      { reserved_block      , 0                   , 0   , 32,
19487         0xfc003fff, 0xa0002e3b, 0                      , 0,
19488         CP1_                },        /* POOL32Fxf_0~*(46) */
19489      { reserved_block      , 0                   , 0   , 32,
19490         0xfc003fff, 0xa0002f3b, 0                      , 0,
19491         CP1_                },        /* POOL32Fxf_0~*(47) */
19492      { instruction         , 0                   , 0   , 32,
19493         0xfc003fff, 0xa000303b, &MFHC1            , 0,
19494         CP1_                },        /* MFHC1 */
19495      { reserved_block      , 0                   , 0   , 32,
19496         0xfc003fff, 0xa000313b, 0                      , 0,
19497         CP1_                },        /* POOL32Fxf_0~*(49) */
19498      { reserved_block      , 0                   , 0   , 32,
19499         0xfc003fff, 0xa000323b, 0                      , 0,
19500         CP1_                },        /* POOL32Fxf_0~*(50) */
19501      { pool                , ROUND_L_fmt         , 2   , 32,
19502         0xfc003fff, 0xa000333b, 0                      , 0,
19503         CP1_                },        /* ROUND.L.fmt */
19504      { reserved_block      , 0                   , 0   , 32,
19505         0xfc003fff, 0xa000343b, 0                      , 0,
19506         CP1_                },        /* POOL32Fxf_0~*(52) */
19507      { reserved_block      , 0                   , 0   , 32,
19508         0xfc003fff, 0xa000353b, 0                      , 0,
19509         CP1_                },        /* POOL32Fxf_0~*(53) */
19510      { reserved_block      , 0                   , 0   , 32,
19511         0xfc003fff, 0xa000363b, 0                      , 0,
19512         CP1_                },        /* POOL32Fxf_0~*(54) */
19513      { reserved_block      , 0                   , 0   , 32,
19514         0xfc003fff, 0xa000373b, 0                      , 0,
19515         CP1_                },        /* POOL32Fxf_0~*(55) */
19516      { instruction         , 0                   , 0   , 32,
19517         0xfc003fff, 0xa000383b, &MTHC1            , 0,
19518         CP1_                },        /* MTHC1 */
19519      { reserved_block      , 0                   , 0   , 32,
19520         0xfc003fff, 0xa000393b, 0                      , 0,
19521         CP1_                },        /* POOL32Fxf_0~*(57) */
19522      { reserved_block      , 0                   , 0   , 32,
19523         0xfc003fff, 0xa0003a3b, 0                      , 0,
19524         CP1_                },        /* POOL32Fxf_0~*(58) */
19525      { pool                , ROUND_W_fmt         , 2   , 32,
19526         0xfc003fff, 0xa0003b3b, 0                      , 0,
19527         CP1_                },        /* ROUND.W.fmt */
19528      { reserved_block      , 0                   , 0   , 32,
19529         0xfc003fff, 0xa0003c3b, 0                      , 0,
19530         CP1_                },        /* POOL32Fxf_0~*(60) */
19531      { reserved_block      , 0                   , 0   , 32,
19532         0xfc003fff, 0xa0003d3b, 0                      , 0,
19533         CP1_                },        /* POOL32Fxf_0~*(61) */
19534      { reserved_block      , 0                   , 0   , 32,
19535         0xfc003fff, 0xa0003e3b, 0                      , 0,
19536         CP1_                },        /* POOL32Fxf_0~*(62) */
19537      { reserved_block      , 0                   , 0   , 32,
19538         0xfc003fff, 0xa0003f3b, 0                      , 0,
19539         CP1_                },        /* POOL32Fxf_0~*(63) */
19540  };
19541  
19542  
19543  static const Pool MOV_fmt[4] = {
19544      { instruction         , 0                   , 0   , 32,
19545         0xfc007fff, 0xa000007b, &MOV_S            , 0,
19546         CP1_                },        /* MOV.S */
19547      { instruction         , 0                   , 0   , 32,
19548         0xfc007fff, 0xa000207b, &MOV_D            , 0,
19549         CP1_                },        /* MOV.D */
19550      { reserved_block      , 0                   , 0   , 32,
19551         0xfc007fff, 0xa000407b, 0                      , 0,
19552         CP1_                },        /* MOV.fmt~*(2) */
19553      { reserved_block      , 0                   , 0   , 32,
19554         0xfc007fff, 0xa000607b, 0                      , 0,
19555         CP1_                },        /* MOV.fmt~*(3) */
19556  };
19557  
19558  
19559  static const Pool ABS_fmt[4] = {
19560      { instruction         , 0                   , 0   , 32,
19561         0xfc007fff, 0xa000037b, &ABS_S            , 0,
19562         CP1_                },        /* ABS.S */
19563      { instruction         , 0                   , 0   , 32,
19564         0xfc007fff, 0xa000237b, &ABS_D            , 0,
19565         CP1_                },        /* ABS.D */
19566      { reserved_block      , 0                   , 0   , 32,
19567         0xfc007fff, 0xa000437b, 0                      , 0,
19568         CP1_                },        /* ABS.fmt~*(2) */
19569      { reserved_block      , 0                   , 0   , 32,
19570         0xfc007fff, 0xa000637b, 0                      , 0,
19571         CP1_                },        /* ABS.fmt~*(3) */
19572  };
19573  
19574  
19575  static const Pool NEG_fmt[4] = {
19576      { instruction         , 0                   , 0   , 32,
19577         0xfc007fff, 0xa0000b7b, &NEG_S            , 0,
19578         CP1_                },        /* NEG.S */
19579      { instruction         , 0                   , 0   , 32,
19580         0xfc007fff, 0xa0002b7b, &NEG_D            , 0,
19581         CP1_                },        /* NEG.D */
19582      { reserved_block      , 0                   , 0   , 32,
19583         0xfc007fff, 0xa0004b7b, 0                      , 0,
19584         CP1_                },        /* NEG.fmt~*(2) */
19585      { reserved_block      , 0                   , 0   , 32,
19586         0xfc007fff, 0xa0006b7b, 0                      , 0,
19587         CP1_                },        /* NEG.fmt~*(3) */
19588  };
19589  
19590  
19591  static const Pool CVT_D_fmt[4] = {
19592      { instruction         , 0                   , 0   , 32,
19593         0xfc007fff, 0xa000137b, &CVT_D_S          , 0,
19594         CP1_                },        /* CVT.D.S */
19595      { instruction         , 0                   , 0   , 32,
19596         0xfc007fff, 0xa000337b, &CVT_D_W          , 0,
19597         CP1_                },        /* CVT.D.W */
19598      { instruction         , 0                   , 0   , 32,
19599         0xfc007fff, 0xa000537b, &CVT_D_L          , 0,
19600         CP1_                },        /* CVT.D.L */
19601      { reserved_block      , 0                   , 0   , 32,
19602         0xfc007fff, 0xa000737b, 0                      , 0,
19603         CP1_                },        /* CVT.D.fmt~*(3) */
19604  };
19605  
19606  
19607  static const Pool CVT_S_fmt[4] = {
19608      { instruction         , 0                   , 0   , 32,
19609         0xfc007fff, 0xa0001b7b, &CVT_S_D          , 0,
19610         CP1_                },        /* CVT.S.D */
19611      { instruction         , 0                   , 0   , 32,
19612         0xfc007fff, 0xa0003b7b, &CVT_S_W          , 0,
19613         CP1_                },        /* CVT.S.W */
19614      { instruction         , 0                   , 0   , 32,
19615         0xfc007fff, 0xa0005b7b, &CVT_S_L          , 0,
19616         CP1_                },        /* CVT.S.L */
19617      { reserved_block      , 0                   , 0   , 32,
19618         0xfc007fff, 0xa0007b7b, 0                      , 0,
19619         CP1_                },        /* CVT.S.fmt~*(3) */
19620  };
19621  
19622  
19623  static const Pool POOL32Fxf_1[32] = {
19624      { pool                , MOV_fmt             , 4   , 32,
19625         0xfc001fff, 0xa000007b, 0                      , 0,
19626         CP1_                },        /* MOV.fmt */
19627      { reserved_block      , 0                   , 0   , 32,
19628         0xfc001fff, 0xa000017b, 0                      , 0,
19629         CP1_                },        /* POOL32Fxf_1~*(1) */
19630      { reserved_block      , 0                   , 0   , 32,
19631         0xfc001fff, 0xa000027b, 0                      , 0,
19632         CP1_                },        /* POOL32Fxf_1~*(2) */
19633      { pool                , ABS_fmt             , 4   , 32,
19634         0xfc001fff, 0xa000037b, 0                      , 0,
19635         CP1_                },        /* ABS.fmt */
19636      { reserved_block      , 0                   , 0   , 32,
19637         0xfc001fff, 0xa000047b, 0                      , 0,
19638         CP1_                },        /* POOL32Fxf_1~*(4) */
19639      { reserved_block      , 0                   , 0   , 32,
19640         0xfc001fff, 0xa000057b, 0                      , 0,
19641         CP1_                },        /* POOL32Fxf_1~*(5) */
19642      { reserved_block      , 0                   , 0   , 32,
19643         0xfc001fff, 0xa000067b, 0                      , 0,
19644         CP1_                },        /* POOL32Fxf_1~*(6) */
19645      { reserved_block      , 0                   , 0   , 32,
19646         0xfc001fff, 0xa000077b, 0                      , 0,
19647         CP1_                },        /* POOL32Fxf_1~*(7) */
19648      { reserved_block      , 0                   , 0   , 32,
19649         0xfc001fff, 0xa000087b, 0                      , 0,
19650         CP1_                },        /* POOL32Fxf_1~*(8) */
19651      { reserved_block      , 0                   , 0   , 32,
19652         0xfc001fff, 0xa000097b, 0                      , 0,
19653         CP1_                },        /* POOL32Fxf_1~*(9) */
19654      { reserved_block      , 0                   , 0   , 32,
19655         0xfc001fff, 0xa0000a7b, 0                      , 0,
19656         CP1_                },        /* POOL32Fxf_1~*(10) */
19657      { pool                , NEG_fmt             , 4   , 32,
19658         0xfc001fff, 0xa0000b7b, 0                      , 0,
19659         CP1_                },        /* NEG.fmt */
19660      { reserved_block      , 0                   , 0   , 32,
19661         0xfc001fff, 0xa0000c7b, 0                      , 0,
19662         CP1_                },        /* POOL32Fxf_1~*(12) */
19663      { reserved_block      , 0                   , 0   , 32,
19664         0xfc001fff, 0xa0000d7b, 0                      , 0,
19665         CP1_                },        /* POOL32Fxf_1~*(13) */
19666      { reserved_block      , 0                   , 0   , 32,
19667         0xfc001fff, 0xa0000e7b, 0                      , 0,
19668         CP1_                },        /* POOL32Fxf_1~*(14) */
19669      { reserved_block      , 0                   , 0   , 32,
19670         0xfc001fff, 0xa0000f7b, 0                      , 0,
19671         CP1_                },        /* POOL32Fxf_1~*(15) */
19672      { reserved_block      , 0                   , 0   , 32,
19673         0xfc001fff, 0xa000107b, 0                      , 0,
19674         CP1_                },        /* POOL32Fxf_1~*(16) */
19675      { reserved_block      , 0                   , 0   , 32,
19676         0xfc001fff, 0xa000117b, 0                      , 0,
19677         CP1_                },        /* POOL32Fxf_1~*(17) */
19678      { reserved_block      , 0                   , 0   , 32,
19679         0xfc001fff, 0xa000127b, 0                      , 0,
19680         CP1_                },        /* POOL32Fxf_1~*(18) */
19681      { pool                , CVT_D_fmt           , 4   , 32,
19682         0xfc001fff, 0xa000137b, 0                      , 0,
19683         CP1_                },        /* CVT.D.fmt */
19684      { reserved_block      , 0                   , 0   , 32,
19685         0xfc001fff, 0xa000147b, 0                      , 0,
19686         CP1_                },        /* POOL32Fxf_1~*(20) */
19687      { reserved_block      , 0                   , 0   , 32,
19688         0xfc001fff, 0xa000157b, 0                      , 0,
19689         CP1_                },        /* POOL32Fxf_1~*(21) */
19690      { reserved_block      , 0                   , 0   , 32,
19691         0xfc001fff, 0xa000167b, 0                      , 0,
19692         CP1_                },        /* POOL32Fxf_1~*(22) */
19693      { reserved_block      , 0                   , 0   , 32,
19694         0xfc001fff, 0xa000177b, 0                      , 0,
19695         CP1_                },        /* POOL32Fxf_1~*(23) */
19696      { reserved_block      , 0                   , 0   , 32,
19697         0xfc001fff, 0xa000187b, 0                      , 0,
19698         CP1_                },        /* POOL32Fxf_1~*(24) */
19699      { reserved_block      , 0                   , 0   , 32,
19700         0xfc001fff, 0xa000197b, 0                      , 0,
19701         CP1_                },        /* POOL32Fxf_1~*(25) */
19702      { reserved_block      , 0                   , 0   , 32,
19703         0xfc001fff, 0xa0001a7b, 0                      , 0,
19704         CP1_                },        /* POOL32Fxf_1~*(26) */
19705      { pool                , CVT_S_fmt           , 4   , 32,
19706         0xfc001fff, 0xa0001b7b, 0                      , 0,
19707         CP1_                },        /* CVT.S.fmt */
19708      { reserved_block      , 0                   , 0   , 32,
19709         0xfc001fff, 0xa0001c7b, 0                      , 0,
19710         CP1_                },        /* POOL32Fxf_1~*(28) */
19711      { reserved_block      , 0                   , 0   , 32,
19712         0xfc001fff, 0xa0001d7b, 0                      , 0,
19713         CP1_                },        /* POOL32Fxf_1~*(29) */
19714      { reserved_block      , 0                   , 0   , 32,
19715         0xfc001fff, 0xa0001e7b, 0                      , 0,
19716         CP1_                },        /* POOL32Fxf_1~*(30) */
19717      { reserved_block      , 0                   , 0   , 32,
19718         0xfc001fff, 0xa0001f7b, 0                      , 0,
19719         CP1_                },        /* POOL32Fxf_1~*(31) */
19720  };
19721  
19722  
19723  static const Pool POOL32Fxf[4] = {
19724      { pool                , POOL32Fxf_0         , 64  , 32,
19725         0xfc0000ff, 0xa000003b, 0                      , 0,
19726         CP1_                },        /* POOL32Fxf_0 */
19727      { pool                , POOL32Fxf_1         , 32  , 32,
19728         0xfc0000ff, 0xa000007b, 0                      , 0,
19729         CP1_                },        /* POOL32Fxf_1 */
19730      { reserved_block      , 0                   , 0   , 32,
19731         0xfc0000ff, 0xa00000bb, 0                      , 0,
19732         CP1_                },        /* POOL32Fxf~*(2) */
19733      { reserved_block      , 0                   , 0   , 32,
19734         0xfc0000ff, 0xa00000fb, 0                      , 0,
19735         CP1_                },        /* POOL32Fxf~*(3) */
19736  };
19737  
19738  
19739  static const Pool POOL32F_3[8] = {
19740      { pool                , MIN_fmt             , 2   , 32,
19741         0xfc00003f, 0xa0000003, 0                      , 0,
19742         CP1_                },        /* MIN.fmt */
19743      { pool                , MAX_fmt             , 2   , 32,
19744         0xfc00003f, 0xa000000b, 0                      , 0,
19745         CP1_                },        /* MAX.fmt */
19746      { reserved_block      , 0                   , 0   , 32,
19747         0xfc00003f, 0xa0000013, 0                      , 0,
19748         CP1_                },        /* POOL32F_3~*(2) */
19749      { reserved_block      , 0                   , 0   , 32,
19750         0xfc00003f, 0xa000001b, 0                      , 0,
19751         CP1_                },        /* POOL32F_3~*(3) */
19752      { pool                , MINA_fmt            , 2   , 32,
19753         0xfc00003f, 0xa0000023, 0                      , 0,
19754         CP1_                },        /* MINA.fmt */
19755      { pool                , MAXA_fmt            , 2   , 32,
19756         0xfc00003f, 0xa000002b, 0                      , 0,
19757         CP1_                },        /* MAXA.fmt */
19758      { reserved_block      , 0                   , 0   , 32,
19759         0xfc00003f, 0xa0000033, 0                      , 0,
19760         CP1_                },        /* POOL32F_3~*(6) */
19761      { pool                , POOL32Fxf           , 4   , 32,
19762         0xfc00003f, 0xa000003b, 0                      , 0,
19763         CP1_                },        /* POOL32Fxf */
19764  };
19765  
19766  
19767  static const Pool CMP_condn_S[32] = {
19768      { instruction         , 0                   , 0   , 32,
19769         0xfc0007ff, 0xa0000005, &CMP_AF_S         , 0,
19770         CP1_                },        /* CMP.AF.S */
19771      { instruction         , 0                   , 0   , 32,
19772         0xfc0007ff, 0xa0000045, &CMP_UN_S         , 0,
19773         CP1_                },        /* CMP.UN.S */
19774      { instruction         , 0                   , 0   , 32,
19775         0xfc0007ff, 0xa0000085, &CMP_EQ_S         , 0,
19776         CP1_                },        /* CMP.EQ.S */
19777      { instruction         , 0                   , 0   , 32,
19778         0xfc0007ff, 0xa00000c5, &CMP_UEQ_S        , 0,
19779         CP1_                },        /* CMP.UEQ.S */
19780      { instruction         , 0                   , 0   , 32,
19781         0xfc0007ff, 0xa0000105, &CMP_LT_S         , 0,
19782         CP1_                },        /* CMP.LT.S */
19783      { instruction         , 0                   , 0   , 32,
19784         0xfc0007ff, 0xa0000145, &CMP_ULT_S        , 0,
19785         CP1_                },        /* CMP.ULT.S */
19786      { instruction         , 0                   , 0   , 32,
19787         0xfc0007ff, 0xa0000185, &CMP_LE_S         , 0,
19788         CP1_                },        /* CMP.LE.S */
19789      { instruction         , 0                   , 0   , 32,
19790         0xfc0007ff, 0xa00001c5, &CMP_ULE_S        , 0,
19791         CP1_                },        /* CMP.ULE.S */
19792      { instruction         , 0                   , 0   , 32,
19793         0xfc0007ff, 0xa0000205, &CMP_SAF_S        , 0,
19794         CP1_                },        /* CMP.SAF.S */
19795      { instruction         , 0                   , 0   , 32,
19796         0xfc0007ff, 0xa0000245, &CMP_SUN_S        , 0,
19797         CP1_                },        /* CMP.SUN.S */
19798      { instruction         , 0                   , 0   , 32,
19799         0xfc0007ff, 0xa0000285, &CMP_SEQ_S        , 0,
19800         CP1_                },        /* CMP.SEQ.S */
19801      { instruction         , 0                   , 0   , 32,
19802         0xfc0007ff, 0xa00002c5, &CMP_SUEQ_S       , 0,
19803         CP1_                },        /* CMP.SUEQ.S */
19804      { instruction         , 0                   , 0   , 32,
19805         0xfc0007ff, 0xa0000305, &CMP_SLT_S        , 0,
19806         CP1_                },        /* CMP.SLT.S */
19807      { instruction         , 0                   , 0   , 32,
19808         0xfc0007ff, 0xa0000345, &CMP_SULT_S       , 0,
19809         CP1_                },        /* CMP.SULT.S */
19810      { instruction         , 0                   , 0   , 32,
19811         0xfc0007ff, 0xa0000385, &CMP_SLE_S        , 0,
19812         CP1_                },        /* CMP.SLE.S */
19813      { instruction         , 0                   , 0   , 32,
19814         0xfc0007ff, 0xa00003c5, &CMP_SULE_S       , 0,
19815         CP1_                },        /* CMP.SULE.S */
19816      { reserved_block      , 0                   , 0   , 32,
19817         0xfc0007ff, 0xa0000405, 0                      , 0,
19818         CP1_                },        /* CMP.condn.S~*(16) */
19819      { instruction         , 0                   , 0   , 32,
19820         0xfc0007ff, 0xa0000445, &CMP_OR_S         , 0,
19821         CP1_                },        /* CMP.OR.S */
19822      { instruction         , 0                   , 0   , 32,
19823         0xfc0007ff, 0xa0000485, &CMP_UNE_S        , 0,
19824         CP1_                },        /* CMP.UNE.S */
19825      { instruction         , 0                   , 0   , 32,
19826         0xfc0007ff, 0xa00004c5, &CMP_NE_S         , 0,
19827         CP1_                },        /* CMP.NE.S */
19828      { reserved_block      , 0                   , 0   , 32,
19829         0xfc0007ff, 0xa0000505, 0                      , 0,
19830         CP1_                },        /* CMP.condn.S~*(20) */
19831      { reserved_block      , 0                   , 0   , 32,
19832         0xfc0007ff, 0xa0000545, 0                      , 0,
19833         CP1_                },        /* CMP.condn.S~*(21) */
19834      { reserved_block      , 0                   , 0   , 32,
19835         0xfc0007ff, 0xa0000585, 0                      , 0,
19836         CP1_                },        /* CMP.condn.S~*(22) */
19837      { reserved_block      , 0                   , 0   , 32,
19838         0xfc0007ff, 0xa00005c5, 0                      , 0,
19839         CP1_                },        /* CMP.condn.S~*(23) */
19840      { reserved_block      , 0                   , 0   , 32,
19841         0xfc0007ff, 0xa0000605, 0                      , 0,
19842         CP1_                },        /* CMP.condn.S~*(24) */
19843      { instruction         , 0                   , 0   , 32,
19844         0xfc0007ff, 0xa0000645, &CMP_SOR_S        , 0,
19845         CP1_                },        /* CMP.SOR.S */
19846      { instruction         , 0                   , 0   , 32,
19847         0xfc0007ff, 0xa0000685, &CMP_SUNE_S       , 0,
19848         CP1_                },        /* CMP.SUNE.S */
19849      { instruction         , 0                   , 0   , 32,
19850         0xfc0007ff, 0xa00006c5, &CMP_SNE_S        , 0,
19851         CP1_                },        /* CMP.SNE.S */
19852      { reserved_block      , 0                   , 0   , 32,
19853         0xfc0007ff, 0xa0000705, 0                      , 0,
19854         CP1_                },        /* CMP.condn.S~*(28) */
19855      { reserved_block      , 0                   , 0   , 32,
19856         0xfc0007ff, 0xa0000745, 0                      , 0,
19857         CP1_                },        /* CMP.condn.S~*(29) */
19858      { reserved_block      , 0                   , 0   , 32,
19859         0xfc0007ff, 0xa0000785, 0                      , 0,
19860         CP1_                },        /* CMP.condn.S~*(30) */
19861      { reserved_block      , 0                   , 0   , 32,
19862         0xfc0007ff, 0xa00007c5, 0                      , 0,
19863         CP1_                },        /* CMP.condn.S~*(31) */
19864  };
19865  
19866  
19867  static const Pool CMP_condn_D[32] = {
19868      { instruction         , 0                   , 0   , 32,
19869         0xfc0007ff, 0xa0000015, &CMP_AF_D         , 0,
19870         CP1_                },        /* CMP.AF.D */
19871      { instruction         , 0                   , 0   , 32,
19872         0xfc0007ff, 0xa0000055, &CMP_UN_D         , 0,
19873         CP1_                },        /* CMP.UN.D */
19874      { instruction         , 0                   , 0   , 32,
19875         0xfc0007ff, 0xa0000095, &CMP_EQ_D         , 0,
19876         CP1_                },        /* CMP.EQ.D */
19877      { instruction         , 0                   , 0   , 32,
19878         0xfc0007ff, 0xa00000d5, &CMP_UEQ_D        , 0,
19879         CP1_                },        /* CMP.UEQ.D */
19880      { instruction         , 0                   , 0   , 32,
19881         0xfc0007ff, 0xa0000115, &CMP_LT_D         , 0,
19882         CP1_                },        /* CMP.LT.D */
19883      { instruction         , 0                   , 0   , 32,
19884         0xfc0007ff, 0xa0000155, &CMP_ULT_D        , 0,
19885         CP1_                },        /* CMP.ULT.D */
19886      { instruction         , 0                   , 0   , 32,
19887         0xfc0007ff, 0xa0000195, &CMP_LE_D         , 0,
19888         CP1_                },        /* CMP.LE.D */
19889      { instruction         , 0                   , 0   , 32,
19890         0xfc0007ff, 0xa00001d5, &CMP_ULE_D        , 0,
19891         CP1_                },        /* CMP.ULE.D */
19892      { instruction         , 0                   , 0   , 32,
19893         0xfc0007ff, 0xa0000215, &CMP_SAF_D        , 0,
19894         CP1_                },        /* CMP.SAF.D */
19895      { instruction         , 0                   , 0   , 32,
19896         0xfc0007ff, 0xa0000255, &CMP_SUN_D        , 0,
19897         CP1_                },        /* CMP.SUN.D */
19898      { instruction         , 0                   , 0   , 32,
19899         0xfc0007ff, 0xa0000295, &CMP_SEQ_D        , 0,
19900         CP1_                },        /* CMP.SEQ.D */
19901      { instruction         , 0                   , 0   , 32,
19902         0xfc0007ff, 0xa00002d5, &CMP_SUEQ_D       , 0,
19903         CP1_                },        /* CMP.SUEQ.D */
19904      { instruction         , 0                   , 0   , 32,
19905         0xfc0007ff, 0xa0000315, &CMP_SLT_D        , 0,
19906         CP1_                },        /* CMP.SLT.D */
19907      { instruction         , 0                   , 0   , 32,
19908         0xfc0007ff, 0xa0000355, &CMP_SULT_D       , 0,
19909         CP1_                },        /* CMP.SULT.D */
19910      { instruction         , 0                   , 0   , 32,
19911         0xfc0007ff, 0xa0000395, &CMP_SLE_D        , 0,
19912         CP1_                },        /* CMP.SLE.D */
19913      { instruction         , 0                   , 0   , 32,
19914         0xfc0007ff, 0xa00003d5, &CMP_SULE_D       , 0,
19915         CP1_                },        /* CMP.SULE.D */
19916      { reserved_block      , 0                   , 0   , 32,
19917         0xfc0007ff, 0xa0000415, 0                      , 0,
19918         CP1_                },        /* CMP.condn.D~*(16) */
19919      { instruction         , 0                   , 0   , 32,
19920         0xfc0007ff, 0xa0000455, &CMP_OR_D         , 0,
19921         CP1_                },        /* CMP.OR.D */
19922      { instruction         , 0                   , 0   , 32,
19923         0xfc0007ff, 0xa0000495, &CMP_UNE_D        , 0,
19924         CP1_                },        /* CMP.UNE.D */
19925      { instruction         , 0                   , 0   , 32,
19926         0xfc0007ff, 0xa00004d5, &CMP_NE_D         , 0,
19927         CP1_                },        /* CMP.NE.D */
19928      { reserved_block      , 0                   , 0   , 32,
19929         0xfc0007ff, 0xa0000515, 0                      , 0,
19930         CP1_                },        /* CMP.condn.D~*(20) */
19931      { reserved_block      , 0                   , 0   , 32,
19932         0xfc0007ff, 0xa0000555, 0                      , 0,
19933         CP1_                },        /* CMP.condn.D~*(21) */
19934      { reserved_block      , 0                   , 0   , 32,
19935         0xfc0007ff, 0xa0000595, 0                      , 0,
19936         CP1_                },        /* CMP.condn.D~*(22) */
19937      { reserved_block      , 0                   , 0   , 32,
19938         0xfc0007ff, 0xa00005d5, 0                      , 0,
19939         CP1_                },        /* CMP.condn.D~*(23) */
19940      { reserved_block      , 0                   , 0   , 32,
19941         0xfc0007ff, 0xa0000615, 0                      , 0,
19942         CP1_                },        /* CMP.condn.D~*(24) */
19943      { instruction         , 0                   , 0   , 32,
19944         0xfc0007ff, 0xa0000655, &CMP_SOR_D        , 0,
19945         CP1_                },        /* CMP.SOR.D */
19946      { instruction         , 0                   , 0   , 32,
19947         0xfc0007ff, 0xa0000695, &CMP_SUNE_D       , 0,
19948         CP1_                },        /* CMP.SUNE.D */
19949      { instruction         , 0                   , 0   , 32,
19950         0xfc0007ff, 0xa00006d5, &CMP_SNE_D        , 0,
19951         CP1_                },        /* CMP.SNE.D */
19952      { reserved_block      , 0                   , 0   , 32,
19953         0xfc0007ff, 0xa0000715, 0                      , 0,
19954         CP1_                },        /* CMP.condn.D~*(28) */
19955      { reserved_block      , 0                   , 0   , 32,
19956         0xfc0007ff, 0xa0000755, 0                      , 0,
19957         CP1_                },        /* CMP.condn.D~*(29) */
19958      { reserved_block      , 0                   , 0   , 32,
19959         0xfc0007ff, 0xa0000795, 0                      , 0,
19960         CP1_                },        /* CMP.condn.D~*(30) */
19961      { reserved_block      , 0                   , 0   , 32,
19962         0xfc0007ff, 0xa00007d5, 0                      , 0,
19963         CP1_                },        /* CMP.condn.D~*(31) */
19964  };
19965  
19966  
19967  static const Pool POOL32F_5[8] = {
19968      { pool                , CMP_condn_S         , 32  , 32,
19969         0xfc00003f, 0xa0000005, 0                      , 0,
19970         CP1_                },        /* CMP.condn.S */
19971      { reserved_block      , 0                   , 0   , 32,
19972         0xfc00003f, 0xa000000d, 0                      , 0,
19973         CP1_                },        /* POOL32F_5~*(1) */
19974      { pool                , CMP_condn_D         , 32  , 32,
19975         0xfc00003f, 0xa0000015, 0                      , 0,
19976         CP1_                },        /* CMP.condn.D */
19977      { reserved_block      , 0                   , 0   , 32,
19978         0xfc00003f, 0xa000001d, 0                      , 0,
19979         CP1_                },        /* POOL32F_5~*(3) */
19980      { reserved_block      , 0                   , 0   , 32,
19981         0xfc00003f, 0xa0000025, 0                      , 0,
19982         CP1_                },        /* POOL32F_5~*(4) */
19983      { reserved_block      , 0                   , 0   , 32,
19984         0xfc00003f, 0xa000002d, 0                      , 0,
19985         CP1_                },        /* POOL32F_5~*(5) */
19986      { reserved_block      , 0                   , 0   , 32,
19987         0xfc00003f, 0xa0000035, 0                      , 0,
19988         CP1_                },        /* POOL32F_5~*(6) */
19989      { reserved_block      , 0                   , 0   , 32,
19990         0xfc00003f, 0xa000003d, 0                      , 0,
19991         CP1_                },        /* POOL32F_5~*(7) */
19992  };
19993  
19994  
19995  static const Pool POOL32F[8] = {
19996      { pool                , POOL32F_0           , 64  , 32,
19997         0xfc000007, 0xa0000000, 0                      , 0,
19998         CP1_                },        /* POOL32F_0 */
19999      { reserved_block      , 0                   , 0   , 32,
20000         0xfc000007, 0xa0000001, 0                      , 0,
20001         CP1_                },        /* POOL32F~*(1) */
20002      { reserved_block      , 0                   , 0   , 32,
20003         0xfc000007, 0xa0000002, 0                      , 0,
20004         CP1_                },        /* POOL32F~*(2) */
20005      { pool                , POOL32F_3           , 8   , 32,
20006         0xfc000007, 0xa0000003, 0                      , 0,
20007         CP1_                },        /* POOL32F_3 */
20008      { reserved_block      , 0                   , 0   , 32,
20009         0xfc000007, 0xa0000004, 0                      , 0,
20010         CP1_                },        /* POOL32F~*(4) */
20011      { pool                , POOL32F_5           , 8   , 32,
20012         0xfc000007, 0xa0000005, 0                      , 0,
20013         CP1_                },        /* POOL32F_5 */
20014      { reserved_block      , 0                   , 0   , 32,
20015         0xfc000007, 0xa0000006, 0                      , 0,
20016         CP1_                },        /* POOL32F~*(6) */
20017      { reserved_block      , 0                   , 0   , 32,
20018         0xfc000007, 0xa0000007, 0                      , 0,
20019         CP1_                },        /* POOL32F~*(7) */
20020  };
20021  
20022  
20023  static const Pool POOL32S_0[64] = {
20024      { reserved_block      , 0                   , 0   , 32,
20025         0xfc0001ff, 0xc0000000, 0                      , 0,
20026         0x0                 },        /* POOL32S_0~*(0) */
20027      { instruction         , 0                   , 0   , 32,
20028         0xfc0001ff, 0xc0000008, &DLSA             , 0,
20029         MIPS64_             },        /* DLSA */
20030      { instruction         , 0                   , 0   , 32,
20031         0xfc0001ff, 0xc0000010, &DSLLV            , 0,
20032         MIPS64_             },        /* DSLLV */
20033      { instruction         , 0                   , 0   , 32,
20034         0xfc0001ff, 0xc0000018, &DMUL             , 0,
20035         MIPS64_             },        /* DMUL */
20036      { reserved_block      , 0                   , 0   , 32,
20037         0xfc0001ff, 0xc0000020, 0                      , 0,
20038         0x0                 },        /* POOL32S_0~*(4) */
20039      { reserved_block      , 0                   , 0   , 32,
20040         0xfc0001ff, 0xc0000028, 0                      , 0,
20041         0x0                 },        /* POOL32S_0~*(5) */
20042      { reserved_block      , 0                   , 0   , 32,
20043         0xfc0001ff, 0xc0000030, 0                      , 0,
20044         0x0                 },        /* POOL32S_0~*(6) */
20045      { reserved_block      , 0                   , 0   , 32,
20046         0xfc0001ff, 0xc0000038, 0                      , 0,
20047         0x0                 },        /* POOL32S_0~*(7) */
20048      { reserved_block      , 0                   , 0   , 32,
20049         0xfc0001ff, 0xc0000040, 0                      , 0,
20050         0x0                 },        /* POOL32S_0~*(8) */
20051      { reserved_block      , 0                   , 0   , 32,
20052         0xfc0001ff, 0xc0000048, 0                      , 0,
20053         0x0                 },        /* POOL32S_0~*(9) */
20054      { instruction         , 0                   , 0   , 32,
20055         0xfc0001ff, 0xc0000050, &DSRLV            , 0,
20056         MIPS64_             },        /* DSRLV */
20057      { instruction         , 0                   , 0   , 32,
20058         0xfc0001ff, 0xc0000058, &DMUH             , 0,
20059         MIPS64_             },        /* DMUH */
20060      { reserved_block      , 0                   , 0   , 32,
20061         0xfc0001ff, 0xc0000060, 0                      , 0,
20062         0x0                 },        /* POOL32S_0~*(12) */
20063      { reserved_block      , 0                   , 0   , 32,
20064         0xfc0001ff, 0xc0000068, 0                      , 0,
20065         0x0                 },        /* POOL32S_0~*(13) */
20066      { reserved_block      , 0                   , 0   , 32,
20067         0xfc0001ff, 0xc0000070, 0                      , 0,
20068         0x0                 },        /* POOL32S_0~*(14) */
20069      { reserved_block      , 0                   , 0   , 32,
20070         0xfc0001ff, 0xc0000078, 0                      , 0,
20071         0x0                 },        /* POOL32S_0~*(15) */
20072      { reserved_block      , 0                   , 0   , 32,
20073         0xfc0001ff, 0xc0000080, 0                      , 0,
20074         0x0                 },        /* POOL32S_0~*(16) */
20075      { reserved_block      , 0                   , 0   , 32,
20076         0xfc0001ff, 0xc0000088, 0                      , 0,
20077         0x0                 },        /* POOL32S_0~*(17) */
20078      { instruction         , 0                   , 0   , 32,
20079         0xfc0001ff, 0xc0000090, &DSRAV            , 0,
20080         MIPS64_             },        /* DSRAV */
20081      { instruction         , 0                   , 0   , 32,
20082         0xfc0001ff, 0xc0000098, &DMULU            , 0,
20083         MIPS64_             },        /* DMULU */
20084      { reserved_block      , 0                   , 0   , 32,
20085         0xfc0001ff, 0xc00000a0, 0                      , 0,
20086         0x0                 },        /* POOL32S_0~*(20) */
20087      { reserved_block      , 0                   , 0   , 32,
20088         0xfc0001ff, 0xc00000a8, 0                      , 0,
20089         0x0                 },        /* POOL32S_0~*(21) */
20090      { reserved_block      , 0                   , 0   , 32,
20091         0xfc0001ff, 0xc00000b0, 0                      , 0,
20092         0x0                 },        /* POOL32S_0~*(22) */
20093      { reserved_block      , 0                   , 0   , 32,
20094         0xfc0001ff, 0xc00000b8, 0                      , 0,
20095         0x0                 },        /* POOL32S_0~*(23) */
20096      { reserved_block      , 0                   , 0   , 32,
20097         0xfc0001ff, 0xc00000c0, 0                      , 0,
20098         0x0                 },        /* POOL32S_0~*(24) */
20099      { reserved_block      , 0                   , 0   , 32,
20100         0xfc0001ff, 0xc00000c8, 0                      , 0,
20101         0x0                 },        /* POOL32S_0~*(25) */
20102      { instruction         , 0                   , 0   , 32,
20103         0xfc0001ff, 0xc00000d0, &DROTRV           , 0,
20104         MIPS64_             },        /* DROTRV */
20105      { instruction         , 0                   , 0   , 32,
20106         0xfc0001ff, 0xc00000d8, &DMUHU            , 0,
20107         MIPS64_             },        /* DMUHU */
20108      { reserved_block      , 0                   , 0   , 32,
20109         0xfc0001ff, 0xc00000e0, 0                      , 0,
20110         0x0                 },        /* POOL32S_0~*(28) */
20111      { reserved_block      , 0                   , 0   , 32,
20112         0xfc0001ff, 0xc00000e8, 0                      , 0,
20113         0x0                 },        /* POOL32S_0~*(29) */
20114      { reserved_block      , 0                   , 0   , 32,
20115         0xfc0001ff, 0xc00000f0, 0                      , 0,
20116         0x0                 },        /* POOL32S_0~*(30) */
20117      { reserved_block      , 0                   , 0   , 32,
20118         0xfc0001ff, 0xc00000f8, 0                      , 0,
20119         0x0                 },        /* POOL32S_0~*(31) */
20120      { reserved_block      , 0                   , 0   , 32,
20121         0xfc0001ff, 0xc0000100, 0                      , 0,
20122         0x0                 },        /* POOL32S_0~*(32) */
20123      { reserved_block      , 0                   , 0   , 32,
20124         0xfc0001ff, 0xc0000108, 0                      , 0,
20125         0x0                 },        /* POOL32S_0~*(33) */
20126      { instruction         , 0                   , 0   , 32,
20127         0xfc0001ff, 0xc0000110, &DADD             , 0,
20128         MIPS64_             },        /* DADD */
20129      { instruction         , 0                   , 0   , 32,
20130         0xfc0001ff, 0xc0000118, &DDIV             , 0,
20131         MIPS64_             },        /* DDIV */
20132      { reserved_block      , 0                   , 0   , 32,
20133         0xfc0001ff, 0xc0000120, 0                      , 0,
20134         0x0                 },        /* POOL32S_0~*(36) */
20135      { reserved_block      , 0                   , 0   , 32,
20136         0xfc0001ff, 0xc0000128, 0                      , 0,
20137         0x0                 },        /* POOL32S_0~*(37) */
20138      { reserved_block      , 0                   , 0   , 32,
20139         0xfc0001ff, 0xc0000130, 0                      , 0,
20140         0x0                 },        /* POOL32S_0~*(38) */
20141      { reserved_block      , 0                   , 0   , 32,
20142         0xfc0001ff, 0xc0000138, 0                      , 0,
20143         0x0                 },        /* POOL32S_0~*(39) */
20144      { reserved_block      , 0                   , 0   , 32,
20145         0xfc0001ff, 0xc0000140, 0                      , 0,
20146         0x0                 },        /* POOL32S_0~*(40) */
20147      { reserved_block      , 0                   , 0   , 32,
20148         0xfc0001ff, 0xc0000148, 0                      , 0,
20149         0x0                 },        /* POOL32S_0~*(41) */
20150      { instruction         , 0                   , 0   , 32,
20151         0xfc0001ff, 0xc0000150, &DADDU            , 0,
20152         MIPS64_             },        /* DADDU */
20153      { instruction         , 0                   , 0   , 32,
20154         0xfc0001ff, 0xc0000158, &DMOD             , 0,
20155         MIPS64_             },        /* DMOD */
20156      { reserved_block      , 0                   , 0   , 32,
20157         0xfc0001ff, 0xc0000160, 0                      , 0,
20158         0x0                 },        /* POOL32S_0~*(44) */
20159      { reserved_block      , 0                   , 0   , 32,
20160         0xfc0001ff, 0xc0000168, 0                      , 0,
20161         0x0                 },        /* POOL32S_0~*(45) */
20162      { reserved_block      , 0                   , 0   , 32,
20163         0xfc0001ff, 0xc0000170, 0                      , 0,
20164         0x0                 },        /* POOL32S_0~*(46) */
20165      { reserved_block      , 0                   , 0   , 32,
20166         0xfc0001ff, 0xc0000178, 0                      , 0,
20167         0x0                 },        /* POOL32S_0~*(47) */
20168      { reserved_block      , 0                   , 0   , 32,
20169         0xfc0001ff, 0xc0000180, 0                      , 0,
20170         0x0                 },        /* POOL32S_0~*(48) */
20171      { reserved_block      , 0                   , 0   , 32,
20172         0xfc0001ff, 0xc0000188, 0                      , 0,
20173         0x0                 },        /* POOL32S_0~*(49) */
20174      { instruction         , 0                   , 0   , 32,
20175         0xfc0001ff, 0xc0000190, &DSUB             , 0,
20176         MIPS64_             },        /* DSUB */
20177      { instruction         , 0                   , 0   , 32,
20178         0xfc0001ff, 0xc0000198, &DDIVU            , 0,
20179         MIPS64_             },        /* DDIVU */
20180      { reserved_block      , 0                   , 0   , 32,
20181         0xfc0001ff, 0xc00001a0, 0                      , 0,
20182         0x0                 },        /* POOL32S_0~*(52) */
20183      { reserved_block      , 0                   , 0   , 32,
20184         0xfc0001ff, 0xc00001a8, 0                      , 0,
20185         0x0                 },        /* POOL32S_0~*(53) */
20186      { reserved_block      , 0                   , 0   , 32,
20187         0xfc0001ff, 0xc00001b0, 0                      , 0,
20188         0x0                 },        /* POOL32S_0~*(54) */
20189      { reserved_block      , 0                   , 0   , 32,
20190         0xfc0001ff, 0xc00001b8, 0                      , 0,
20191         0x0                 },        /* POOL32S_0~*(55) */
20192      { reserved_block      , 0                   , 0   , 32,
20193         0xfc0001ff, 0xc00001c0, 0                      , 0,
20194         0x0                 },        /* POOL32S_0~*(56) */
20195      { reserved_block      , 0                   , 0   , 32,
20196         0xfc0001ff, 0xc00001c8, 0                      , 0,
20197         0x0                 },        /* POOL32S_0~*(57) */
20198      { instruction         , 0                   , 0   , 32,
20199         0xfc0001ff, 0xc00001d0, &DSUBU            , 0,
20200         MIPS64_             },        /* DSUBU */
20201      { instruction         , 0                   , 0   , 32,
20202         0xfc0001ff, 0xc00001d8, &DMODU            , 0,
20203         MIPS64_             },        /* DMODU */
20204      { reserved_block      , 0                   , 0   , 32,
20205         0xfc0001ff, 0xc00001e0, 0                      , 0,
20206         0x0                 },        /* POOL32S_0~*(60) */
20207      { reserved_block      , 0                   , 0   , 32,
20208         0xfc0001ff, 0xc00001e8, 0                      , 0,
20209         0x0                 },        /* POOL32S_0~*(61) */
20210      { reserved_block      , 0                   , 0   , 32,
20211         0xfc0001ff, 0xc00001f0, 0                      , 0,
20212         0x0                 },        /* POOL32S_0~*(62) */
20213      { reserved_block      , 0                   , 0   , 32,
20214         0xfc0001ff, 0xc00001f8, 0                      , 0,
20215         0x0                 },        /* POOL32S_0~*(63) */
20216  };
20217  
20218  
20219  static const Pool POOL32Sxf_4[128] = {
20220      { reserved_block      , 0                   , 0   , 32,
20221         0xfc00ffff, 0xc000013c, 0                      , 0,
20222         0x0                 },        /* POOL32Sxf_4~*(0) */
20223      { reserved_block      , 0                   , 0   , 32,
20224         0xfc00ffff, 0xc000033c, 0                      , 0,
20225         0x0                 },        /* POOL32Sxf_4~*(1) */
20226      { reserved_block      , 0                   , 0   , 32,
20227         0xfc00ffff, 0xc000053c, 0                      , 0,
20228         0x0                 },        /* POOL32Sxf_4~*(2) */
20229      { reserved_block      , 0                   , 0   , 32,
20230         0xfc00ffff, 0xc000073c, 0                      , 0,
20231         0x0                 },        /* POOL32Sxf_4~*(3) */
20232      { reserved_block      , 0                   , 0   , 32,
20233         0xfc00ffff, 0xc000093c, 0                      , 0,
20234         0x0                 },        /* POOL32Sxf_4~*(4) */
20235      { reserved_block      , 0                   , 0   , 32,
20236         0xfc00ffff, 0xc0000b3c, 0                      , 0,
20237         0x0                 },        /* POOL32Sxf_4~*(5) */
20238      { reserved_block      , 0                   , 0   , 32,
20239         0xfc00ffff, 0xc0000d3c, 0                      , 0,
20240         0x0                 },        /* POOL32Sxf_4~*(6) */
20241      { reserved_block      , 0                   , 0   , 32,
20242         0xfc00ffff, 0xc0000f3c, 0                      , 0,
20243         0x0                 },        /* POOL32Sxf_4~*(7) */
20244      { reserved_block      , 0                   , 0   , 32,
20245         0xfc00ffff, 0xc000113c, 0                      , 0,
20246         0x0                 },        /* POOL32Sxf_4~*(8) */
20247      { reserved_block      , 0                   , 0   , 32,
20248         0xfc00ffff, 0xc000133c, 0                      , 0,
20249         0x0                 },        /* POOL32Sxf_4~*(9) */
20250      { reserved_block      , 0                   , 0   , 32,
20251         0xfc00ffff, 0xc000153c, 0                      , 0,
20252         0x0                 },        /* POOL32Sxf_4~*(10) */
20253      { reserved_block      , 0                   , 0   , 32,
20254         0xfc00ffff, 0xc000173c, 0                      , 0,
20255         0x0                 },        /* POOL32Sxf_4~*(11) */
20256      { reserved_block      , 0                   , 0   , 32,
20257         0xfc00ffff, 0xc000193c, 0                      , 0,
20258         0x0                 },        /* POOL32Sxf_4~*(12) */
20259      { reserved_block      , 0                   , 0   , 32,
20260         0xfc00ffff, 0xc0001b3c, 0                      , 0,
20261         0x0                 },        /* POOL32Sxf_4~*(13) */
20262      { reserved_block      , 0                   , 0   , 32,
20263         0xfc00ffff, 0xc0001d3c, 0                      , 0,
20264         0x0                 },        /* POOL32Sxf_4~*(14) */
20265      { reserved_block      , 0                   , 0   , 32,
20266         0xfc00ffff, 0xc0001f3c, 0                      , 0,
20267         0x0                 },        /* POOL32Sxf_4~*(15) */
20268      { reserved_block      , 0                   , 0   , 32,
20269         0xfc00ffff, 0xc000213c, 0                      , 0,
20270         0x0                 },        /* POOL32Sxf_4~*(16) */
20271      { reserved_block      , 0                   , 0   , 32,
20272         0xfc00ffff, 0xc000233c, 0                      , 0,
20273         0x0                 },        /* POOL32Sxf_4~*(17) */
20274      { reserved_block      , 0                   , 0   , 32,
20275         0xfc00ffff, 0xc000253c, 0                      , 0,
20276         0x0                 },        /* POOL32Sxf_4~*(18) */
20277      { reserved_block      , 0                   , 0   , 32,
20278         0xfc00ffff, 0xc000273c, 0                      , 0,
20279         0x0                 },        /* POOL32Sxf_4~*(19) */
20280      { reserved_block      , 0                   , 0   , 32,
20281         0xfc00ffff, 0xc000293c, 0                      , 0,
20282         0x0                 },        /* POOL32Sxf_4~*(20) */
20283      { reserved_block      , 0                   , 0   , 32,
20284         0xfc00ffff, 0xc0002b3c, 0                      , 0,
20285         0x0                 },        /* POOL32Sxf_4~*(21) */
20286      { reserved_block      , 0                   , 0   , 32,
20287         0xfc00ffff, 0xc0002d3c, 0                      , 0,
20288         0x0                 },        /* POOL32Sxf_4~*(22) */
20289      { reserved_block      , 0                   , 0   , 32,
20290         0xfc00ffff, 0xc0002f3c, 0                      , 0,
20291         0x0                 },        /* POOL32Sxf_4~*(23) */
20292      { reserved_block      , 0                   , 0   , 32,
20293         0xfc00ffff, 0xc000313c, 0                      , 0,
20294         0x0                 },        /* POOL32Sxf_4~*(24) */
20295      { reserved_block      , 0                   , 0   , 32,
20296         0xfc00ffff, 0xc000333c, 0                      , 0,
20297         0x0                 },        /* POOL32Sxf_4~*(25) */
20298      { reserved_block      , 0                   , 0   , 32,
20299         0xfc00ffff, 0xc000353c, 0                      , 0,
20300         0x0                 },        /* POOL32Sxf_4~*(26) */
20301      { reserved_block      , 0                   , 0   , 32,
20302         0xfc00ffff, 0xc000373c, 0                      , 0,
20303         0x0                 },        /* POOL32Sxf_4~*(27) */
20304      { reserved_block      , 0                   , 0   , 32,
20305         0xfc00ffff, 0xc000393c, 0                      , 0,
20306         0x0                 },        /* POOL32Sxf_4~*(28) */
20307      { reserved_block      , 0                   , 0   , 32,
20308         0xfc00ffff, 0xc0003b3c, 0                      , 0,
20309         0x0                 },        /* POOL32Sxf_4~*(29) */
20310      { reserved_block      , 0                   , 0   , 32,
20311         0xfc00ffff, 0xc0003d3c, 0                      , 0,
20312         0x0                 },        /* POOL32Sxf_4~*(30) */
20313      { reserved_block      , 0                   , 0   , 32,
20314         0xfc00ffff, 0xc0003f3c, 0                      , 0,
20315         0x0                 },        /* POOL32Sxf_4~*(31) */
20316      { reserved_block      , 0                   , 0   , 32,
20317         0xfc00ffff, 0xc000413c, 0                      , 0,
20318         0x0                 },        /* POOL32Sxf_4~*(32) */
20319      { reserved_block      , 0                   , 0   , 32,
20320         0xfc00ffff, 0xc000433c, 0                      , 0,
20321         0x0                 },        /* POOL32Sxf_4~*(33) */
20322      { reserved_block      , 0                   , 0   , 32,
20323         0xfc00ffff, 0xc000453c, 0                      , 0,
20324         0x0                 },        /* POOL32Sxf_4~*(34) */
20325      { reserved_block      , 0                   , 0   , 32,
20326         0xfc00ffff, 0xc000473c, 0                      , 0,
20327         0x0                 },        /* POOL32Sxf_4~*(35) */
20328      { reserved_block      , 0                   , 0   , 32,
20329         0xfc00ffff, 0xc000493c, 0                      , 0,
20330         0x0                 },        /* POOL32Sxf_4~*(36) */
20331      { instruction         , 0                   , 0   , 32,
20332         0xfc00ffff, 0xc0004b3c, &DCLO             , 0,
20333         MIPS64_             },        /* DCLO */
20334      { reserved_block      , 0                   , 0   , 32,
20335         0xfc00ffff, 0xc0004d3c, 0                      , 0,
20336         0x0                 },        /* POOL32Sxf_4~*(38) */
20337      { reserved_block      , 0                   , 0   , 32,
20338         0xfc00ffff, 0xc0004f3c, 0                      , 0,
20339         0x0                 },        /* POOL32Sxf_4~*(39) */
20340      { reserved_block      , 0                   , 0   , 32,
20341         0xfc00ffff, 0xc000513c, 0                      , 0,
20342         0x0                 },        /* POOL32Sxf_4~*(40) */
20343      { reserved_block      , 0                   , 0   , 32,
20344         0xfc00ffff, 0xc000533c, 0                      , 0,
20345         0x0                 },        /* POOL32Sxf_4~*(41) */
20346      { reserved_block      , 0                   , 0   , 32,
20347         0xfc00ffff, 0xc000553c, 0                      , 0,
20348         0x0                 },        /* POOL32Sxf_4~*(42) */
20349      { reserved_block      , 0                   , 0   , 32,
20350         0xfc00ffff, 0xc000573c, 0                      , 0,
20351         0x0                 },        /* POOL32Sxf_4~*(43) */
20352      { reserved_block      , 0                   , 0   , 32,
20353         0xfc00ffff, 0xc000593c, 0                      , 0,
20354         0x0                 },        /* POOL32Sxf_4~*(44) */
20355      { instruction         , 0                   , 0   , 32,
20356         0xfc00ffff, 0xc0005b3c, &DCLZ             , 0,
20357         MIPS64_             },        /* DCLZ */
20358      { reserved_block      , 0                   , 0   , 32,
20359         0xfc00ffff, 0xc0005d3c, 0                      , 0,
20360         0x0                 },        /* POOL32Sxf_4~*(46) */
20361      { reserved_block      , 0                   , 0   , 32,
20362         0xfc00ffff, 0xc0005f3c, 0                      , 0,
20363         0x0                 },        /* POOL32Sxf_4~*(47) */
20364      { reserved_block      , 0                   , 0   , 32,
20365         0xfc00ffff, 0xc000613c, 0                      , 0,
20366         0x0                 },        /* POOL32Sxf_4~*(48) */
20367      { reserved_block      , 0                   , 0   , 32,
20368         0xfc00ffff, 0xc000633c, 0                      , 0,
20369         0x0                 },        /* POOL32Sxf_4~*(49) */
20370      { reserved_block      , 0                   , 0   , 32,
20371         0xfc00ffff, 0xc000653c, 0                      , 0,
20372         0x0                 },        /* POOL32Sxf_4~*(50) */
20373      { reserved_block      , 0                   , 0   , 32,
20374         0xfc00ffff, 0xc000673c, 0                      , 0,
20375         0x0                 },        /* POOL32Sxf_4~*(51) */
20376      { reserved_block      , 0                   , 0   , 32,
20377         0xfc00ffff, 0xc000693c, 0                      , 0,
20378         0x0                 },        /* POOL32Sxf_4~*(52) */
20379      { reserved_block      , 0                   , 0   , 32,
20380         0xfc00ffff, 0xc0006b3c, 0                      , 0,
20381         0x0                 },        /* POOL32Sxf_4~*(53) */
20382      { reserved_block      , 0                   , 0   , 32,
20383         0xfc00ffff, 0xc0006d3c, 0                      , 0,
20384         0x0                 },        /* POOL32Sxf_4~*(54) */
20385      { reserved_block      , 0                   , 0   , 32,
20386         0xfc00ffff, 0xc0006f3c, 0                      , 0,
20387         0x0                 },        /* POOL32Sxf_4~*(55) */
20388      { reserved_block      , 0                   , 0   , 32,
20389         0xfc00ffff, 0xc000713c, 0                      , 0,
20390         0x0                 },        /* POOL32Sxf_4~*(56) */
20391      { reserved_block      , 0                   , 0   , 32,
20392         0xfc00ffff, 0xc000733c, 0                      , 0,
20393         0x0                 },        /* POOL32Sxf_4~*(57) */
20394      { reserved_block      , 0                   , 0   , 32,
20395         0xfc00ffff, 0xc000753c, 0                      , 0,
20396         0x0                 },        /* POOL32Sxf_4~*(58) */
20397      { reserved_block      , 0                   , 0   , 32,
20398         0xfc00ffff, 0xc000773c, 0                      , 0,
20399         0x0                 },        /* POOL32Sxf_4~*(59) */
20400      { reserved_block      , 0                   , 0   , 32,
20401         0xfc00ffff, 0xc000793c, 0                      , 0,
20402         0x0                 },        /* POOL32Sxf_4~*(60) */
20403      { reserved_block      , 0                   , 0   , 32,
20404         0xfc00ffff, 0xc0007b3c, 0                      , 0,
20405         0x0                 },        /* POOL32Sxf_4~*(61) */
20406      { reserved_block      , 0                   , 0   , 32,
20407         0xfc00ffff, 0xc0007d3c, 0                      , 0,
20408         0x0                 },        /* POOL32Sxf_4~*(62) */
20409      { reserved_block      , 0                   , 0   , 32,
20410         0xfc00ffff, 0xc0007f3c, 0                      , 0,
20411         0x0                 },        /* POOL32Sxf_4~*(63) */
20412      { reserved_block      , 0                   , 0   , 32,
20413         0xfc00ffff, 0xc000813c, 0                      , 0,
20414         0x0                 },        /* POOL32Sxf_4~*(64) */
20415      { reserved_block      , 0                   , 0   , 32,
20416         0xfc00ffff, 0xc000833c, 0                      , 0,
20417         0x0                 },        /* POOL32Sxf_4~*(65) */
20418      { reserved_block      , 0                   , 0   , 32,
20419         0xfc00ffff, 0xc000853c, 0                      , 0,
20420         0x0                 },        /* POOL32Sxf_4~*(66) */
20421      { reserved_block      , 0                   , 0   , 32,
20422         0xfc00ffff, 0xc000873c, 0                      , 0,
20423         0x0                 },        /* POOL32Sxf_4~*(67) */
20424      { reserved_block      , 0                   , 0   , 32,
20425         0xfc00ffff, 0xc000893c, 0                      , 0,
20426         0x0                 },        /* POOL32Sxf_4~*(68) */
20427      { reserved_block      , 0                   , 0   , 32,
20428         0xfc00ffff, 0xc0008b3c, 0                      , 0,
20429         0x0                 },        /* POOL32Sxf_4~*(69) */
20430      { reserved_block      , 0                   , 0   , 32,
20431         0xfc00ffff, 0xc0008d3c, 0                      , 0,
20432         0x0                 },        /* POOL32Sxf_4~*(70) */
20433      { reserved_block      , 0                   , 0   , 32,
20434         0xfc00ffff, 0xc0008f3c, 0                      , 0,
20435         0x0                 },        /* POOL32Sxf_4~*(71) */
20436      { reserved_block      , 0                   , 0   , 32,
20437         0xfc00ffff, 0xc000913c, 0                      , 0,
20438         0x0                 },        /* POOL32Sxf_4~*(72) */
20439      { reserved_block      , 0                   , 0   , 32,
20440         0xfc00ffff, 0xc000933c, 0                      , 0,
20441         0x0                 },        /* POOL32Sxf_4~*(73) */
20442      { reserved_block      , 0                   , 0   , 32,
20443         0xfc00ffff, 0xc000953c, 0                      , 0,
20444         0x0                 },        /* POOL32Sxf_4~*(74) */
20445      { reserved_block      , 0                   , 0   , 32,
20446         0xfc00ffff, 0xc000973c, 0                      , 0,
20447         0x0                 },        /* POOL32Sxf_4~*(75) */
20448      { reserved_block      , 0                   , 0   , 32,
20449         0xfc00ffff, 0xc000993c, 0                      , 0,
20450         0x0                 },        /* POOL32Sxf_4~*(76) */
20451      { reserved_block      , 0                   , 0   , 32,
20452         0xfc00ffff, 0xc0009b3c, 0                      , 0,
20453         0x0                 },        /* POOL32Sxf_4~*(77) */
20454      { reserved_block      , 0                   , 0   , 32,
20455         0xfc00ffff, 0xc0009d3c, 0                      , 0,
20456         0x0                 },        /* POOL32Sxf_4~*(78) */
20457      { reserved_block      , 0                   , 0   , 32,
20458         0xfc00ffff, 0xc0009f3c, 0                      , 0,
20459         0x0                 },        /* POOL32Sxf_4~*(79) */
20460      { reserved_block      , 0                   , 0   , 32,
20461         0xfc00ffff, 0xc000a13c, 0                      , 0,
20462         0x0                 },        /* POOL32Sxf_4~*(80) */
20463      { reserved_block      , 0                   , 0   , 32,
20464         0xfc00ffff, 0xc000a33c, 0                      , 0,
20465         0x0                 },        /* POOL32Sxf_4~*(81) */
20466      { reserved_block      , 0                   , 0   , 32,
20467         0xfc00ffff, 0xc000a53c, 0                      , 0,
20468         0x0                 },        /* POOL32Sxf_4~*(82) */
20469      { reserved_block      , 0                   , 0   , 32,
20470         0xfc00ffff, 0xc000a73c, 0                      , 0,
20471         0x0                 },        /* POOL32Sxf_4~*(83) */
20472      { reserved_block      , 0                   , 0   , 32,
20473         0xfc00ffff, 0xc000a93c, 0                      , 0,
20474         0x0                 },        /* POOL32Sxf_4~*(84) */
20475      { reserved_block      , 0                   , 0   , 32,
20476         0xfc00ffff, 0xc000ab3c, 0                      , 0,
20477         0x0                 },        /* POOL32Sxf_4~*(85) */
20478      { reserved_block      , 0                   , 0   , 32,
20479         0xfc00ffff, 0xc000ad3c, 0                      , 0,
20480         0x0                 },        /* POOL32Sxf_4~*(86) */
20481      { reserved_block      , 0                   , 0   , 32,
20482         0xfc00ffff, 0xc000af3c, 0                      , 0,
20483         0x0                 },        /* POOL32Sxf_4~*(87) */
20484      { reserved_block      , 0                   , 0   , 32,
20485         0xfc00ffff, 0xc000b13c, 0                      , 0,
20486         0x0                 },        /* POOL32Sxf_4~*(88) */
20487      { reserved_block      , 0                   , 0   , 32,
20488         0xfc00ffff, 0xc000b33c, 0                      , 0,
20489         0x0                 },        /* POOL32Sxf_4~*(89) */
20490      { reserved_block      , 0                   , 0   , 32,
20491         0xfc00ffff, 0xc000b53c, 0                      , 0,
20492         0x0                 },        /* POOL32Sxf_4~*(90) */
20493      { reserved_block      , 0                   , 0   , 32,
20494         0xfc00ffff, 0xc000b73c, 0                      , 0,
20495         0x0                 },        /* POOL32Sxf_4~*(91) */
20496      { reserved_block      , 0                   , 0   , 32,
20497         0xfc00ffff, 0xc000b93c, 0                      , 0,
20498         0x0                 },        /* POOL32Sxf_4~*(92) */
20499      { reserved_block      , 0                   , 0   , 32,
20500         0xfc00ffff, 0xc000bb3c, 0                      , 0,
20501         0x0                 },        /* POOL32Sxf_4~*(93) */
20502      { reserved_block      , 0                   , 0   , 32,
20503         0xfc00ffff, 0xc000bd3c, 0                      , 0,
20504         0x0                 },        /* POOL32Sxf_4~*(94) */
20505      { reserved_block      , 0                   , 0   , 32,
20506         0xfc00ffff, 0xc000bf3c, 0                      , 0,
20507         0x0                 },        /* POOL32Sxf_4~*(95) */
20508      { reserved_block      , 0                   , 0   , 32,
20509         0xfc00ffff, 0xc000c13c, 0                      , 0,
20510         0x0                 },        /* POOL32Sxf_4~*(96) */
20511      { reserved_block      , 0                   , 0   , 32,
20512         0xfc00ffff, 0xc000c33c, 0                      , 0,
20513         0x0                 },        /* POOL32Sxf_4~*(97) */
20514      { reserved_block      , 0                   , 0   , 32,
20515         0xfc00ffff, 0xc000c53c, 0                      , 0,
20516         0x0                 },        /* POOL32Sxf_4~*(98) */
20517      { reserved_block      , 0                   , 0   , 32,
20518         0xfc00ffff, 0xc000c73c, 0                      , 0,
20519         0x0                 },        /* POOL32Sxf_4~*(99) */
20520      { reserved_block      , 0                   , 0   , 32,
20521         0xfc00ffff, 0xc000c93c, 0                      , 0,
20522         0x0                 },        /* POOL32Sxf_4~*(100) */
20523      { reserved_block      , 0                   , 0   , 32,
20524         0xfc00ffff, 0xc000cb3c, 0                      , 0,
20525         0x0                 },        /* POOL32Sxf_4~*(101) */
20526      { reserved_block      , 0                   , 0   , 32,
20527         0xfc00ffff, 0xc000cd3c, 0                      , 0,
20528         0x0                 },        /* POOL32Sxf_4~*(102) */
20529      { reserved_block      , 0                   , 0   , 32,
20530         0xfc00ffff, 0xc000cf3c, 0                      , 0,
20531         0x0                 },        /* POOL32Sxf_4~*(103) */
20532      { reserved_block      , 0                   , 0   , 32,
20533         0xfc00ffff, 0xc000d13c, 0                      , 0,
20534         0x0                 },        /* POOL32Sxf_4~*(104) */
20535      { reserved_block      , 0                   , 0   , 32,
20536         0xfc00ffff, 0xc000d33c, 0                      , 0,
20537         0x0                 },        /* POOL32Sxf_4~*(105) */
20538      { reserved_block      , 0                   , 0   , 32,
20539         0xfc00ffff, 0xc000d53c, 0                      , 0,
20540         0x0                 },        /* POOL32Sxf_4~*(106) */
20541      { reserved_block      , 0                   , 0   , 32,
20542         0xfc00ffff, 0xc000d73c, 0                      , 0,
20543         0x0                 },        /* POOL32Sxf_4~*(107) */
20544      { reserved_block      , 0                   , 0   , 32,
20545         0xfc00ffff, 0xc000d93c, 0                      , 0,
20546         0x0                 },        /* POOL32Sxf_4~*(108) */
20547      { reserved_block      , 0                   , 0   , 32,
20548         0xfc00ffff, 0xc000db3c, 0                      , 0,
20549         0x0                 },        /* POOL32Sxf_4~*(109) */
20550      { reserved_block      , 0                   , 0   , 32,
20551         0xfc00ffff, 0xc000dd3c, 0                      , 0,
20552         0x0                 },        /* POOL32Sxf_4~*(110) */
20553      { reserved_block      , 0                   , 0   , 32,
20554         0xfc00ffff, 0xc000df3c, 0                      , 0,
20555         0x0                 },        /* POOL32Sxf_4~*(111) */
20556      { reserved_block      , 0                   , 0   , 32,
20557         0xfc00ffff, 0xc000e13c, 0                      , 0,
20558         0x0                 },        /* POOL32Sxf_4~*(112) */
20559      { reserved_block      , 0                   , 0   , 32,
20560         0xfc00ffff, 0xc000e33c, 0                      , 0,
20561         0x0                 },        /* POOL32Sxf_4~*(113) */
20562      { reserved_block      , 0                   , 0   , 32,
20563         0xfc00ffff, 0xc000e53c, 0                      , 0,
20564         0x0                 },        /* POOL32Sxf_4~*(114) */
20565      { reserved_block      , 0                   , 0   , 32,
20566         0xfc00ffff, 0xc000e73c, 0                      , 0,
20567         0x0                 },        /* POOL32Sxf_4~*(115) */
20568      { reserved_block      , 0                   , 0   , 32,
20569         0xfc00ffff, 0xc000e93c, 0                      , 0,
20570         0x0                 },        /* POOL32Sxf_4~*(116) */
20571      { reserved_block      , 0                   , 0   , 32,
20572         0xfc00ffff, 0xc000eb3c, 0                      , 0,
20573         0x0                 },        /* POOL32Sxf_4~*(117) */
20574      { reserved_block      , 0                   , 0   , 32,
20575         0xfc00ffff, 0xc000ed3c, 0                      , 0,
20576         0x0                 },        /* POOL32Sxf_4~*(118) */
20577      { reserved_block      , 0                   , 0   , 32,
20578         0xfc00ffff, 0xc000ef3c, 0                      , 0,
20579         0x0                 },        /* POOL32Sxf_4~*(119) */
20580      { reserved_block      , 0                   , 0   , 32,
20581         0xfc00ffff, 0xc000f13c, 0                      , 0,
20582         0x0                 },        /* POOL32Sxf_4~*(120) */
20583      { reserved_block      , 0                   , 0   , 32,
20584         0xfc00ffff, 0xc000f33c, 0                      , 0,
20585         0x0                 },        /* POOL32Sxf_4~*(121) */
20586      { reserved_block      , 0                   , 0   , 32,
20587         0xfc00ffff, 0xc000f53c, 0                      , 0,
20588         0x0                 },        /* POOL32Sxf_4~*(122) */
20589      { reserved_block      , 0                   , 0   , 32,
20590         0xfc00ffff, 0xc000f73c, 0                      , 0,
20591         0x0                 },        /* POOL32Sxf_4~*(123) */
20592      { reserved_block      , 0                   , 0   , 32,
20593         0xfc00ffff, 0xc000f93c, 0                      , 0,
20594         0x0                 },        /* POOL32Sxf_4~*(124) */
20595      { reserved_block      , 0                   , 0   , 32,
20596         0xfc00ffff, 0xc000fb3c, 0                      , 0,
20597         0x0                 },        /* POOL32Sxf_4~*(125) */
20598      { reserved_block      , 0                   , 0   , 32,
20599         0xfc00ffff, 0xc000fd3c, 0                      , 0,
20600         0x0                 },        /* POOL32Sxf_4~*(126) */
20601      { reserved_block      , 0                   , 0   , 32,
20602         0xfc00ffff, 0xc000ff3c, 0                      , 0,
20603         0x0                 },        /* POOL32Sxf_4~*(127) */
20604  };
20605  
20606  
20607  static const Pool POOL32Sxf[8] = {
20608      { reserved_block      , 0                   , 0   , 32,
20609         0xfc0001ff, 0xc000003c, 0                      , 0,
20610         0x0                 },        /* POOL32Sxf~*(0) */
20611      { reserved_block      , 0                   , 0   , 32,
20612         0xfc0001ff, 0xc000007c, 0                      , 0,
20613         0x0                 },        /* POOL32Sxf~*(1) */
20614      { reserved_block      , 0                   , 0   , 32,
20615         0xfc0001ff, 0xc00000bc, 0                      , 0,
20616         0x0                 },        /* POOL32Sxf~*(2) */
20617      { reserved_block      , 0                   , 0   , 32,
20618         0xfc0001ff, 0xc00000fc, 0                      , 0,
20619         0x0                 },        /* POOL32Sxf~*(3) */
20620      { pool                , POOL32Sxf_4         , 128 , 32,
20621         0xfc0001ff, 0xc000013c, 0                      , 0,
20622         0x0                 },        /* POOL32Sxf_4 */
20623      { reserved_block      , 0                   , 0   , 32,
20624         0xfc0001ff, 0xc000017c, 0                      , 0,
20625         0x0                 },        /* POOL32Sxf~*(5) */
20626      { reserved_block      , 0                   , 0   , 32,
20627         0xfc0001ff, 0xc00001bc, 0                      , 0,
20628         0x0                 },        /* POOL32Sxf~*(6) */
20629      { reserved_block      , 0                   , 0   , 32,
20630         0xfc0001ff, 0xc00001fc, 0                      , 0,
20631         0x0                 },        /* POOL32Sxf~*(7) */
20632  };
20633  
20634  
20635  static const Pool POOL32S_4[8] = {
20636      { instruction         , 0                   , 0   , 32,
20637         0xfc00003f, 0xc0000004, &EXTD             , 0,
20638         MIPS64_             },        /* EXTD */
20639      { instruction         , 0                   , 0   , 32,
20640         0xfc00003f, 0xc000000c, &EXTD32           , 0,
20641         MIPS64_             },        /* EXTD32 */
20642      { reserved_block      , 0                   , 0   , 32,
20643         0xfc00003f, 0xc0000014, 0                      , 0,
20644         0x0                 },        /* POOL32S_4~*(2) */
20645      { reserved_block      , 0                   , 0   , 32,
20646         0xfc00003f, 0xc000001c, 0                      , 0,
20647         0x0                 },        /* POOL32S_4~*(3) */
20648      { reserved_block      , 0                   , 0   , 32,
20649         0xfc00003f, 0xc0000024, 0                      , 0,
20650         0x0                 },        /* POOL32S_4~*(4) */
20651      { reserved_block      , 0                   , 0   , 32,
20652         0xfc00003f, 0xc000002c, 0                      , 0,
20653         0x0                 },        /* POOL32S_4~*(5) */
20654      { reserved_block      , 0                   , 0   , 32,
20655         0xfc00003f, 0xc0000034, 0                      , 0,
20656         0x0                 },        /* POOL32S_4~*(6) */
20657      { pool                , POOL32Sxf           , 8   , 32,
20658         0xfc00003f, 0xc000003c, 0                      , 0,
20659         0x0                 },        /* POOL32Sxf */
20660  };
20661  
20662  
20663  static const Pool POOL32S[8] = {
20664      { pool                , POOL32S_0           , 64  , 32,
20665         0xfc000007, 0xc0000000, 0                      , 0,
20666         0x0                 },        /* POOL32S_0 */
20667      { reserved_block      , 0                   , 0   , 32,
20668         0xfc000007, 0xc0000001, 0                      , 0,
20669         0x0                 },        /* POOL32S~*(1) */
20670      { reserved_block      , 0                   , 0   , 32,
20671         0xfc000007, 0xc0000002, 0                      , 0,
20672         0x0                 },        /* POOL32S~*(2) */
20673      { reserved_block      , 0                   , 0   , 32,
20674         0xfc000007, 0xc0000003, 0                      , 0,
20675         0x0                 },        /* POOL32S~*(3) */
20676      { pool                , POOL32S_4           , 8   , 32,
20677         0xfc000007, 0xc0000004, 0                      , 0,
20678         0x0                 },        /* POOL32S_4 */
20679      { reserved_block      , 0                   , 0   , 32,
20680         0xfc000007, 0xc0000005, 0                      , 0,
20681         0x0                 },        /* POOL32S~*(5) */
20682      { reserved_block      , 0                   , 0   , 32,
20683         0xfc000007, 0xc0000006, 0                      , 0,
20684         0x0                 },        /* POOL32S~*(6) */
20685      { reserved_block      , 0                   , 0   , 32,
20686         0xfc000007, 0xc0000007, 0                      , 0,
20687         0x0                 },        /* POOL32S~*(7) */
20688  };
20689  
20690  
20691  static const Pool P_LUI[2] = {
20692      { instruction         , 0                   , 0   , 32,
20693         0xfc000002, 0xe0000000, &LUI              , 0,
20694         0x0                 },        /* LUI */
20695      { instruction         , 0                   , 0   , 32,
20696         0xfc000002, 0xe0000002, &ALUIPC           , 0,
20697         0x0                 },        /* ALUIPC */
20698  };
20699  
20700  
20701  static const Pool P_GP_LH[2] = {
20702      { instruction         , 0                   , 0   , 32,
20703         0xfc1c0001, 0x44100000, &LH_GP_           , 0,
20704         0x0                 },        /* LH[GP] */
20705      { instruction         , 0                   , 0   , 32,
20706         0xfc1c0001, 0x44100001, &LHU_GP_          , 0,
20707         0x0                 },        /* LHU[GP] */
20708  };
20709  
20710  
20711  static const Pool P_GP_SH[2] = {
20712      { instruction         , 0                   , 0   , 32,
20713         0xfc1c0001, 0x44140000, &SH_GP_           , 0,
20714         0x0                 },        /* SH[GP] */
20715      { reserved_block      , 0                   , 0   , 32,
20716         0xfc1c0001, 0x44140001, 0                      , 0,
20717         0x0                 },        /* P.GP.SH~*(1) */
20718  };
20719  
20720  
20721  static const Pool P_GP_CP1[4] = {
20722      { instruction         , 0                   , 0   , 32,
20723         0xfc1c0003, 0x44180000, &LWC1_GP_         , 0,
20724         CP1_                },        /* LWC1[GP] */
20725      { instruction         , 0                   , 0   , 32,
20726         0xfc1c0003, 0x44180001, &SWC1_GP_         , 0,
20727         CP1_                },        /* SWC1[GP] */
20728      { instruction         , 0                   , 0   , 32,
20729         0xfc1c0003, 0x44180002, &LDC1_GP_         , 0,
20730         CP1_                },        /* LDC1[GP] */
20731      { instruction         , 0                   , 0   , 32,
20732         0xfc1c0003, 0x44180003, &SDC1_GP_         , 0,
20733         CP1_                },        /* SDC1[GP] */
20734  };
20735  
20736  
20737  static const Pool P_GP_M64[4] = {
20738      { instruction         , 0                   , 0   , 32,
20739         0xfc1c0003, 0x441c0000, &LWU_GP_          , 0,
20740         MIPS64_             },        /* LWU[GP] */
20741      { reserved_block      , 0                   , 0   , 32,
20742         0xfc1c0003, 0x441c0001, 0                      , 0,
20743         0x0                 },        /* P.GP.M64~*(1) */
20744      { reserved_block      , 0                   , 0   , 32,
20745         0xfc1c0003, 0x441c0002, 0                      , 0,
20746         0x0                 },        /* P.GP.M64~*(2) */
20747      { reserved_block      , 0                   , 0   , 32,
20748         0xfc1c0003, 0x441c0003, 0                      , 0,
20749         0x0                 },        /* P.GP.M64~*(3) */
20750  };
20751  
20752  
20753  static const Pool P_GP_BH[8] = {
20754      { instruction         , 0                   , 0   , 32,
20755         0xfc1c0000, 0x44000000, &LB_GP_           , 0,
20756         0x0                 },        /* LB[GP] */
20757      { instruction         , 0                   , 0   , 32,
20758         0xfc1c0000, 0x44040000, &SB_GP_           , 0,
20759         0x0                 },        /* SB[GP] */
20760      { instruction         , 0                   , 0   , 32,
20761         0xfc1c0000, 0x44080000, &LBU_GP_          , 0,
20762         0x0                 },        /* LBU[GP] */
20763      { instruction         , 0                   , 0   , 32,
20764         0xfc1c0000, 0x440c0000, &ADDIU_GP_B_      , 0,
20765         0x0                 },        /* ADDIU[GP.B] */
20766      { pool                , P_GP_LH             , 2   , 32,
20767         0xfc1c0000, 0x44100000, 0                      , 0,
20768         0x0                 },        /* P.GP.LH */
20769      { pool                , P_GP_SH             , 2   , 32,
20770         0xfc1c0000, 0x44140000, 0                      , 0,
20771         0x0                 },        /* P.GP.SH */
20772      { pool                , P_GP_CP1            , 4   , 32,
20773         0xfc1c0000, 0x44180000, 0                      , 0,
20774         0x0                 },        /* P.GP.CP1 */
20775      { pool                , P_GP_M64            , 4   , 32,
20776         0xfc1c0000, 0x441c0000, 0                      , 0,
20777         0x0                 },        /* P.GP.M64 */
20778  };
20779  
20780  
20781  static const Pool P_LS_U12[16] = {
20782      { instruction         , 0                   , 0   , 32,
20783         0xfc00f000, 0x84000000, &LB_U12_          , 0,
20784         0x0                 },        /* LB[U12] */
20785      { instruction         , 0                   , 0   , 32,
20786         0xfc00f000, 0x84001000, &SB_U12_          , 0,
20787         0x0                 },        /* SB[U12] */
20788      { instruction         , 0                   , 0   , 32,
20789         0xfc00f000, 0x84002000, &LBU_U12_         , 0,
20790         0x0                 },        /* LBU[U12] */
20791      { instruction         , 0                   , 0   , 32,
20792         0xfc00f000, 0x84003000, &PREF_U12_        , 0,
20793         0x0                 },        /* PREF[U12] */
20794      { instruction         , 0                   , 0   , 32,
20795         0xfc00f000, 0x84004000, &LH_U12_          , 0,
20796         0x0                 },        /* LH[U12] */
20797      { instruction         , 0                   , 0   , 32,
20798         0xfc00f000, 0x84005000, &SH_U12_          , 0,
20799         0x0                 },        /* SH[U12] */
20800      { instruction         , 0                   , 0   , 32,
20801         0xfc00f000, 0x84006000, &LHU_U12_         , 0,
20802         0x0                 },        /* LHU[U12] */
20803      { instruction         , 0                   , 0   , 32,
20804         0xfc00f000, 0x84007000, &LWU_U12_         , 0,
20805         MIPS64_             },        /* LWU[U12] */
20806      { instruction         , 0                   , 0   , 32,
20807         0xfc00f000, 0x84008000, &LW_U12_          , 0,
20808         0x0                 },        /* LW[U12] */
20809      { instruction         , 0                   , 0   , 32,
20810         0xfc00f000, 0x84009000, &SW_U12_          , 0,
20811         0x0                 },        /* SW[U12] */
20812      { instruction         , 0                   , 0   , 32,
20813         0xfc00f000, 0x8400a000, &LWC1_U12_        , 0,
20814         CP1_                },        /* LWC1[U12] */
20815      { instruction         , 0                   , 0   , 32,
20816         0xfc00f000, 0x8400b000, &SWC1_U12_        , 0,
20817         CP1_                },        /* SWC1[U12] */
20818      { instruction         , 0                   , 0   , 32,
20819         0xfc00f000, 0x8400c000, &LD_U12_          , 0,
20820         MIPS64_             },        /* LD[U12] */
20821      { instruction         , 0                   , 0   , 32,
20822         0xfc00f000, 0x8400d000, &SD_U12_          , 0,
20823         MIPS64_             },        /* SD[U12] */
20824      { instruction         , 0                   , 0   , 32,
20825         0xfc00f000, 0x8400e000, &LDC1_U12_        , 0,
20826         CP1_                },        /* LDC1[U12] */
20827      { instruction         , 0                   , 0   , 32,
20828         0xfc00f000, 0x8400f000, &SDC1_U12_        , 0,
20829         CP1_                },        /* SDC1[U12] */
20830  };
20831  
20832  
20833  static const Pool P_PREF_S9_[2] = {
20834      { instruction         , 0                   , 0   , 32,
20835         0xffe07f00, 0xa7e01800, &SYNCI            , 0,
20836         0x0                 },        /* SYNCI */
20837      { instruction         , 0                   , 0   , 32,
20838         0xfc007f00, 0xa4001800, &PREF_S9_         , &PREF_S9__cond    ,
20839         0x0                 },        /* PREF[S9] */
20840  };
20841  
20842  
20843  static const Pool P_LS_S0[16] = {
20844      { instruction         , 0                   , 0   , 32,
20845         0xfc007f00, 0xa4000000, &LB_S9_           , 0,
20846         0x0                 },        /* LB[S9] */
20847      { instruction         , 0                   , 0   , 32,
20848         0xfc007f00, 0xa4000800, &SB_S9_           , 0,
20849         0x0                 },        /* SB[S9] */
20850      { instruction         , 0                   , 0   , 32,
20851         0xfc007f00, 0xa4001000, &LBU_S9_          , 0,
20852         0x0                 },        /* LBU[S9] */
20853      { pool                , P_PREF_S9_          , 2   , 32,
20854         0xfc007f00, 0xa4001800, 0                      , 0,
20855         0x0                 },        /* P.PREF[S9] */
20856      { instruction         , 0                   , 0   , 32,
20857         0xfc007f00, 0xa4002000, &LH_S9_           , 0,
20858         0x0                 },        /* LH[S9] */
20859      { instruction         , 0                   , 0   , 32,
20860         0xfc007f00, 0xa4002800, &SH_S9_           , 0,
20861         0x0                 },        /* SH[S9] */
20862      { instruction         , 0                   , 0   , 32,
20863         0xfc007f00, 0xa4003000, &LHU_S9_          , 0,
20864         0x0                 },        /* LHU[S9] */
20865      { instruction         , 0                   , 0   , 32,
20866         0xfc007f00, 0xa4003800, &LWU_S9_          , 0,
20867         MIPS64_             },        /* LWU[S9] */
20868      { instruction         , 0                   , 0   , 32,
20869         0xfc007f00, 0xa4004000, &LW_S9_           , 0,
20870         0x0                 },        /* LW[S9] */
20871      { instruction         , 0                   , 0   , 32,
20872         0xfc007f00, 0xa4004800, &SW_S9_           , 0,
20873         0x0                 },        /* SW[S9] */
20874      { instruction         , 0                   , 0   , 32,
20875         0xfc007f00, 0xa4005000, &LWC1_S9_         , 0,
20876         CP1_                },        /* LWC1[S9] */
20877      { instruction         , 0                   , 0   , 32,
20878         0xfc007f00, 0xa4005800, &SWC1_S9_         , 0,
20879         CP1_                },        /* SWC1[S9] */
20880      { instruction         , 0                   , 0   , 32,
20881         0xfc007f00, 0xa4006000, &LD_S9_           , 0,
20882         MIPS64_             },        /* LD[S9] */
20883      { instruction         , 0                   , 0   , 32,
20884         0xfc007f00, 0xa4006800, &SD_S9_           , 0,
20885         MIPS64_             },        /* SD[S9] */
20886      { instruction         , 0                   , 0   , 32,
20887         0xfc007f00, 0xa4007000, &LDC1_S9_         , 0,
20888         CP1_                },        /* LDC1[S9] */
20889      { instruction         , 0                   , 0   , 32,
20890         0xfc007f00, 0xa4007800, &SDC1_S9_         , 0,
20891         CP1_                },        /* SDC1[S9] */
20892  };
20893  
20894  
20895  static const Pool ASET_ACLR[2] = {
20896      { instruction         , 0                   , 0   , 32,
20897         0xfe007f00, 0xa4001100, &ASET             , 0,
20898         MCU_                },        /* ASET */
20899      { instruction         , 0                   , 0   , 32,
20900         0xfe007f00, 0xa6001100, &ACLR             , 0,
20901         MCU_                },        /* ACLR */
20902  };
20903  
20904  
20905  static const Pool P_LL[4] = {
20906      { instruction         , 0                   , 0   , 32,
20907         0xfc007f03, 0xa4005100, &LL               , 0,
20908         0x0                 },        /* LL */
20909      { instruction         , 0                   , 0   , 32,
20910         0xfc007f03, 0xa4005101, &LLWP             , 0,
20911         XNP_                },        /* LLWP */
20912      { reserved_block      , 0                   , 0   , 32,
20913         0xfc007f03, 0xa4005102, 0                      , 0,
20914         0x0                 },        /* P.LL~*(2) */
20915      { reserved_block      , 0                   , 0   , 32,
20916         0xfc007f03, 0xa4005103, 0                      , 0,
20917         0x0                 },        /* P.LL~*(3) */
20918  };
20919  
20920  
20921  static const Pool P_SC[4] = {
20922      { instruction         , 0                   , 0   , 32,
20923         0xfc007f03, 0xa4005900, &SC               , 0,
20924         0x0                 },        /* SC */
20925      { instruction         , 0                   , 0   , 32,
20926         0xfc007f03, 0xa4005901, &SCWP             , 0,
20927         XNP_                },        /* SCWP */
20928      { reserved_block      , 0                   , 0   , 32,
20929         0xfc007f03, 0xa4005902, 0                      , 0,
20930         0x0                 },        /* P.SC~*(2) */
20931      { reserved_block      , 0                   , 0   , 32,
20932         0xfc007f03, 0xa4005903, 0                      , 0,
20933         0x0                 },        /* P.SC~*(3) */
20934  };
20935  
20936  
20937  static const Pool P_LLD[8] = {
20938      { instruction         , 0                   , 0   , 32,
20939         0xfc007f07, 0xa4007100, &LLD              , 0,
20940         MIPS64_             },        /* LLD */
20941      { instruction         , 0                   , 0   , 32,
20942         0xfc007f07, 0xa4007101, &LLDP             , 0,
20943         MIPS64_             },        /* LLDP */
20944      { reserved_block      , 0                   , 0   , 32,
20945         0xfc007f07, 0xa4007102, 0                      , 0,
20946         0x0                 },        /* P.LLD~*(2) */
20947      { reserved_block      , 0                   , 0   , 32,
20948         0xfc007f07, 0xa4007103, 0                      , 0,
20949         0x0                 },        /* P.LLD~*(3) */
20950      { reserved_block      , 0                   , 0   , 32,
20951         0xfc007f07, 0xa4007104, 0                      , 0,
20952         0x0                 },        /* P.LLD~*(4) */
20953      { reserved_block      , 0                   , 0   , 32,
20954         0xfc007f07, 0xa4007105, 0                      , 0,
20955         0x0                 },        /* P.LLD~*(5) */
20956      { reserved_block      , 0                   , 0   , 32,
20957         0xfc007f07, 0xa4007106, 0                      , 0,
20958         0x0                 },        /* P.LLD~*(6) */
20959      { reserved_block      , 0                   , 0   , 32,
20960         0xfc007f07, 0xa4007107, 0                      , 0,
20961         0x0                 },        /* P.LLD~*(7) */
20962  };
20963  
20964  
20965  static const Pool P_SCD[8] = {
20966      { instruction         , 0                   , 0   , 32,
20967         0xfc007f07, 0xa4007900, &SCD              , 0,
20968         MIPS64_             },        /* SCD */
20969      { instruction         , 0                   , 0   , 32,
20970         0xfc007f07, 0xa4007901, &SCDP             , 0,
20971         MIPS64_             },        /* SCDP */
20972      { reserved_block      , 0                   , 0   , 32,
20973         0xfc007f07, 0xa4007902, 0                      , 0,
20974         0x0                 },        /* P.SCD~*(2) */
20975      { reserved_block      , 0                   , 0   , 32,
20976         0xfc007f07, 0xa4007903, 0                      , 0,
20977         0x0                 },        /* P.SCD~*(3) */
20978      { reserved_block      , 0                   , 0   , 32,
20979         0xfc007f07, 0xa4007904, 0                      , 0,
20980         0x0                 },        /* P.SCD~*(4) */
20981      { reserved_block      , 0                   , 0   , 32,
20982         0xfc007f07, 0xa4007905, 0                      , 0,
20983         0x0                 },        /* P.SCD~*(5) */
20984      { reserved_block      , 0                   , 0   , 32,
20985         0xfc007f07, 0xa4007906, 0                      , 0,
20986         0x0                 },        /* P.SCD~*(6) */
20987      { reserved_block      , 0                   , 0   , 32,
20988         0xfc007f07, 0xa4007907, 0                      , 0,
20989         0x0                 },        /* P.SCD~*(7) */
20990  };
20991  
20992  
20993  static const Pool P_LS_S1[16] = {
20994      { reserved_block      , 0                   , 0   , 32,
20995         0xfc007f00, 0xa4000100, 0                      , 0,
20996         0x0                 },        /* P.LS.S1~*(0) */
20997      { reserved_block      , 0                   , 0   , 32,
20998         0xfc007f00, 0xa4000900, 0                      , 0,
20999         0x0                 },        /* P.LS.S1~*(1) */
21000      { pool                , ASET_ACLR           , 2   , 32,
21001         0xfc007f00, 0xa4001100, 0                      , 0,
21002         0x0                 },        /* ASET_ACLR */
21003      { reserved_block      , 0                   , 0   , 32,
21004         0xfc007f00, 0xa4001900, 0                      , 0,
21005         0x0                 },        /* P.LS.S1~*(3) */
21006      { instruction         , 0                   , 0   , 32,
21007         0xfc007f00, 0xa4002100, &UALH             , 0,
21008         XMMS_               },        /* UALH */
21009      { instruction         , 0                   , 0   , 32,
21010         0xfc007f00, 0xa4002900, &UASH             , 0,
21011         XMMS_               },        /* UASH */
21012      { reserved_block      , 0                   , 0   , 32,
21013         0xfc007f00, 0xa4003100, 0                      , 0,
21014         0x0                 },        /* P.LS.S1~*(6) */
21015      { instruction         , 0                   , 0   , 32,
21016         0xfc007f00, 0xa4003900, &CACHE            , 0,
21017         CP0_                },        /* CACHE */
21018      { instruction         , 0                   , 0   , 32,
21019         0xfc007f00, 0xa4004100, &LWC2             , 0,
21020         CP2_                },        /* LWC2 */
21021      { instruction         , 0                   , 0   , 32,
21022         0xfc007f00, 0xa4004900, &SWC2             , 0,
21023         CP2_                },        /* SWC2 */
21024      { pool                , P_LL                , 4   , 32,
21025         0xfc007f00, 0xa4005100, 0                      , 0,
21026         0x0                 },        /* P.LL */
21027      { pool                , P_SC                , 4   , 32,
21028         0xfc007f00, 0xa4005900, 0                      , 0,
21029         0x0                 },        /* P.SC */
21030      { instruction         , 0                   , 0   , 32,
21031         0xfc007f00, 0xa4006100, &LDC2             , 0,
21032         CP2_                },        /* LDC2 */
21033      { instruction         , 0                   , 0   , 32,
21034         0xfc007f00, 0xa4006900, &SDC2             , 0,
21035         CP2_                },        /* SDC2 */
21036      { pool                , P_LLD               , 8   , 32,
21037         0xfc007f00, 0xa4007100, 0                      , 0,
21038         0x0                 },        /* P.LLD */
21039      { pool                , P_SCD               , 8   , 32,
21040         0xfc007f00, 0xa4007900, 0                      , 0,
21041         0x0                 },        /* P.SCD */
21042  };
21043  
21044  
21045  static const Pool P_PREFE[2] = {
21046      { instruction         , 0                   , 0   , 32,
21047         0xffe07f00, 0xa7e01a00, &SYNCIE           , 0,
21048         CP0_ | EVA_         },        /* SYNCIE */
21049      { instruction         , 0                   , 0   , 32,
21050         0xfc007f00, 0xa4001a00, &PREFE            , &PREFE_cond       ,
21051         CP0_ | EVA_         },        /* PREFE */
21052  };
21053  
21054  
21055  static const Pool P_LLE[4] = {
21056      { instruction         , 0                   , 0   , 32,
21057         0xfc007f03, 0xa4005200, &LLE              , 0,
21058         CP0_ | EVA_         },        /* LLE */
21059      { instruction         , 0                   , 0   , 32,
21060         0xfc007f03, 0xa4005201, &LLWPE            , 0,
21061         CP0_ | EVA_         },        /* LLWPE */
21062      { reserved_block      , 0                   , 0   , 32,
21063         0xfc007f03, 0xa4005202, 0                      , 0,
21064         0x0                 },        /* P.LLE~*(2) */
21065      { reserved_block      , 0                   , 0   , 32,
21066         0xfc007f03, 0xa4005203, 0                      , 0,
21067         0x0                 },        /* P.LLE~*(3) */
21068  };
21069  
21070  
21071  static const Pool P_SCE[4] = {
21072      { instruction         , 0                   , 0   , 32,
21073         0xfc007f03, 0xa4005a00, &SCE              , 0,
21074         CP0_ | EVA_         },        /* SCE */
21075      { instruction         , 0                   , 0   , 32,
21076         0xfc007f03, 0xa4005a01, &SCWPE            , 0,
21077         CP0_ | EVA_         },        /* SCWPE */
21078      { reserved_block      , 0                   , 0   , 32,
21079         0xfc007f03, 0xa4005a02, 0                      , 0,
21080         0x0                 },        /* P.SCE~*(2) */
21081      { reserved_block      , 0                   , 0   , 32,
21082         0xfc007f03, 0xa4005a03, 0                      , 0,
21083         0x0                 },        /* P.SCE~*(3) */
21084  };
21085  
21086  
21087  static const Pool P_LS_E0[16] = {
21088      { instruction         , 0                   , 0   , 32,
21089         0xfc007f00, 0xa4000200, &LBE              , 0,
21090         CP0_ | EVA_         },        /* LBE */
21091      { instruction         , 0                   , 0   , 32,
21092         0xfc007f00, 0xa4000a00, &SBE              , 0,
21093         CP0_ | EVA_         },        /* SBE */
21094      { instruction         , 0                   , 0   , 32,
21095         0xfc007f00, 0xa4001200, &LBUE             , 0,
21096         CP0_ | EVA_         },        /* LBUE */
21097      { pool                , P_PREFE             , 2   , 32,
21098         0xfc007f00, 0xa4001a00, 0                      , 0,
21099         0x0                 },        /* P.PREFE */
21100      { instruction         , 0                   , 0   , 32,
21101         0xfc007f00, 0xa4002200, &LHE              , 0,
21102         CP0_ | EVA_         },        /* LHE */
21103      { instruction         , 0                   , 0   , 32,
21104         0xfc007f00, 0xa4002a00, &SHE              , 0,
21105         CP0_ | EVA_         },        /* SHE */
21106      { instruction         , 0                   , 0   , 32,
21107         0xfc007f00, 0xa4003200, &LHUE             , 0,
21108         CP0_ | EVA_         },        /* LHUE */
21109      { instruction         , 0                   , 0   , 32,
21110         0xfc007f00, 0xa4003a00, &CACHEE           , 0,
21111         CP0_ | EVA_         },        /* CACHEE */
21112      { instruction         , 0                   , 0   , 32,
21113         0xfc007f00, 0xa4004200, &LWE              , 0,
21114         CP0_ | EVA_         },        /* LWE */
21115      { instruction         , 0                   , 0   , 32,
21116         0xfc007f00, 0xa4004a00, &SWE              , 0,
21117         CP0_ | EVA_         },        /* SWE */
21118      { pool                , P_LLE               , 4   , 32,
21119         0xfc007f00, 0xa4005200, 0                      , 0,
21120         0x0                 },        /* P.LLE */
21121      { pool                , P_SCE               , 4   , 32,
21122         0xfc007f00, 0xa4005a00, 0                      , 0,
21123         0x0                 },        /* P.SCE */
21124      { reserved_block      , 0                   , 0   , 32,
21125         0xfc007f00, 0xa4006200, 0                      , 0,
21126         0x0                 },        /* P.LS.E0~*(12) */
21127      { reserved_block      , 0                   , 0   , 32,
21128         0xfc007f00, 0xa4006a00, 0                      , 0,
21129         0x0                 },        /* P.LS.E0~*(13) */
21130      { reserved_block      , 0                   , 0   , 32,
21131         0xfc007f00, 0xa4007200, 0                      , 0,
21132         0x0                 },        /* P.LS.E0~*(14) */
21133      { reserved_block      , 0                   , 0   , 32,
21134         0xfc007f00, 0xa4007a00, 0                      , 0,
21135         0x0                 },        /* P.LS.E0~*(15) */
21136  };
21137  
21138  
21139  static const Pool P_LS_WM[2] = {
21140      { instruction         , 0                   , 0   , 32,
21141         0xfc000f00, 0xa4000400, &LWM              , 0,
21142         XMMS_               },        /* LWM */
21143      { instruction         , 0                   , 0   , 32,
21144         0xfc000f00, 0xa4000c00, &SWM              , 0,
21145         XMMS_               },        /* SWM */
21146  };
21147  
21148  
21149  static const Pool P_LS_UAWM[2] = {
21150      { instruction         , 0                   , 0   , 32,
21151         0xfc000f00, 0xa4000500, &UALWM            , 0,
21152         XMMS_               },        /* UALWM */
21153      { instruction         , 0                   , 0   , 32,
21154         0xfc000f00, 0xa4000d00, &UASWM            , 0,
21155         XMMS_               },        /* UASWM */
21156  };
21157  
21158  
21159  static const Pool P_LS_DM[2] = {
21160      { instruction         , 0                   , 0   , 32,
21161         0xfc000f00, 0xa4000600, &LDM              , 0,
21162         MIPS64_             },        /* LDM */
21163      { instruction         , 0                   , 0   , 32,
21164         0xfc000f00, 0xa4000e00, &SDM              , 0,
21165         MIPS64_             },        /* SDM */
21166  };
21167  
21168  
21169  static const Pool P_LS_UADM[2] = {
21170      { instruction         , 0                   , 0   , 32,
21171         0xfc000f00, 0xa4000700, &UALDM            , 0,
21172         MIPS64_             },        /* UALDM */
21173      { instruction         , 0                   , 0   , 32,
21174         0xfc000f00, 0xa4000f00, &UASDM            , 0,
21175         MIPS64_             },        /* UASDM */
21176  };
21177  
21178  
21179  static const Pool P_LS_S9[8] = {
21180      { pool                , P_LS_S0             , 16  , 32,
21181         0xfc000700, 0xa4000000, 0                      , 0,
21182         0x0                 },        /* P.LS.S0 */
21183      { pool                , P_LS_S1             , 16  , 32,
21184         0xfc000700, 0xa4000100, 0                      , 0,
21185         0x0                 },        /* P.LS.S1 */
21186      { pool                , P_LS_E0             , 16  , 32,
21187         0xfc000700, 0xa4000200, 0                      , 0,
21188         0x0                 },        /* P.LS.E0 */
21189      { reserved_block      , 0                   , 0   , 32,
21190         0xfc000700, 0xa4000300, 0                      , 0,
21191         0x0                 },        /* P.LS.S9~*(3) */
21192      { pool                , P_LS_WM             , 2   , 32,
21193         0xfc000700, 0xa4000400, 0                      , 0,
21194         0x0                 },        /* P.LS.WM */
21195      { pool                , P_LS_UAWM           , 2   , 32,
21196         0xfc000700, 0xa4000500, 0                      , 0,
21197         0x0                 },        /* P.LS.UAWM */
21198      { pool                , P_LS_DM             , 2   , 32,
21199         0xfc000700, 0xa4000600, 0                      , 0,
21200         0x0                 },        /* P.LS.DM */
21201      { pool                , P_LS_UADM           , 2   , 32,
21202         0xfc000700, 0xa4000700, 0                      , 0,
21203         0x0                 },        /* P.LS.UADM */
21204  };
21205  
21206  
21207  static const Pool P_BAL[2] = {
21208      { branch_instruction  , 0                   , 0   , 32,
21209         0xfe000000, 0x28000000, &BC_32_           , 0,
21210         0x0                 },        /* BC[32] */
21211      { call_instruction    , 0                   , 0   , 32,
21212         0xfe000000, 0x2a000000, &BALC_32_         , 0,
21213         0x0                 },        /* BALC[32] */
21214  };
21215  
21216  
21217  static const Pool P_BALRSC[2] = {
21218      { branch_instruction  , 0                   , 0   , 32,
21219         0xffe0f000, 0x48008000, &BRSC             , 0,
21220         0x0                 },        /* BRSC */
21221      { call_instruction    , 0                   , 0   , 32,
21222         0xfc00f000, 0x48008000, &BALRSC           , &BALRSC_cond      ,
21223         0x0                 },        /* BALRSC */
21224  };
21225  
21226  
21227  static const Pool P_J[16] = {
21228      { call_instruction    , 0                   , 0   , 32,
21229         0xfc00f000, 0x48000000, &JALRC_32_        , 0,
21230         0x0                 },        /* JALRC[32] */
21231      { call_instruction    , 0                   , 0   , 32,
21232         0xfc00f000, 0x48001000, &JALRC_HB         , 0,
21233         0x0                 },        /* JALRC.HB */
21234      { reserved_block      , 0                   , 0   , 32,
21235         0xfc00f000, 0x48002000, 0                      , 0,
21236         0x0                 },        /* P.J~*(2) */
21237      { reserved_block      , 0                   , 0   , 32,
21238         0xfc00f000, 0x48003000, 0                      , 0,
21239         0x0                 },        /* P.J~*(3) */
21240      { reserved_block      , 0                   , 0   , 32,
21241         0xfc00f000, 0x48004000, 0                      , 0,
21242         0x0                 },        /* P.J~*(4) */
21243      { reserved_block      , 0                   , 0   , 32,
21244         0xfc00f000, 0x48005000, 0                      , 0,
21245         0x0                 },        /* P.J~*(5) */
21246      { reserved_block      , 0                   , 0   , 32,
21247         0xfc00f000, 0x48006000, 0                      , 0,
21248         0x0                 },        /* P.J~*(6) */
21249      { reserved_block      , 0                   , 0   , 32,
21250         0xfc00f000, 0x48007000, 0                      , 0,
21251         0x0                 },        /* P.J~*(7) */
21252      { pool                , P_BALRSC            , 2   , 32,
21253         0xfc00f000, 0x48008000, 0                      , 0,
21254         0x0                 },        /* P.BALRSC */
21255      { reserved_block      , 0                   , 0   , 32,
21256         0xfc00f000, 0x48009000, 0                      , 0,
21257         0x0                 },        /* P.J~*(9) */
21258      { reserved_block      , 0                   , 0   , 32,
21259         0xfc00f000, 0x4800a000, 0                      , 0,
21260         0x0                 },        /* P.J~*(10) */
21261      { reserved_block      , 0                   , 0   , 32,
21262         0xfc00f000, 0x4800b000, 0                      , 0,
21263         0x0                 },        /* P.J~*(11) */
21264      { reserved_block      , 0                   , 0   , 32,
21265         0xfc00f000, 0x4800c000, 0                      , 0,
21266         0x0                 },        /* P.J~*(12) */
21267      { reserved_block      , 0                   , 0   , 32,
21268         0xfc00f000, 0x4800d000, 0                      , 0,
21269         0x0                 },        /* P.J~*(13) */
21270      { reserved_block      , 0                   , 0   , 32,
21271         0xfc00f000, 0x4800e000, 0                      , 0,
21272         0x0                 },        /* P.J~*(14) */
21273      { reserved_block      , 0                   , 0   , 32,
21274         0xfc00f000, 0x4800f000, 0                      , 0,
21275         0x0                 },        /* P.J~*(15) */
21276  };
21277  
21278  
21279  static const Pool P_BR3A[32] = {
21280      { branch_instruction  , 0                   , 0   , 32,
21281         0xfc1fc000, 0x88004000, &BC1EQZC          , 0,
21282         CP1_                },        /* BC1EQZC */
21283      { branch_instruction  , 0                   , 0   , 32,
21284         0xfc1fc000, 0x88014000, &BC1NEZC          , 0,
21285         CP1_                },        /* BC1NEZC */
21286      { branch_instruction  , 0                   , 0   , 32,
21287         0xfc1fc000, 0x88024000, &BC2EQZC          , 0,
21288         CP2_                },        /* BC2EQZC */
21289      { branch_instruction  , 0                   , 0   , 32,
21290         0xfc1fc000, 0x88034000, &BC2NEZC          , 0,
21291         CP2_                },        /* BC2NEZC */
21292      { branch_instruction  , 0                   , 0   , 32,
21293         0xfc1fc000, 0x88044000, &BPOSGE32C        , 0,
21294         DSP_                },        /* BPOSGE32C */
21295      { reserved_block      , 0                   , 0   , 32,
21296         0xfc1fc000, 0x88054000, 0                      , 0,
21297         0x0                 },        /* P.BR3A~*(5) */
21298      { reserved_block      , 0                   , 0   , 32,
21299         0xfc1fc000, 0x88064000, 0                      , 0,
21300         0x0                 },        /* P.BR3A~*(6) */
21301      { reserved_block      , 0                   , 0   , 32,
21302         0xfc1fc000, 0x88074000, 0                      , 0,
21303         0x0                 },        /* P.BR3A~*(7) */
21304      { reserved_block      , 0                   , 0   , 32,
21305         0xfc1fc000, 0x88084000, 0                      , 0,
21306         0x0                 },        /* P.BR3A~*(8) */
21307      { reserved_block      , 0                   , 0   , 32,
21308         0xfc1fc000, 0x88094000, 0                      , 0,
21309         0x0                 },        /* P.BR3A~*(9) */
21310      { reserved_block      , 0                   , 0   , 32,
21311         0xfc1fc000, 0x880a4000, 0                      , 0,
21312         0x0                 },        /* P.BR3A~*(10) */
21313      { reserved_block      , 0                   , 0   , 32,
21314         0xfc1fc000, 0x880b4000, 0                      , 0,
21315         0x0                 },        /* P.BR3A~*(11) */
21316      { reserved_block      , 0                   , 0   , 32,
21317         0xfc1fc000, 0x880c4000, 0                      , 0,
21318         0x0                 },        /* P.BR3A~*(12) */
21319      { reserved_block      , 0                   , 0   , 32,
21320         0xfc1fc000, 0x880d4000, 0                      , 0,
21321         0x0                 },        /* P.BR3A~*(13) */
21322      { reserved_block      , 0                   , 0   , 32,
21323         0xfc1fc000, 0x880e4000, 0                      , 0,
21324         0x0                 },        /* P.BR3A~*(14) */
21325      { reserved_block      , 0                   , 0   , 32,
21326         0xfc1fc000, 0x880f4000, 0                      , 0,
21327         0x0                 },        /* P.BR3A~*(15) */
21328      { reserved_block      , 0                   , 0   , 32,
21329         0xfc1fc000, 0x88104000, 0                      , 0,
21330         0x0                 },        /* P.BR3A~*(16) */
21331      { reserved_block      , 0                   , 0   , 32,
21332         0xfc1fc000, 0x88114000, 0                      , 0,
21333         0x0                 },        /* P.BR3A~*(17) */
21334      { reserved_block      , 0                   , 0   , 32,
21335         0xfc1fc000, 0x88124000, 0                      , 0,
21336         0x0                 },        /* P.BR3A~*(18) */
21337      { reserved_block      , 0                   , 0   , 32,
21338         0xfc1fc000, 0x88134000, 0                      , 0,
21339         0x0                 },        /* P.BR3A~*(19) */
21340      { reserved_block      , 0                   , 0   , 32,
21341         0xfc1fc000, 0x88144000, 0                      , 0,
21342         0x0                 },        /* P.BR3A~*(20) */
21343      { reserved_block      , 0                   , 0   , 32,
21344         0xfc1fc000, 0x88154000, 0                      , 0,
21345         0x0                 },        /* P.BR3A~*(21) */
21346      { reserved_block      , 0                   , 0   , 32,
21347         0xfc1fc000, 0x88164000, 0                      , 0,
21348         0x0                 },        /* P.BR3A~*(22) */
21349      { reserved_block      , 0                   , 0   , 32,
21350         0xfc1fc000, 0x88174000, 0                      , 0,
21351         0x0                 },        /* P.BR3A~*(23) */
21352      { reserved_block      , 0                   , 0   , 32,
21353         0xfc1fc000, 0x88184000, 0                      , 0,
21354         0x0                 },        /* P.BR3A~*(24) */
21355      { reserved_block      , 0                   , 0   , 32,
21356         0xfc1fc000, 0x88194000, 0                      , 0,
21357         0x0                 },        /* P.BR3A~*(25) */
21358      { reserved_block      , 0                   , 0   , 32,
21359         0xfc1fc000, 0x881a4000, 0                      , 0,
21360         0x0                 },        /* P.BR3A~*(26) */
21361      { reserved_block      , 0                   , 0   , 32,
21362         0xfc1fc000, 0x881b4000, 0                      , 0,
21363         0x0                 },        /* P.BR3A~*(27) */
21364      { reserved_block      , 0                   , 0   , 32,
21365         0xfc1fc000, 0x881c4000, 0                      , 0,
21366         0x0                 },        /* P.BR3A~*(28) */
21367      { reserved_block      , 0                   , 0   , 32,
21368         0xfc1fc000, 0x881d4000, 0                      , 0,
21369         0x0                 },        /* P.BR3A~*(29) */
21370      { reserved_block      , 0                   , 0   , 32,
21371         0xfc1fc000, 0x881e4000, 0                      , 0,
21372         0x0                 },        /* P.BR3A~*(30) */
21373      { reserved_block      , 0                   , 0   , 32,
21374         0xfc1fc000, 0x881f4000, 0                      , 0,
21375         0x0                 },        /* P.BR3A~*(31) */
21376  };
21377  
21378  
21379  static const Pool P_BR1[4] = {
21380      { branch_instruction  , 0                   , 0   , 32,
21381         0xfc00c000, 0x88000000, &BEQC_32_         , 0,
21382         0x0                 },        /* BEQC[32] */
21383      { pool                , P_BR3A              , 32  , 32,
21384         0xfc00c000, 0x88004000, 0                      , 0,
21385         0x0                 },        /* P.BR3A */
21386      { branch_instruction  , 0                   , 0   , 32,
21387         0xfc00c000, 0x88008000, &BGEC             , 0,
21388         0x0                 },        /* BGEC */
21389      { branch_instruction  , 0                   , 0   , 32,
21390         0xfc00c000, 0x8800c000, &BGEUC            , 0,
21391         0x0                 },        /* BGEUC */
21392  };
21393  
21394  
21395  static const Pool P_BR2[4] = {
21396      { branch_instruction  , 0                   , 0   , 32,
21397         0xfc00c000, 0xa8000000, &BNEC_32_         , 0,
21398         0x0                 },        /* BNEC[32] */
21399      { reserved_block      , 0                   , 0   , 32,
21400         0xfc00c000, 0xa8004000, 0                      , 0,
21401         0x0                 },        /* P.BR2~*(1) */
21402      { branch_instruction  , 0                   , 0   , 32,
21403         0xfc00c000, 0xa8008000, &BLTC             , 0,
21404         0x0                 },        /* BLTC */
21405      { branch_instruction  , 0                   , 0   , 32,
21406         0xfc00c000, 0xa800c000, &BLTUC            , 0,
21407         0x0                 },        /* BLTUC */
21408  };
21409  
21410  
21411  static const Pool P_BRI[8] = {
21412      { branch_instruction  , 0                   , 0   , 32,
21413         0xfc1c0000, 0xc8000000, &BEQIC            , 0,
21414         0x0                 },        /* BEQIC */
21415      { branch_instruction  , 0                   , 0   , 32,
21416         0xfc1c0000, 0xc8040000, &BBEQZC           , 0,
21417         XMMS_               },        /* BBEQZC */
21418      { branch_instruction  , 0                   , 0   , 32,
21419         0xfc1c0000, 0xc8080000, &BGEIC            , 0,
21420         0x0                 },        /* BGEIC */
21421      { branch_instruction  , 0                   , 0   , 32,
21422         0xfc1c0000, 0xc80c0000, &BGEIUC           , 0,
21423         0x0                 },        /* BGEIUC */
21424      { branch_instruction  , 0                   , 0   , 32,
21425         0xfc1c0000, 0xc8100000, &BNEIC            , 0,
21426         0x0                 },        /* BNEIC */
21427      { branch_instruction  , 0                   , 0   , 32,
21428         0xfc1c0000, 0xc8140000, &BBNEZC           , 0,
21429         XMMS_               },        /* BBNEZC */
21430      { branch_instruction  , 0                   , 0   , 32,
21431         0xfc1c0000, 0xc8180000, &BLTIC            , 0,
21432         0x0                 },        /* BLTIC */
21433      { branch_instruction  , 0                   , 0   , 32,
21434         0xfc1c0000, 0xc81c0000, &BLTIUC           , 0,
21435         0x0                 },        /* BLTIUC */
21436  };
21437  
21438  
21439  static const Pool P32[32] = {
21440      { pool                , P_ADDIU             , 2   , 32,
21441         0xfc000000, 0x00000000, 0                      , 0,
21442         0x0                 },        /* P.ADDIU */
21443      { pool                , P32A                , 8   , 32,
21444         0xfc000000, 0x20000000, 0                      , 0,
21445         0x0                 },        /* P32A */
21446      { pool                , P_GP_W              , 4   , 32,
21447         0xfc000000, 0x40000000, 0                      , 0,
21448         0x0                 },        /* P.GP.W */
21449      { pool                , POOL48I             , 32  , 48,
21450         0xfc0000000000ull, 0x600000000000ull, 0                      , 0,
21451         0x0                 },        /* POOL48I */
21452      { pool                , P_U12               , 16  , 32,
21453         0xfc000000, 0x80000000, 0                      , 0,
21454         0x0                 },        /* P.U12 */
21455      { pool                , POOL32F             , 8   , 32,
21456         0xfc000000, 0xa0000000, 0                      , 0,
21457         CP1_                },        /* POOL32F */
21458      { pool                , POOL32S             , 8   , 32,
21459         0xfc000000, 0xc0000000, 0                      , 0,
21460         0x0                 },        /* POOL32S */
21461      { pool                , P_LUI               , 2   , 32,
21462         0xfc000000, 0xe0000000, 0                      , 0,
21463         0x0                 },        /* P.LUI */
21464      { instruction         , 0                   , 0   , 32,
21465         0xfc000000, 0x04000000, &ADDIUPC_32_      , 0,
21466         0x0                 },        /* ADDIUPC[32] */
21467      { reserved_block      , 0                   , 0   , 32,
21468         0xfc000000, 0x24000000, 0                      , 0,
21469         0x0                 },        /* P32~*(5) */
21470      { pool                , P_GP_BH             , 8   , 32,
21471         0xfc000000, 0x44000000, 0                      , 0,
21472         0x0                 },        /* P.GP.BH */
21473      { reserved_block      , 0                   , 0   , 32,
21474         0xfc000000, 0x64000000, 0                      , 0,
21475         0x0                 },        /* P32~*(13) */
21476      { pool                , P_LS_U12            , 16  , 32,
21477         0xfc000000, 0x84000000, 0                      , 0,
21478         0x0                 },        /* P.LS.U12 */
21479      { pool                , P_LS_S9             , 8   , 32,
21480         0xfc000000, 0xa4000000, 0                      , 0,
21481         0x0                 },        /* P.LS.S9 */
21482      { reserved_block      , 0                   , 0   , 32,
21483         0xfc000000, 0xc4000000, 0                      , 0,
21484         0x0                 },        /* P32~*(25) */
21485      { reserved_block      , 0                   , 0   , 32,
21486         0xfc000000, 0xe4000000, 0                      , 0,
21487         0x0                 },        /* P32~*(29) */
21488      { call_instruction    , 0                   , 0   , 32,
21489         0xfc000000, 0x08000000, &MOVE_BALC        , 0,
21490         XMMS_               },        /* MOVE.BALC */
21491      { pool                , P_BAL               , 2   , 32,
21492         0xfc000000, 0x28000000, 0                      , 0,
21493         0x0                 },        /* P.BAL */
21494      { pool                , P_J                 , 16  , 32,
21495         0xfc000000, 0x48000000, 0                      , 0,
21496         0x0                 },        /* P.J */
21497      { reserved_block      , 0                   , 0   , 32,
21498         0xfc000000, 0x68000000, 0                      , 0,
21499         0x0                 },        /* P32~*(14) */
21500      { pool                , P_BR1               , 4   , 32,
21501         0xfc000000, 0x88000000, 0                      , 0,
21502         0x0                 },        /* P.BR1 */
21503      { pool                , P_BR2               , 4   , 32,
21504         0xfc000000, 0xa8000000, 0                      , 0,
21505         0x0                 },        /* P.BR2 */
21506      { pool                , P_BRI               , 8   , 32,
21507         0xfc000000, 0xc8000000, 0                      , 0,
21508         0x0                 },        /* P.BRI */
21509      { reserved_block      , 0                   , 0   , 32,
21510         0xfc000000, 0xe8000000, 0                      , 0,
21511         0x0                 },        /* P32~*(30) */
21512      { reserved_block      , 0                   , 0   , 32,
21513         0xfc000000, 0x0c000000, 0                      , 0,
21514         0x0                 },        /* P32~*(3) */
21515      { reserved_block      , 0                   , 0   , 32,
21516         0xfc000000, 0x2c000000, 0                      , 0,
21517         0x0                 },        /* P32~*(7) */
21518      { reserved_block      , 0                   , 0   , 32,
21519         0xfc000000, 0x4c000000, 0                      , 0,
21520         0x0                 },        /* P32~*(11) */
21521      { reserved_block      , 0                   , 0   , 32,
21522         0xfc000000, 0x6c000000, 0                      , 0,
21523         0x0                 },        /* P32~*(15) */
21524      { reserved_block      , 0                   , 0   , 32,
21525         0xfc000000, 0x8c000000, 0                      , 0,
21526         0x0                 },        /* P32~*(19) */
21527      { reserved_block      , 0                   , 0   , 32,
21528         0xfc000000, 0xac000000, 0                      , 0,
21529         0x0                 },        /* P32~*(23) */
21530      { reserved_block      , 0                   , 0   , 32,
21531         0xfc000000, 0xcc000000, 0                      , 0,
21532         0x0                 },        /* P32~*(27) */
21533      { reserved_block      , 0                   , 0   , 32,
21534         0xfc000000, 0xec000000, 0                      , 0,
21535         0x0                 },        /* P32~*(31) */
21536  };
21537  
21538  
21539  static const Pool P16_SYSCALL[2] = {
21540      { instruction         , 0                   , 0   , 16,
21541         0xfffc    , 0x1008    , &SYSCALL_16_      , 0,
21542         0x0                 },        /* SYSCALL[16] */
21543      { instruction         , 0                   , 0   , 16,
21544         0xfffc    , 0x100c    , &HYPCALL_16_      , 0,
21545         CP0_ | VZ_          },        /* HYPCALL[16] */
21546  };
21547  
21548  
21549  static const Pool P16_RI[4] = {
21550      { reserved_block      , 0                   , 0   , 16,
21551         0xfff8    , 0x1000    , 0                      , 0,
21552         0x0                 },        /* P16.RI~*(0) */
21553      { pool                , P16_SYSCALL         , 2   , 16,
21554         0xfff8    , 0x1008    , 0                      , 0,
21555         0x0                 },        /* P16.SYSCALL */
21556      { instruction         , 0                   , 0   , 16,
21557         0xfff8    , 0x1010    , &BREAK_16_        , 0,
21558         0x0                 },        /* BREAK[16] */
21559      { instruction         , 0                   , 0   , 16,
21560         0xfff8    , 0x1018    , &SDBBP_16_        , 0,
21561         EJTAG_              },        /* SDBBP[16] */
21562  };
21563  
21564  
21565  static const Pool P16_MV[2] = {
21566      { pool                , P16_RI              , 4   , 16,
21567         0xffe0    , 0x1000    , 0                      , 0,
21568         0x0                 },        /* P16.RI */
21569      { instruction         , 0                   , 0   , 16,
21570         0xfc00    , 0x1000    , &MOVE             , &MOVE_cond        ,
21571         0x0                 },        /* MOVE */
21572  };
21573  
21574  
21575  static const Pool P16_SHIFT[2] = {
21576      { instruction         , 0                   , 0   , 16,
21577         0xfc08    , 0x3000    , &SLL_16_          , 0,
21578         0x0                 },        /* SLL[16] */
21579      { instruction         , 0                   , 0   , 16,
21580         0xfc08    , 0x3008    , &SRL_16_          , 0,
21581         0x0                 },        /* SRL[16] */
21582  };
21583  
21584  
21585  static const Pool POOL16C_00[4] = {
21586      { instruction         , 0                   , 0   , 16,
21587         0xfc0f    , 0x5000    , &NOT_16_          , 0,
21588         0x0                 },        /* NOT[16] */
21589      { instruction         , 0                   , 0   , 16,
21590         0xfc0f    , 0x5004    , &XOR_16_          , 0,
21591         0x0                 },        /* XOR[16] */
21592      { instruction         , 0                   , 0   , 16,
21593         0xfc0f    , 0x5008    , &AND_16_          , 0,
21594         0x0                 },        /* AND[16] */
21595      { instruction         , 0                   , 0   , 16,
21596         0xfc0f    , 0x500c    , &OR_16_           , 0,
21597         0x0                 },        /* OR[16] */
21598  };
21599  
21600  
21601  static const Pool POOL16C_0[2] = {
21602      { pool                , POOL16C_00          , 4   , 16,
21603         0xfc03    , 0x5000    , 0                      , 0,
21604         0x0                 },        /* POOL16C_00 */
21605      { reserved_block      , 0                   , 0   , 16,
21606         0xfc03    , 0x5002    , 0                      , 0,
21607         0x0                 },        /* POOL16C_0~*(1) */
21608  };
21609  
21610  
21611  static const Pool P16C[2] = {
21612      { pool                , POOL16C_0           , 2   , 16,
21613         0xfc01    , 0x5000    , 0                      , 0,
21614         0x0                 },        /* POOL16C_0 */
21615      { instruction         , 0                   , 0   , 16,
21616         0xfc01    , 0x5001    , &LWXS_16_         , 0,
21617         0x0                 },        /* LWXS[16] */
21618  };
21619  
21620  
21621  static const Pool P16_A1[2] = {
21622      { reserved_block      , 0                   , 0   , 16,
21623         0xfc40    , 0x7000    , 0                      , 0,
21624         0x0                 },        /* P16.A1~*(0) */
21625      { instruction         , 0                   , 0   , 16,
21626         0xfc40    , 0x7040    , &ADDIU_R1_SP_     , 0,
21627         0x0                 },        /* ADDIU[R1.SP] */
21628  };
21629  
21630  
21631  static const Pool P_ADDIU_RS5_[2] = {
21632      { instruction         , 0                   , 0   , 16,
21633         0xffe8    , 0x9008    , &NOP_16_          , 0,
21634         0x0                 },        /* NOP[16] */
21635      { instruction         , 0                   , 0   , 16,
21636         0xfc08    , 0x9008    , &ADDIU_RS5_       , &ADDIU_RS5__cond  ,
21637         0x0                 },        /* ADDIU[RS5] */
21638  };
21639  
21640  
21641  static const Pool P16_A2[2] = {
21642      { instruction         , 0                   , 0   , 16,
21643         0xfc08    , 0x9000    , &ADDIU_R2_        , 0,
21644         0x0                 },        /* ADDIU[R2] */
21645      { pool                , P_ADDIU_RS5_        , 2   , 16,
21646         0xfc08    , 0x9008    , 0                      , 0,
21647         0x0                 },        /* P.ADDIU[RS5] */
21648  };
21649  
21650  
21651  static const Pool P16_ADDU[2] = {
21652      { instruction         , 0                   , 0   , 16,
21653         0xfc01    , 0xb000    , &ADDU_16_         , 0,
21654         0x0                 },        /* ADDU[16] */
21655      { instruction         , 0                   , 0   , 16,
21656         0xfc01    , 0xb001    , &SUBU_16_         , 0,
21657         0x0                 },        /* SUBU[16] */
21658  };
21659  
21660  
21661  static const Pool P16_JRC[2] = {
21662      { branch_instruction  , 0                   , 0   , 16,
21663         0xfc1f    , 0xd800    , &JRC              , 0,
21664         0x0                 },        /* JRC */
21665      { call_instruction    , 0                   , 0   , 16,
21666         0xfc1f    , 0xd810    , &JALRC_16_        , 0,
21667         0x0                 },        /* JALRC[16] */
21668  };
21669  
21670  
21671  static const Pool P16_BR1[2] = {
21672      { branch_instruction  , 0                   , 0   , 16,
21673         0xfc00    , 0xd800    , &BEQC_16_         , &BEQC_16__cond    ,
21674         XMMS_               },        /* BEQC[16] */
21675      { branch_instruction  , 0                   , 0   , 16,
21676         0xfc00    , 0xd800    , &BNEC_16_         , &BNEC_16__cond    ,
21677         XMMS_               },        /* BNEC[16] */
21678  };
21679  
21680  
21681  static const Pool P16_BR[2] = {
21682      { pool                , P16_JRC             , 2   , 16,
21683         0xfc0f    , 0xd800    , 0                      , 0,
21684         0x0                 },        /* P16.JRC */
21685      { pool                , P16_BR1             , 2   , 16,
21686         0xfc00    , 0xd800    , 0                      , &P16_BR1_cond     ,
21687         0x0                 },        /* P16.BR1 */
21688  };
21689  
21690  
21691  static const Pool P16_SR[2] = {
21692      { instruction         , 0                   , 0   , 16,
21693         0xfd00    , 0x1c00    , &SAVE_16_         , 0,
21694         0x0                 },        /* SAVE[16] */
21695      { return_instruction  , 0                   , 0   , 16,
21696         0xfd00    , 0x1d00    , &RESTORE_JRC_16_  , 0,
21697         0x0                 },        /* RESTORE.JRC[16] */
21698  };
21699  
21700  
21701  static const Pool P16_4X4[4] = {
21702      { instruction         , 0                   , 0   , 16,
21703         0xfd08    , 0x3c00    , &ADDU_4X4_        , 0,
21704         XMMS_               },        /* ADDU[4X4] */
21705      { instruction         , 0                   , 0   , 16,
21706         0xfd08    , 0x3c08    , &MUL_4X4_         , 0,
21707         XMMS_               },        /* MUL[4X4] */
21708      { reserved_block      , 0                   , 0   , 16,
21709         0xfd08    , 0x3d00    , 0                      , 0,
21710         0x0                 },        /* P16.4X4~*(2) */
21711      { reserved_block      , 0                   , 0   , 16,
21712         0xfd08    , 0x3d08    , 0                      , 0,
21713         0x0                 },        /* P16.4X4~*(3) */
21714  };
21715  
21716  
21717  static const Pool P16_LB[4] = {
21718      { instruction         , 0                   , 0   , 16,
21719         0xfc0c    , 0x5c00    , &LB_16_           , 0,
21720         0x0                 },        /* LB[16] */
21721      { instruction         , 0                   , 0   , 16,
21722         0xfc0c    , 0x5c04    , &SB_16_           , 0,
21723         0x0                 },        /* SB[16] */
21724      { instruction         , 0                   , 0   , 16,
21725         0xfc0c    , 0x5c08    , &LBU_16_          , 0,
21726         0x0                 },        /* LBU[16] */
21727      { reserved_block      , 0                   , 0   , 16,
21728         0xfc0c    , 0x5c0c    , 0                      , 0,
21729         0x0                 },        /* P16.LB~*(3) */
21730  };
21731  
21732  
21733  static const Pool P16_LH[4] = {
21734      { instruction         , 0                   , 0   , 16,
21735         0xfc09    , 0x7c00    , &LH_16_           , 0,
21736         0x0                 },        /* LH[16] */
21737      { instruction         , 0                   , 0   , 16,
21738         0xfc09    , 0x7c01    , &SH_16_           , 0,
21739         0x0                 },        /* SH[16] */
21740      { instruction         , 0                   , 0   , 16,
21741         0xfc09    , 0x7c08    , &LHU_16_          , 0,
21742         0x0                 },        /* LHU[16] */
21743      { reserved_block      , 0                   , 0   , 16,
21744         0xfc09    , 0x7c09    , 0                      , 0,
21745         0x0                 },        /* P16.LH~*(3) */
21746  };
21747  
21748  
21749  static const Pool P16[32] = {
21750      { pool                , P16_MV              , 2   , 16,
21751         0xfc00    , 0x1000    , 0                      , 0,
21752         0x0                 },        /* P16.MV */
21753      { pool                , P16_SHIFT           , 2   , 16,
21754         0xfc00    , 0x3000    , 0                      , 0,
21755         0x0                 },        /* P16.SHIFT */
21756      { pool                , P16C                , 2   , 16,
21757         0xfc00    , 0x5000    , 0                      , 0,
21758         0x0                 },        /* P16C */
21759      { pool                , P16_A1              , 2   , 16,
21760         0xfc00    , 0x7000    , 0                      , 0,
21761         0x0                 },        /* P16.A1 */
21762      { pool                , P16_A2              , 2   , 16,
21763         0xfc00    , 0x9000    , 0                      , 0,
21764         0x0                 },        /* P16.A2 */
21765      { pool                , P16_ADDU            , 2   , 16,
21766         0xfc00    , 0xb000    , 0                      , 0,
21767         0x0                 },        /* P16.ADDU */
21768      { instruction         , 0                   , 0   , 16,
21769         0xfc00    , 0xd000    , &LI_16_           , 0,
21770         0x0                 },        /* LI[16] */
21771      { instruction         , 0                   , 0   , 16,
21772         0xfc00    , 0xf000    , &ANDI_16_         , 0,
21773         0x0                 },        /* ANDI[16] */
21774      { instruction         , 0                   , 0   , 16,
21775         0xfc00    , 0x1400    , &LW_16_           , 0,
21776         0x0                 },        /* LW[16] */
21777      { instruction         , 0                   , 0   , 16,
21778         0xfc00    , 0x3400    , &LW_SP_           , 0,
21779         0x0                 },        /* LW[SP] */
21780      { instruction         , 0                   , 0   , 16,
21781         0xfc00    , 0x5400    , &LW_GP16_         , 0,
21782         0x0                 },        /* LW[GP16] */
21783      { instruction         , 0                   , 0   , 16,
21784         0xfc00    , 0x7400    , &LW_4X4_          , 0,
21785         XMMS_               },        /* LW[4X4] */
21786      { instruction         , 0                   , 0   , 16,
21787         0xfc00    , 0x9400    , &SW_16_           , 0,
21788         0x0                 },        /* SW[16] */
21789      { instruction         , 0                   , 0   , 16,
21790         0xfc00    , 0xb400    , &SW_SP_           , 0,
21791         0x0                 },        /* SW[SP] */
21792      { instruction         , 0                   , 0   , 16,
21793         0xfc00    , 0xd400    , &SW_GP16_         , 0,
21794         0x0                 },        /* SW[GP16] */
21795      { instruction         , 0                   , 0   , 16,
21796         0xfc00    , 0xf400    , &SW_4X4_          , 0,
21797         XMMS_               },        /* SW[4X4] */
21798      { branch_instruction  , 0                   , 0   , 16,
21799         0xfc00    , 0x1800    , &BC_16_           , 0,
21800         0x0                 },        /* BC[16] */
21801      { call_instruction    , 0                   , 0   , 16,
21802         0xfc00    , 0x3800    , &BALC_16_         , 0,
21803         0x0                 },        /* BALC[16] */
21804      { reserved_block      , 0                   , 0   , 16,
21805         0xfc00    , 0x5800    , 0                      , 0,
21806         0x0                 },        /* P16~*(10) */
21807      { reserved_block      , 0                   , 0   , 16,
21808         0xfc00    , 0x7800    , 0                      , 0,
21809         0x0                 },        /* P16~*(14) */
21810      { branch_instruction  , 0                   , 0   , 16,
21811         0xfc00    , 0x9800    , &BEQZC_16_        , 0,
21812         0x0                 },        /* BEQZC[16] */
21813      { branch_instruction  , 0                   , 0   , 16,
21814         0xfc00    , 0xb800    , &BNEZC_16_        , 0,
21815         0x0                 },        /* BNEZC[16] */
21816      { pool                , P16_BR              , 2   , 16,
21817         0xfc00    , 0xd800    , 0                      , 0,
21818         0x0                 },        /* P16.BR */
21819      { reserved_block      , 0                   , 0   , 16,
21820         0xfc00    , 0xf800    , 0                      , 0,
21821         0x0                 },        /* P16~*(30) */
21822      { pool                , P16_SR              , 2   , 16,
21823         0xfc00    , 0x1c00    , 0                      , 0,
21824         0x0                 },        /* P16.SR */
21825      { pool                , P16_4X4             , 4   , 16,
21826         0xfc00    , 0x3c00    , 0                      , 0,
21827         0x0                 },        /* P16.4X4 */
21828      { pool                , P16_LB              , 4   , 16,
21829         0xfc00    , 0x5c00    , 0                      , 0,
21830         0x0                 },        /* P16.LB */
21831      { pool                , P16_LH              , 4   , 16,
21832         0xfc00    , 0x7c00    , 0                      , 0,
21833         0x0                 },        /* P16.LH */
21834      { reserved_block      , 0                   , 0   , 16,
21835         0xfc00    , 0x9c00    , 0                      , 0,
21836         0x0                 },        /* P16~*(19) */
21837      { instruction         , 0                   , 0   , 16,
21838         0xfc00    , 0xbc00    , &MOVEP            , 0,
21839         XMMS_               },        /* MOVEP */
21840      { reserved_block      , 0                   , 0   , 16,
21841         0xfc00    , 0xdc00    , 0                      , 0,
21842         0x0                 },        /* P16~*(27) */
21843      { instruction         , 0                   , 0   , 16,
21844         0xfc00    , 0xfc00    , &MOVEP_REV_       , 0,
21845         XMMS_               },        /* MOVEP[REV] */
21846  };
21847  
21848  
21849  static const Pool MAJOR[2] = {
21850      { pool                , P32                 , 32  , 32,
21851         0x10000000, 0x00000000, 0                      , 0,
21852         0x0                 },        /* P32 */
21853      { pool                , P16                 , 32  , 16,
21854         0x1000    , 0x1000    , 0                      , 0,
21855         0x0                 },        /* P16 */
21856  };
21857  
21858  /*
21859   * Recurse through tables until the instruction is found then return
21860   * the string and size
21861   *
21862   * inputs:
21863   *      pointer to a word stream,
21864   *      disassember table and size
21865   * returns:
21866   *      instruction size    - negative is error
21867   *      disassembly string  - on error will constain error string
21868   */
21869  static int Disassemble(const uint16 *data, char **dis,
21870                       TABLE_ENTRY_TYPE *type, const Pool *table,
21871                       int table_size, Dis_info *info)
21872  {
21873      for (int i = 0; i < table_size; i++) {
21874          uint64 op_code = extract_op_code_value(data,
21875                               table[i].instructions_size);
21876          if ((op_code & table[i].mask) == table[i].value) {
21877              /* possible match */
21878              conditional_function cond = table[i].condition;
21879              if ((cond == NULL) || cond(op_code)) {
21880                  if (table[i].type == pool) {
21881                      return Disassemble(data, dis, type,
21882                                         table[i].next_table,
21883                                         table[i].next_table_size,
21884                                         info);
21885                  } else if ((table[i].type == instruction) ||
21886                             (table[i].type == call_instruction) ||
21887                             (table[i].type == branch_instruction) ||
21888                             (table[i].type == return_instruction)) {
21889                      disassembly_function dis_fn = table[i].disassembly;
21890                      if (dis_fn == 0) {
21891                          *dis = g_strdup(
21892                              "disassembler failure - bad table entry");
21893                          return -6;
21894                      }
21895                      *type = table[i].type;
21896                      *dis = dis_fn(op_code, info);
21897                      return table[i].instructions_size;
21898                  } else {
21899                      *dis = g_strdup("reserved instruction");
21900                      return -2;
21901                  }
21902              }
21903          }
21904      }
21905      *dis = g_strdup("failed to disassemble");
21906      return -1;      /* failed to disassemble        */
21907  }
21908  
21909  
21910  static bool nanomips_dis(const uint16_t *data, char **buf, Dis_info *info)
21911  {
21912      TABLE_ENTRY_TYPE type;
21913  
21914      /* Handle runtime errors. */
21915      if (unlikely(sigsetjmp(info->buf, 0) != 0)) {
21916          return false;
21917      }
21918      return Disassemble(data, buf, &type, MAJOR, ARRAY_SIZE(MAJOR), info) >= 0;
21919  }
21920  
21921  static bool read_u16(uint16_t *ret, bfd_vma memaddr,
21922                       struct disassemble_info *info)
21923  {
21924      int status = (*info->read_memory_func)(memaddr, (bfd_byte *)ret, 2, info);
21925      if (status != 0) {
21926          (*info->memory_error_func)(status, memaddr, info);
21927          return false;
21928      }
21929  
21930      if ((info->endian == BFD_ENDIAN_BIG) != HOST_BIG_ENDIAN) {
21931          bswap16s(ret);
21932      }
21933      return true;
21934  }
21935  
21936  int print_insn_nanomips(bfd_vma memaddr, struct disassemble_info *info)
21937  {
21938      int length;
21939      uint16_t words[3] = { };
21940      g_autofree char *buf = NULL;
21941  
21942      info->bytes_per_chunk = 2;
21943      info->display_endian = info->endian;
21944      info->insn_info_valid = 1;
21945      info->branch_delay_insns = 0;
21946      info->data_size = 0;
21947      info->insn_type = dis_nonbranch;
21948      info->target = 0;
21949      info->target2 = 0;
21950  
21951      Dis_info disassm_info;
21952      disassm_info.m_pc = memaddr;
21953      disassm_info.fprintf_func = info->fprintf_func;
21954      disassm_info.stream = info->stream;
21955  
21956      if (!read_u16(&words[0], memaddr, info)) {
21957          return -1;
21958      }
21959      length = 2;
21960  
21961      /* Handle 32-bit opcodes.  */
21962      if ((words[0] & 0x1000) == 0) {
21963          if (!read_u16(&words[1], memaddr + 2, info)) {
21964              return -1;
21965          }
21966          length = 4;
21967  
21968          /* Handle 48-bit opcodes.  */
21969          if ((words[0] >> 10) == 0x18) {
21970              if (!read_u16(&words[1], memaddr + 4, info)) {
21971                  return -1;
21972              }
21973              length = 6;
21974          }
21975      }
21976  
21977      for (int i = 0; i < ARRAY_SIZE(words); i++) {
21978          if (i * 2 < length) {
21979              (*info->fprintf_func)(info->stream, "%04x ", words[i]);
21980          } else {
21981              (*info->fprintf_func)(info->stream, "     ");
21982          }
21983      }
21984  
21985      if (nanomips_dis(words, &buf, &disassm_info)) {
21986          (*info->fprintf_func) (info->stream, "%s", buf);
21987      }
21988  
21989      return length;
21990  }
21991