Home | History | Annotate | Line # | Download | only in opcodes
      1   1.1  christos /* Instruction printing code for Score
      2  1.11  christos    Copyright (C) 2009-2024 Free Software Foundation, Inc.
      3   1.1  christos    Contributed by:
      4   1.1  christos    Brain.lin (brain.lin (at) sunplusct.com)
      5   1.1  christos    Mei Ligang (ligang (at) sunnorth.com.cn)
      6   1.1  christos    Pei-Lin Tsai (pltsai (at) sunplus.com)
      7   1.1  christos 
      8   1.1  christos    This file is part of the GNU opcodes library.
      9   1.1  christos 
     10   1.1  christos    This library is free software; you can redistribute it and/or modify
     11   1.1  christos    it under the terms of the GNU General Public License as published by
     12   1.1  christos    the Free Software Foundation; either version 3, or (at your option)
     13   1.1  christos    any later version.
     14   1.1  christos 
     15   1.1  christos    It is distributed in the hope that it will be useful, but WITHOUT
     16   1.1  christos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     17   1.1  christos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     18   1.1  christos    License for more details.
     19   1.1  christos 
     20   1.1  christos    You should have received a copy of the GNU General Public License
     21   1.1  christos    along with this file; see the file COPYING.  If not, write to the
     22   1.1  christos    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
     23   1.1  christos    MA 02110-1301, USA.  */
     24   1.1  christos 
     25   1.1  christos #include "sysdep.h"
     26   1.1  christos #include "dis-asm.h"
     27   1.1  christos #define DEFINE_TABLE
     28   1.1  christos #include "opintl.h"
     29   1.1  christos #include "bfd.h"
     30   1.1  christos 
     31   1.1  christos /* FIXME: This shouldn't be done here.  */
     32   1.1  christos #include "elf-bfd.h"
     33   1.1  christos #include "elf/internal.h"
     34   1.1  christos #include "elf/score.h"
     35   1.1  christos 
     36   1.1  christos #ifndef streq
     37   1.1  christos #define streq(a,b)    (strcmp ((a), (b)) == 0)
     38   1.1  christos #endif
     39   1.1  christos 
     40   1.1  christos #ifndef NUM_ELEM
     41   1.1  christos #define NUM_ELEM(a)     (sizeof (a) / sizeof (a)[0])
     42   1.1  christos #endif
     43   1.1  christos 
     44   1.1  christos struct score_opcode
     45   1.1  christos {
     46   1.1  christos   unsigned long value;
     47   1.9  christos   unsigned long mask;	/* Recognise instruction if (op & mask) == value.  */
     48   1.9  christos   char *assembler;	/* Disassembly string.  */
     49   1.1  christos };
     50   1.1  christos 
     51   1.1  christos /* Note: There is a partial ordering in this table - it must be searched from
     52   1.1  christos    the top to obtain a correct match.  */
     53   1.1  christos 
     54   1.1  christos static struct score_opcode score_opcodes[] =
     55   1.1  christos {
     56   1.1  christos   /* Score Instructions.  */
     57   1.1  christos   {0x3800000a, 0x3e007fff, "abs\t\t%20-24r, %15-19r"},
     58   1.6  christos   {0x3800004b, 0x3e007fff, "abs.s\t\t%20-24r, %15-19r"},
     59   1.1  christos   {0x00000010, 0x3e0003ff, "add\t\t%20-24r, %15-19r, %10-14r"},
     60   1.1  christos   {0x00000011, 0x3e0003ff, "add.c\t\t%20-24r, %15-19r, %10-14r"},
     61   1.1  christos   {0x38000048, 0x3e0003ff, "add.s\t\t%20-24r, %15-19r, %10-14r"},
     62   1.1  christos   {0x00000012, 0x3e0003ff, "addc\t\t%20-24r, %15-19r, %10-14r"},
     63   1.1  christos   {0x00000013, 0x3e0003ff, "addc.c\t\t%20-24r, %15-19r, %10-14r"},
     64   1.1  christos   {0x02000000, 0x3e0e0001, "addi\t\t%20-24r, %1-16i"},
     65   1.1  christos   {0x02000001, 0x3e0e0001, "addi.c\t\t%20-24r, %1-16i"},
     66   1.1  christos   {0x0a000000, 0x3e0e0001, "addis\t\t%20-24r, %1-16d(0x%1-16x)"},
     67   1.1  christos   {0x0a000001, 0x3e0e0001, "addis.c\t\t%20-24r, %1-16d(0x%1-16x)"},
     68   1.1  christos   {0x10000000, 0x3e000001, "addri\t\t%20-24r, %15-19r, %1-14i"},
     69   1.1  christos   {0x10000001, 0x3e000001, "addri.c\t\t%20-24r, %15-19r, %1-14i"},
     70   1.1  christos   {0x00000009, 0x0000700f, "addc!\t\t%8-11r, %4-7r"},
     71   1.1  christos   {0x00002000, 0x0000700f, "add!\t\t%8-11r, %4-7r"},
     72   1.1  christos   {0x00006000, 0x00007087, "addei!\t\t%8-11r, %3-6d"},
     73   1.1  christos   {0x00000020, 0x3e0003ff, "and\t\t%20-24r, %15-19r, %10-14r"},
     74   1.1  christos   {0x00000021, 0x3e0003ff, "and.c\t\t%20-24r, %15-19r, %10-14r"},
     75   1.1  christos   {0x02080000, 0x3e0e0001, "andi\t\t%20-24r, 0x%1-16x"},
     76   1.1  christos   {0x02080001, 0x3e0e0001, "andi.c\t\t%20-24r, 0x%1-16x"},
     77   1.1  christos   {0x0a080000, 0x3e0e0001, "andis\t\t%20-24r, 0x%1-16x"},
     78   1.1  christos   {0x0a080001, 0x3e0e0001, "andis.c\t\t%20-24r, 0x%1-16x"},
     79   1.1  christos   {0x18000000, 0x3e000001, "andri\t\t%20-24r, %15-19r, 0x%1-14x"},
     80   1.1  christos   {0x18000001, 0x3e000001, "andri.c\t\t%20-24r, %15-19r,0x%1-14x"},
     81   1.1  christos   {0x00002004, 0x0000700f, "and!\t\t%8-11r, %4-7r"},
     82   1.1  christos   {0x08000000, 0x3e007c01, "bcs\t\t%b"},
     83   1.1  christos   {0x08000400, 0x3e007c01, "bcc\t\t%b"},
     84   1.1  christos   {0x08003800, 0x3e007c01, "bcnz\t\t%b"},
     85   1.1  christos   {0x08000001, 0x3e007c01, "bcsl\t\t%b"},
     86   1.1  christos   {0x08000401, 0x3e007c01, "bccl\t\t%b"},
     87   1.1  christos   {0x08003801, 0x3e007c01, "bcnzl\t\t%b"},
     88   1.1  christos   {0x00004000, 0x00007f00, "bcs!\t\t%b"},
     89   1.1  christos   {0x00004100, 0x00007f00, "bcc!\t\t%b"},
     90   1.1  christos   {0x00004e00, 0x00007f00, "bcnz!\t\t%b"},
     91   1.1  christos   {0x08001000, 0x3e007c01, "beq\t\t%b"},
     92   1.1  christos   {0x08001001, 0x3e007c01, "beql\t\t%b"},
     93   1.1  christos   {0x00004400, 0x00007f00, "beq!\t\t%b"},
     94   1.1  christos   {0x08000800, 0x3e007c01, "bgtu\t\t%b"},
     95   1.1  christos   {0x08001800, 0x3e007c01, "bgt\t\t%b"},
     96   1.1  christos   {0x08002000, 0x3e007c01, "bge\t\t%b"},
     97   1.1  christos   {0x08000801, 0x3e007c01, "bgtul\t\t%b"},
     98   1.1  christos   {0x08001801, 0x3e007c01, "bgtl\t\t%b"},
     99   1.1  christos   {0x08002001, 0x3e007c01, "bgel\t\t%b"},
    100   1.1  christos   {0x00004200, 0x00007f00, "bgtu!\t\t%b"},
    101   1.1  christos   {0x00004600, 0x00007f00, "bgt!\t\t%b"},
    102   1.1  christos   {0x00004800, 0x00007f00, "bge!\t\t%b"},
    103   1.1  christos   {0x00000029, 0x3e0003ff, "bitclr.c\t%20-24r, %15-19r, 0x%10-14x"},
    104   1.1  christos   {0x0000002b, 0x3e0003ff, "bitset.c\t%20-24r, %15-19r, 0x%10-14x"},
    105   1.1  christos   {0x0000002d, 0x3e0003ff, "bittst.c\t%15-19r, 0x%10-14x"},
    106   1.1  christos   {0x0000002f, 0x3e0003ff, "bittgl.c\t%20-24r, %15-19r, 0x%10-14x"},
    107   1.1  christos   {0x00006004, 0x00007007, "bitclr!\t\t%8-11r, 0x%3-7x"},
    108   1.1  christos   {0x3800000c, 0x3e0003ff, "bitrev\t\t%20-24r, %15-19r,%10-14r"},
    109   1.1  christos   {0x00006005, 0x00007007, "bitset!\t\t%8-11r, 0x%3-7x"},
    110   1.1  christos   {0x00006006, 0x00007007, "bittst!\t\t%8-11r, 0x%3-7x"},
    111   1.1  christos   {0x00006007, 0x00007007, "bittgl!\t\t%8-11r, 0x%3-7x"},
    112   1.1  christos   {0x08000c00, 0x3e007c01, "bleu\t\t%b"},
    113   1.1  christos   {0x08001c00, 0x3e007c01, "ble\t\t%b"},
    114   1.1  christos   {0x08002400, 0x3e007c01, "blt\t\t%b"},
    115   1.1  christos   {0x08000c01, 0x3e007c01, "bleul\t\t%b"},
    116   1.1  christos   {0x08001c01, 0x3e007c01, "blel\t\t%b"},
    117   1.1  christos   {0x08002401, 0x3e007c01, "bltl\t\t%b"},
    118   1.1  christos   {0x08003c01, 0x3e007c01, "bl\t\t%b"},
    119   1.1  christos   {0x00004300, 0x00007f00, "bleu!\t\t%b"},
    120   1.1  christos   {0x00004700, 0x00007f00, "ble!\t\t%b"},
    121   1.1  christos   {0x00004900, 0x00007f00, "blt!\t\t%b"},
    122   1.1  christos   {0x08002800, 0x3e007c01, "bmi\t\t%b"},
    123   1.1  christos   {0x08002801, 0x3e007c01, "bmil\t\t%b"},
    124   1.1  christos   {0x00004a00, 0x00007f00, "bmi!\t\t%b"},
    125   1.1  christos   {0x08001400, 0x3e007c01, "bne\t\t%b"},
    126   1.1  christos   {0x08001401, 0x3e007c01, "bnel\t\t%b"},
    127   1.1  christos   {0x00004500, 0x00007f00, "bne!\t\t%b"},
    128   1.1  christos   {0x08002c00, 0x3e007c01, "bpl\t\t%b"},
    129   1.1  christos   {0x08002c01, 0x3e007c01, "bpll\t\t%b"},
    130   1.1  christos   {0x00004b00, 0x00007f00, "bpl!\t\t%b"},
    131   1.1  christos   {0x00000008, 0x3e007fff, "brcs\t\t%15-19r"},
    132   1.1  christos   {0x00000408, 0x3e007fff, "brcc\t\t%15-19r"},
    133   1.1  christos   {0x00000808, 0x3e007fff, "brgtu\t\t%15-19r"},
    134   1.1  christos   {0x00000c08, 0x3e007fff, "brleu\t\t%15-19r"},
    135   1.1  christos   {0x00001008, 0x3e007fff, "breq\t\t%15-19r"},
    136   1.1  christos   {0x00001408, 0x3e007fff, "brne\t\t%15-19r"},
    137   1.1  christos   {0x00001808, 0x3e007fff, "brgt\t\t%15-19r"},
    138   1.1  christos   {0x00001c08, 0x3e007fff, "brle\t\t%15-19r"},
    139   1.1  christos   {0x00002008, 0x3e007fff, "brge\t\t%15-19r"},
    140   1.1  christos   {0x00002408, 0x3e007fff, "brlt\t\t%15-19r"},
    141   1.1  christos   {0x00002808, 0x3e007fff, "brmi\t\t%15-19r"},
    142   1.1  christos   {0x00002c08, 0x3e007fff, "brpl\t\t%15-19r"},
    143   1.1  christos   {0x00003008, 0x3e007fff, "brvs\t\t%15-19r"},
    144   1.1  christos   {0x00003408, 0x3e007fff, "brvc\t\t%15-19r"},
    145   1.1  christos   {0x00003808, 0x3e007fff, "brcnz\t\t%15-19r"},
    146   1.1  christos   {0x00003c08, 0x3e007fff, "br\t\t%15-19r"},
    147   1.1  christos   {0x00000009, 0x3e007fff, "brcsl\t\t%15-19r"},
    148   1.1  christos   {0x00000409, 0x3e007fff, "brccl\t\t%15-19r"},
    149   1.1  christos   {0x00000809, 0x3e007fff, "brgtul\t\t%15-19r"},
    150   1.1  christos   {0x00000c09, 0x3e007fff, "brleul\t\t%15-19r"},
    151   1.1  christos   {0x00001009, 0x3e007fff, "breql\t\t%15-19r"},
    152   1.1  christos   {0x00001409, 0x3e007fff, "brnel\t\t%15-19r"},
    153   1.1  christos   {0x00001809, 0x3e007fff, "brgtl\t\t%15-19r"},
    154   1.1  christos   {0x00001c09, 0x3e007fff, "brlel\t\t%15-19r"},
    155   1.1  christos   {0x00002009, 0x3e007fff, "brgel\t\t%15-19r"},
    156   1.1  christos   {0x00002409, 0x3e007fff, "brltl\t\t%15-19r"},
    157   1.1  christos   {0x00002809, 0x3e007fff, "brmil\t\t%15-19r"},
    158   1.1  christos   {0x00002c09, 0x3e007fff, "brpll\t\t%15-19r"},
    159   1.1  christos   {0x00003009, 0x3e007fff, "brvsl\t\t%15-19r"},
    160   1.1  christos   {0x00003409, 0x3e007fff, "brvcl\t\t%15-19r"},
    161   1.1  christos   {0x00003809, 0x3e007fff, "brcnzl\t\t%15-19r"},
    162   1.1  christos   {0x00003c09, 0x3e007fff, "brl\t\t%15-19r"},
    163   1.1  christos   {0x00000004, 0x00007f0f, "brcs!\t\t%4-7r"},
    164   1.1  christos   {0x00000104, 0x00007f0f, "brcc!\t\t%4-7r"},
    165   1.1  christos   {0x00000204, 0x00007f0f, "brgtu!\t\t%4-7r"},
    166   1.1  christos   {0x00000304, 0x00007f0f, "brleu!\t\t%4-7r"},
    167   1.1  christos   {0x00000404, 0x00007f0f, "breq!\t\t%4-7r"},
    168   1.1  christos   {0x00000504, 0x00007f0f, "brne!\t\t%4-7r"},
    169   1.1  christos   {0x00000604, 0x00007f0f, "brgt!\t\t%4-7r"},
    170   1.1  christos   {0x00000704, 0x00007f0f, "brle!\t\t%4-7r"},
    171   1.1  christos   {0x00000804, 0x00007f0f, "brge!\t\t%4-7r"},
    172   1.1  christos   {0x00000904, 0x00007f0f, "brlt!\t\t%4-7r"},
    173   1.1  christos   {0x00000a04, 0x00007f0f, "brmi!\t\t%4-7r"},
    174   1.1  christos   {0x00000b04, 0x00007f0f, "brpl!\t\t%4-7r"},
    175   1.1  christos   {0x00000c04, 0x00007f0f, "brvs!\t\t%4-7r"},
    176   1.1  christos   {0x00000d04, 0x00007f0f, "brvc!\t\t%4-7r"},
    177   1.1  christos   {0x00000e04, 0x00007f0f, "brcnz!\t\t%4-7r"},
    178   1.1  christos   {0x00000f04, 0x00007f0f, "br!\t\t%4-7r"},
    179   1.1  christos   {0x0000000c, 0x00007f0f, "brcsl!\t\t%4-7r"},
    180   1.1  christos   {0x0000010c, 0x00007f0f, "brccl!\t\t%4-7r"},
    181   1.1  christos   {0x0000020c, 0x00007f0f, "brgtul!\t\t%4-7r"},
    182   1.1  christos   {0x0000030c, 0x00007f0f, "brleul!\t\t%4-7r"},
    183   1.1  christos   {0x0000040c, 0x00007f0f, "breql!\t\t%4-7r"},
    184   1.1  christos   {0x0000050c, 0x00007f0f, "brnel!\t\t%4-7r"},
    185   1.1  christos   {0x0000060c, 0x00007f0f, "brgtl!\t\t%4-7r"},
    186   1.1  christos   {0x0000070c, 0x00007f0f, "brlel!\t\t%4-7r"},
    187   1.1  christos   {0x0000080c, 0x00007f0f, "brgel!\t\t%4-7r"},
    188   1.1  christos   {0x0000090c, 0x00007f0f, "brltl!\t\t%4-7r"},
    189   1.1  christos   {0x00000a0c, 0x00007f0f, "brmil!\t\t%4-7r"},
    190   1.1  christos   {0x00000b0c, 0x00007f0f, "brpll!\t\t%4-7r"},
    191   1.1  christos   {0x00000c0c, 0x00007f0f, "brvsl!\t\t%4-7r"},
    192   1.1  christos   {0x00000d0c, 0x00007f0f, "brvcl!\t\t%4-7r"},
    193   1.1  christos   {0x00000e0c, 0x00007f0f, "brcnzl!\t\t%4-7r"},
    194   1.1  christos   {0x00000f0c, 0x00007f0f, "brl!\t\t%4-7r"},
    195   1.1  christos   {0x08003000, 0x3e007c01, "bvs\t\t%b"},
    196   1.1  christos   {0x08003400, 0x3e007c01, "bvc\t\t%b"},
    197   1.1  christos   {0x08003001, 0x3e007c01, "bvsl\t\t%b"},
    198   1.1  christos   {0x08003401, 0x3e007c01, "bvcl\t\t%b"},
    199   1.1  christos   {0x00004c00, 0x00007f00, "bvs!\t\t%b"},
    200   1.1  christos   {0x00004d00, 0x00007f00, "bvc!\t\t%b"},
    201   1.1  christos   {0x00004f00, 0x00007f00, "b!\t\t%b"},
    202   1.1  christos   {0x08003c00, 0x3e007c01, "b\t\t%b"},
    203   1.1  christos   {0x30000000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    204   1.1  christos   {0x30100000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    205   1.1  christos   {0x30200000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    206   1.1  christos   {0x30300000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    207   1.1  christos   {0x30400000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    208   1.1  christos   {0x30800000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    209   1.1  christos   {0x30900000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    210   1.1  christos   {0x30a00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    211   1.1  christos   {0x30b00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    212   1.1  christos   {0x30c00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    213   1.1  christos   {0x30d00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    214   1.1  christos   {0x30e00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    215   1.1  christos   {0x31000000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    216   1.1  christos   {0x31100000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    217   1.1  christos   {0x31800000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    218   1.1  christos   {0x31a00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    219   1.1  christos   {0x31b00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    220   1.1  christos   {0x31c00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    221   1.1  christos   {0x31d00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    222   1.1  christos   {0x31e00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    223   1.1  christos   {0x31f00000, 0x3ff00000, "cache\t\t%20-24d, [%15-19r, %0-14i]"},
    224   1.1  christos   {0x38000000, 0x3ff003ff, "mad\t\t%15-19r, %10-14r"},
    225   1.6  christos   {0x38000020, 0x3ff003ff, "madu\t\t%15-19r, %10-14r"},
    226   1.1  christos   {0x38000080, 0x3ff003ff, "mad.f\t\t%15-19r, %10-14r"},
    227   1.6  christos   {0x38000001, 0x3ff003ff, "msb\t\t%15-19r, %10-14r"},
    228   1.1  christos   {0x38000021, 0x3ff003ff, "msbu\t\t%15-19r, %10-14r"},
    229   1.1  christos   {0x38000081, 0x3ff003ff, "msb.f\t\t%15-19r, %10-14r"},
    230   1.6  christos   {0x38000102, 0x3ff003ff, "mazl\t\t%15-19r, %10-14r"},
    231   1.6  christos   {0x38000182, 0x3ff003ff, "mazl.f\t\t%15-19r, %10-14r"},
    232   1.6  christos   {0x38000002, 0x3ff003ff, "madl\t\t%15-19r, %10-14r"},
    233   1.6  christos   {0x380000c2, 0x3ff003ff, "madl.fs\t\t%15-19r, %10-14r"},
    234   1.6  christos   {0x38000303, 0x3ff003ff, "mazh\t\t%15-19r, %10-14r"},
    235   1.6  christos   {0x38000383, 0x3ff003ff, "mazh.f\t\t%15-19r, %10-14r"},
    236   1.6  christos   {0x38000203, 0x3ff003ff, "madh\t\t%15-19r, %10-14r"},
    237   1.6  christos   {0x380002c3, 0x3ff003ff, "madh.fs\t\t%15-19r, %10-14r"},
    238   1.6  christos   {0x38000007, 0x3e0003ff, "max\t\t%20-24r, %15-19r, %10-14r"},
    239   1.1  christos   {0x38000006, 0x3e0003ff, "min\t\t%20-24r, %15-19r, %10-14r"},
    240   1.6  christos   {0x38000104, 0x3ff003ff, "mszl\t\t%15-19r, %10-14r"},
    241   1.6  christos   {0x38000184, 0x3ff003ff, "mszl.f\t\t%15-19r, %10-14r"},
    242   1.6  christos   {0x38000004, 0x3ff003ff, "msbl\t\t%15-19r, %10-14r"},
    243   1.1  christos   {0x380000c4, 0x3ff003ff, "msbl.fs\t\t%15-19r, %10-14r"},
    244   1.6  christos   {0x38000305, 0x3ff003ff, "mszh\t\t%15-19r, %10-14r"},
    245   1.6  christos   {0x38000385, 0x3ff003ff, "mszh.f\t\t%15-19r, %10-14r"},
    246   1.6  christos   {0x38000205, 0x3ff003ff, "msbh\t\t%15-19r, %10-14r"},
    247   1.6  christos   {0x380002c5, 0x3ff003ff, "msbh.fs\t\t%15-19r, %10-14r"},
    248   1.6  christos   {0x3800004e, 0x3e0003ff, "sll.s\t\t%20-24r, %15-19r, %10-14r"},
    249   1.6  christos   {0x38000049, 0x3e0003ff, "sub.s\t\t%20-24r, %15-19r, %10-14r"},
    250   1.6  christos   {0x3800000d, 0x3e007fff, "clz\t\t%20-24r, %15-19r"},
    251   1.1  christos   {0x38000000, 0x3e000000, "ceinst\t\t%20-24d, %15-19r, %10-14r, %5-9d, %0-4d"},
    252   1.1  christos   {0x00000019, 0x3ff003ff, "cmpteq.c\t\t%15-19r, %10-14r"},
    253   1.1  christos   {0x00100019, 0x3ff003ff, "cmptmi.c\t\t%15-19r, %10-14r"},
    254   1.1  christos   {0x00300019, 0x3ff003ff, "cmp.c\t\t%15-19r, %10-14r"},
    255   1.1  christos   {0x0000001b, 0x3ff07fff, "cmpzteq.c\t%15-19r"},
    256   1.1  christos   {0x0010001b, 0x3ff07fff, "cmpztmi.c\t%15-19r"},
    257   1.1  christos   {0x0030001b, 0x3ff07fff, "cmpz.c\t\t%15-19r"},
    258   1.1  christos   {0x02040001, 0x3e0e0001, "cmpi.c\t\t%20-24r, %1-16i"},
    259   1.1  christos   {0x00002003, 0x0000700f, "cmp!\t\t%8-11r, %4-7r"},
    260   1.1  christos   {0x0c00000c, 0x3e00001f, "cop1\t\tc%20-24r, c%15-19r, c%10-14r, %5-9d"},
    261   1.1  christos   {0x0c000014, 0x3e00001f, "cop2\t\tc%20-24r, c%15-19r, c%10-14r, %5-9d"},
    262   1.1  christos   {0x0c00001c, 0x3e00001f, "cop3\t\tc%20-24r, c%15-19r, c%10-14r, %5-9d"},
    263   1.1  christos   {0x00000044, 0x3e0003ff, "div\t\t%15-19r, %10-14r"},
    264   1.1  christos   {0x00000046, 0x3e0003ff, "divu\t\t%15-19r, %10-14r"},
    265   1.1  christos   {0x0c0000a4, 0x3e0003ff, "drte"},
    266   1.1  christos   {0x00000058, 0x3e0003ff, "extsb\t\t%20-24r, %15-19r"},
    267   1.1  christos   {0x00000059, 0x3e0003ff, "extsb.c\t\t%20-24r, %15-19r"},
    268   1.1  christos   {0x0000005a, 0x3e0003ff, "extsh\t\t%20-24r, %15-19r"},
    269   1.1  christos   {0x0000005b, 0x3e0003ff, "extsh.c\t\t%20-24r, %15-19r"},
    270   1.1  christos   {0x0000005c, 0x3e0003ff, "extzb\t\t%20-24r, %15-19r"},
    271   1.1  christos   {0x0000005d, 0x3e0003ff, "extzb.c\t\t%20-24r, %15-19r"},
    272   1.1  christos   {0x0000005e, 0x3e0003ff, "extzh\t\t%20-24r, %15-19r"},
    273   1.1  christos   {0x0000005f, 0x3e0003ff, "extzh.c\t\t%20-24r, %15-19r"},
    274   1.1  christos   {0x04000001, 0x3e000001, "jl\t\t%j"},
    275   1.1  christos   {0x00003001, 0x00007001, "jl!\t\t%j"},
    276   1.1  christos   {0x00003000, 0x00007001, "j!\t\t%j"},
    277   1.1  christos   {0x04000000, 0x3e000001, "j\t\t%j"},
    278   1.1  christos   {0x26000000, 0x3e000000, "lb\t\t%20-24r, [%15-19r, %0-14i]"},
    279   1.1  christos   {0x2c000000, 0x3e000000, "lbu\t\t%20-24r, [%15-19r, %0-14i]"},
    280   1.1  christos   {0x06000003, 0x3e000007, "lb\t\t%20-24r, [%15-19r, %3-14i]+"},
    281   1.1  christos   {0x06000006, 0x3e000007, "lbu\t\t%20-24r, [%15-19r, %3-14i]+"},
    282   1.1  christos   {0x0e000003, 0x3e000007, "lb\t\t%20-24r, [%15-19r]+, %3-14i"},
    283   1.1  christos   {0x0e000006, 0x3e000007, "lbu\t\t%20-24r, [%15-19r]+, %3-14i"},
    284   1.1  christos   {0x0000200b, 0x0000700f, "lbu!\t\t%8-11r, [%4-7r]"},
    285   1.1  christos   {0x00007003, 0x00007007, "lbup!\t\t%8-11r, %3-7d"},
    286   1.1  christos   {0x00000060, 0x3e0003ff, "lcb\t\t[%15-19r]+"},
    287   1.1  christos   {0x00000062, 0x3e0003ff, "lcw\t\t%20-24r, [%15-19r]+"},
    288   1.1  christos   {0x00000066, 0x3e0003ff, "lce\t\t%20-24r, [%15-19r]+"},
    289   1.1  christos   {0x0c00000a, 0x3e00001f, "ldc1\t\tc%15-19r, [%20-24r, %5-14i]"},
    290   1.1  christos   {0x0c000012, 0x3e00001f, "ldc2\t\tc%15-19r, [%20-24r, %5-14i]"},
    291   1.1  christos   {0x0c00001a, 0x3e00001f, "ldc3\t\tc%15-19r, [%20-24r, %5-14i]"},
    292   1.1  christos   {0x22000000, 0x3e000000, "lh\t\t%20-24r, [%15-19r, %0-14i]"},
    293   1.1  christos   {0x24000000, 0x3e000000, "lhu\t\t%20-24r, [%15-19r, %0-14i]"},
    294   1.1  christos   {0x06000001, 0x3e000007, "lh\t\t%20-24r, [%15-19r, %3-14i]+"},
    295   1.1  christos   {0x06000002, 0x3e000007, "lhu\t\t%20-24r, [%15-19r, %3-14i]+"},
    296   1.1  christos   {0x0e000001, 0x3e000007, "lh\t\t%20-24r, [%15-19r]+, %3-14i"},
    297   1.1  christos   {0x0e000002, 0x3e000007, "lhu\t\t%20-24r, [%15-19r]+, %3-14i"},
    298   1.1  christos   {0x00002009, 0x0000700f, "lh!\t\t%8-11r, [%4-7r]"},
    299   1.1  christos   {0x00007001, 0x00007007, "lhp!\t\t%8-11r, %3-7d1"},
    300   1.1  christos   {0x020c0000, 0x3e0e0000, "ldi\t\t%20-24r, 0x%1-16x(%1-16i)"},
    301   1.1  christos   {0x0a0c0000, 0x3e0e0000, "ldis\t\t%20-24r, 0x%1-16x(%1-16i)"},
    302   1.1  christos   {0x00005000, 0x00007000, "ldiu!\t\t%8-11r, %0-7d"},
    303   1.1  christos   {0x0000000c, 0x3e0003ff, "alw\t\t%20-24r, [%15-19r]"},
    304   1.1  christos   {0x20000000, 0x3e000000, "lw\t\t%20-24r, [%15-19r, %0-14i]"},
    305   1.1  christos   {0x06000000, 0x3e000007, "lw\t\t%20-24r, [%15-19r, %3-14i]+"},
    306   1.1  christos   {0x0e000000, 0x3e000007, "lw\t\t%20-24r, [%15-19r]+, %3-14i"},
    307   1.1  christos   {0x00002008, 0x0000700f, "lw!\t\t%8-11r, [%4-7r]"},
    308   1.1  christos   {0x00007000, 0x00007007, "lwp!\t\t%8-11r, %3-7d2"},
    309   1.6  christos   {0x0000100b, 0x0000700f, "madh.fs!\t\t%8-11r, %4-7r"},
    310   1.6  christos   {0x0000100a, 0x0000700f, "madl.fs!\t\t%8-11r, %4-7r"},
    311   1.6  christos   {0x00001005, 0x0000700f, "madu!\t\t%8-11r, %4-7r"},
    312   1.1  christos   {0x00001004, 0x0000700f, "mad.f!\t\t%8-11r, %4-7r"},
    313   1.6  christos   {0x00001009, 0x0000700f, "mazh.f!\t\t%8-11r, %4-7r"},
    314   1.1  christos   {0x00001008, 0x0000700f, "mazl.f!\t\t%8-11r, %4-7r"},
    315   1.1  christos   {0x00000448, 0x3e007fff, "mfcel\t\t%20-24r"},
    316   1.1  christos   {0x00001001, 0x00007f0f, "mfcel!\t\t%4-7r"},
    317   1.6  christos   {0x00000848, 0x3e007fff, "mfceh\t\t%20-24r"},
    318   1.6  christos   {0x00001101, 0x00007f0f, "mfceh!\t\t%4-7r"},
    319   1.1  christos   {0x00000c48, 0x3e007fff, "mfcehl\t\t%20-24r, %15-19r"},
    320   1.1  christos   {0x00000048, 0x3e0003ff, "mfce\t\t%20-24r, er%10-14d"},
    321   1.1  christos   {0x00000050, 0x3e0003ff, "mfsr\t\t%20-24r, sr%10-14d"},
    322   1.1  christos   {0x0c000001, 0x3e00001f, "mfcr\t\t%20-24r, c%15-19r"},
    323   1.1  christos   {0x0c000009, 0x3e00001f, "mfc1\t\t%20-24r, c%15-19r"},
    324   1.1  christos   {0x0c000011, 0x3e00001f, "mfc2\t\t%20-24r, c%15-19r"},
    325   1.1  christos   {0x0c000019, 0x3e00001f, "mfc3\t\t%20-24r, c%15-19r"},
    326   1.1  christos   {0x0c00000f, 0x3e00001f, "mfcc1\t\t%20-24r, c%15-19r"},
    327   1.1  christos   {0x0c000017, 0x3e00001f, "mfcc2\t\t%20-24r, c%15-19r"},
    328   1.1  christos   {0x0c00001f, 0x3e00001f, "mfcc3\t\t%20-24r, c%15-19r"},
    329   1.1  christos   {0x00000002, 0x0000700f, "mhfl!\t\t%8-11R, %4-7r"},
    330   1.6  christos   {0x00000001, 0x0000700f, "mlfh!\t\t%8-11r, %4-7R"},
    331   1.1  christos   {0x00001006, 0x0000700f, "msb.f!\t\t%8-11r, %4-7r"},
    332   1.1  christos   {0x0000100f, 0x0000700f, "msbh.fs!\t\t%8-11r, %4-7r"},
    333   1.6  christos   {0x0000100e, 0x0000700f, "msbl.fs!\t\t%8-11r, %4-7r"},
    334   1.1  christos   {0x00001007, 0x0000700f, "msbu!\t\t%8-11r, %4-7r"},
    335   1.1  christos   {0x0000100d, 0x0000700f, "mszh.f!\t\t%8-11r, %4-7r"},
    336   1.1  christos   {0x0000100c, 0x0000700f, "mszl.f!\t\t%8-11r, %4-7r"},
    337   1.1  christos   {0x0000044a, 0x3e007fff, "mtcel\t\t%20-24r"},
    338   1.1  christos   {0x00001000, 0x00007f0f, "mtcel!\t\t%4-7r"},
    339   1.1  christos   {0x0000084a, 0x3e007fff, "mtceh\t\t%20-24r"},
    340   1.1  christos   {0x00001100, 0x00007f0f, "mtceh!\t\t%4-7r"},
    341   1.1  christos   {0x00000c4a, 0x3e007fff, "mtcehl\t\t%20-24r, %15-19r"},
    342   1.1  christos   {0x0000004a, 0x3e0003ff, "mtce\t\t%20-24r, er%10-14d"},
    343   1.1  christos   {0x00000052, 0x3e0003ff, "mtsr\t\t%15-19r, sr%10-14d"},
    344   1.1  christos   {0x0c000000, 0x3e00001f, "mtcr\t\t%20-24r, c%15-19r"},
    345   1.1  christos   {0x0c000008, 0x3e00001f, "mtc1\t\t%20-24r, c%15-19r"},
    346   1.1  christos   {0x0c000010, 0x3e00001f, "mtc2\t\t%20-24r, c%15-19r"},
    347   1.1  christos   {0x0c000018, 0x3e00001f, "mtc3\t\t%20-24r, c%15-19r"},
    348   1.1  christos   {0x0c00000e, 0x3e00001f, "mtcc1\t\t%20-24r, c%15-19r"},
    349   1.1  christos   {0x0c000016, 0x3e00001f, "mtcc2\t\t%20-24r, c%15-19r"},
    350   1.1  christos   {0x0c00001e, 0x3e00001f, "mtcc3\t\t%20-24r, c%15-19r"},
    351   1.1  christos   {0x00000040, 0x3e0003ff, "mul\t\t%15-19r, %10-14r"},
    352   1.1  christos   {0x00000040, 0x3e0003ff, "maz\t\t%15-19r, %10-14r"},
    353   1.1  christos   {0x00000041, 0x3e0003ff, "mul.f\t\t%15-19r, %10-14r"},
    354   1.6  christos   {0x00000041, 0x3e0003ff, "maz.f\t\t%15-19r, %10-14r"},
    355   1.1  christos   {0x00001002, 0x0000700f, "mul.f!\t\t%8-11r, %4-7r"},
    356   1.1  christos   {0x00000042, 0x3e0003ff, "mulu\t\t%15-19r, %10-14r"},
    357   1.1  christos   {0x00000042, 0x3e0003ff, "mazu\t\t%15-19r, %10-14r"},
    358   1.6  christos   {0x00001003, 0x0000700f, "mulu!\t\t%8-11r, %4-7r"},
    359   1.1  christos   {0x00000056, 0x3e007fff, "mvcs\t\t%20-24r, %15-19r"},
    360   1.1  christos   {0x00000456, 0x3e007fff, "mvcc\t\t%20-24r, %15-19r"},
    361   1.1  christos   {0x00000856, 0x3e007fff, "mvgtu\t\t%20-24r, %15-19r"},
    362   1.1  christos   {0x00000c56, 0x3e007fff, "mvleu\t\t%20-24r, %15-19r"},
    363   1.1  christos   {0x00001056, 0x3e007fff, "mveq\t\t%20-24r, %15-19r"},
    364   1.1  christos   {0x00001456, 0x3e007fff, "mvne\t\t%20-24r, %15-19r"},
    365   1.1  christos   {0x00001856, 0x3e007fff, "mvgt\t\t%20-24r, %15-19r"},
    366   1.1  christos   {0x00001c56, 0x3e007fff, "mvle\t\t%20-24r, %15-19r"},
    367   1.1  christos   {0x00002056, 0x3e007fff, "mvge\t\t%20-24r, %15-19r"},
    368   1.1  christos   {0x00002456, 0x3e007fff, "mvlt\t\t%20-24r, %15-19r"},
    369   1.1  christos   {0x00002856, 0x3e007fff, "mvmi\t\t%20-24r, %15-19r"},
    370   1.1  christos   {0x00002c56, 0x3e007fff, "mvpl\t\t%20-24r, %15-19r"},
    371   1.1  christos   {0x00003056, 0x3e007fff, "mvvs\t\t%20-24r, %15-19r"},
    372   1.1  christos   {0x00003456, 0x3e007fff, "mvvc\t\t%20-24r, %15-19r"},
    373   1.1  christos   {0x00003c56, 0x3e007fff, "mv\t\t%20-24r, %15-19r"},
    374   1.1  christos   {0x00000003, 0x0000700f, "mv!\t\t%8-11r, %4-7r"},
    375   1.1  christos   {0x0000001e, 0x3e0003ff, "neg\t\t%20-24r, %10-14r"},
    376   1.1  christos   {0x0000001f, 0x3e0003ff, "neg.c\t\t%20-24r, %10-14r"},
    377   1.1  christos   {0x00002002, 0x0000700f, "neg!\t\t%8-11r, %4-7r"},
    378   1.1  christos   {0x00000000, 0x3e0003ff, "nop"},
    379   1.1  christos   {0x00000024, 0x3e0003ff, "not\t\t%20-24r, %15-19r"},
    380   1.1  christos   {0x00000025, 0x3e0003ff, "not.c\t\t%20-24r, %15-19r"},
    381   1.1  christos   {0x00000000, 0x0000700f, "nop!"},
    382   1.1  christos   {0x00002006, 0x0000700f, "not!\t\t%8-11r, %4-7r"},
    383   1.1  christos   {0x00000022, 0x3e0003ff, "or\t\t%20-24r, %15-19r, %10-14r"},
    384   1.1  christos   {0x00000023, 0x3e0003ff, "or.c\t\t%20-24r, %15-19r, %10-14r"},
    385   1.6  christos   {0x020a0000, 0x3e0e0001, "ori\t\t%20-24r, 0x%1-16x"},
    386   1.6  christos   {0x020a0001, 0x3e0e0001, "ori.c\t\t%20-24r, 0x%1-16x"},
    387   1.1  christos   {0x0a0a0000, 0x3e0e0001, "oris\t\t%20-24r, 0x%1-16x"},
    388   1.1  christos   {0x0a0a0001, 0x3e0e0001, "oris.c\t\t%20-24r, 0x%1-16x"},
    389   1.1  christos   {0x1a000000, 0x3e000001, "orri\t\t%20-24r, %15-19r, 0x%1-14x"},
    390   1.1  christos   {0x1a000001, 0x3e000001, "orri.c\t\t%20-24r, %15-19r, 0x%1-14x"},
    391   1.1  christos   {0x00002005, 0x0000700f, "or!\t\t%8-11r, %4-7r"},
    392   1.1  christos   {0x0000000a, 0x3e0003ff, "pflush"},
    393   1.1  christos   {0x0000208a, 0x0000708f, "pop!\t\t%8-11R, [%4-6r]"},
    394   1.1  christos   {0x0000200a, 0x0000700f, "pop!\t\t%8-11r, [%4-7r]"},
    395   1.1  christos   {0x0000208e, 0x0000708f, "push!\t\t%8-11R, [%4-6r]"},
    396   1.1  christos   {0x0000200e, 0x0000700f, "push!\t\t%8-11r, [%4-7r]"},
    397   1.1  christos   {0x00000038, 0x3e0003ff, "ror\t\t%20-24r, %15-19r, %10-14r"},
    398   1.1  christos   {0x00000039, 0x3e0003ff, "ror.c\t\t%20-24r, %15-19r, %10-14r"},
    399   1.1  christos   {0x0000003b, 0x3e0003ff, "rorc.c\t\t%20-24r, %15-19r, %10-14r"},
    400   1.1  christos   {0x0000003c, 0x3e0003ff, "rol\t\t%20-24r, %15-19r, %10-14r"},
    401   1.1  christos   {0x0000003d, 0x3e0003ff, "rol.c\t\t%20-24r, %15-19r, %10-14r"},
    402   1.1  christos   {0x0000003f, 0x3e0003ff, "rolc.c\t\t%20-24r, %15-19r, %10-14r"},
    403   1.1  christos   {0x00000078, 0x3e0003ff, "rori\t\t%20-24r, %15-19r, %10-14d"},
    404   1.1  christos   {0x00000079, 0x3e0003ff, "rori.c\t\t%20-24r, %15-19r, %10-14d"},
    405   1.1  christos   {0x0000007b, 0x3e0003ff, "roric.c\t\t%20-24r, %15-19r, %10-14d"},
    406   1.1  christos   {0x0000007c, 0x3e0003ff, "roli\t\t%20-24r, %15-19r, %10-14d"},
    407   1.1  christos   {0x0000007d, 0x3e0003ff, "roli.c\t\t%20-24r, %15-19r, %10-14d"},
    408   1.1  christos   {0x0000007f, 0x3e0003ff, "rolic.c\t\t%20-24r, %15-19r, %10-14d"},
    409   1.1  christos   {0x0c000084, 0x3e0003ff, "rte"},
    410   1.1  christos   {0x2e000000, 0x3e000000, "sb\t\t%20-24r, [%15-19r, %0-14i]"},
    411   1.1  christos   {0x06000007, 0x3e000007, "sb\t\t%20-24r, [%15-19r, %3-14i]+"},
    412   1.1  christos   {0x0e000007, 0x3e000007, "sb\t\t%20-24r, [%15-19r]+, %3-14i"},
    413   1.1  christos   {0x0000200f, 0x0000700f, "sb!\t\t%8-11r, [%4-7r]"},
    414   1.1  christos   {0x00007007, 0x00007007, "sbp!\t\t%8-11r, %3-7d"},
    415   1.1  christos   {0x0000000e, 0x3e0003ff, "asw\t\t%20-24r, [%15-19r]"},
    416   1.1  christos   {0x00000068, 0x3e0003ff, "scb\t\t%20-24r, [%15-19r]+"},
    417   1.1  christos   {0x0000006a, 0x3e0003ff, "scw\t\t%20-24r, [%15-19r]+"},
    418   1.1  christos   {0x0000006e, 0x3e0003ff, "sce\t\t[%15-19r]+"},
    419   1.1  christos   {0x00000006, 0x3e0003ff, "sdbbp\t\t%15-19d"},
    420   1.1  christos   {0x00006002, 0x00007007, "sdbbp!\t\t%3-7d"},
    421   1.1  christos   {0x2a000000, 0x3e000000, "sh\t\t%20-24r, [%15-19r, %0-14i]"},
    422   1.1  christos   {0x06000005, 0x3e000007, "sh\t\t%20-24r, [%15-19r, %3-14i]+"},
    423   1.1  christos   {0x0e000005, 0x3e000007, "sh\t\t%20-24r, [%15-19r]+, %3-14i"},
    424   1.1  christos   {0x0000200d, 0x0000700f, "sh!\t\t%8-11r, [%4-7r]"},
    425   1.1  christos   {0x00007005, 0x00007007, "shp!\t\t%8-11r, %3-7d1"},
    426   1.1  christos   {0x0c0000c4, 0x3e0003ff, "sleep"},
    427   1.1  christos   {0x00000030, 0x3e0003ff, "sll\t\t%20-24r, %15-19r, %10-14r"},
    428   1.1  christos   {0x00000031, 0x3e0003ff, "sll.c\t\t%20-24r, %15-19r, %10-14r"},
    429   1.1  christos   {0x00000070, 0x3e0003ff, "slli\t\t%20-24r, %15-19r, %10-14d"},
    430   1.1  christos   {0x00000071, 0x3e0003ff, "slli.c\t\t%20-24r, %15-19r, %10-14d"},
    431   1.1  christos   {0x00000008, 0x0000700f, "sll!\t\t%8-11r, %4-7r"},
    432   1.1  christos   {0x00006001, 0x00007007, "slli!\t\t%8-11r, %3-7d"},
    433   1.1  christos   {0x00000034, 0x3e0003ff, "srl\t\t%20-24r, %15-19r, %10-14r"},
    434   1.1  christos   {0x00000035, 0x3e0003ff, "srl.c\t\t%20-24r, %15-19r, %10-14r"},
    435   1.1  christos   {0x00000036, 0x3e0003ff, "sra\t\t%20-24r, %15-19r, %10-14r"},
    436   1.1  christos   {0x00000037, 0x3e0003ff, "sra.c\t\t%20-24r, %15-19r, %10-14r"},
    437   1.1  christos   {0x00000074, 0x3e0003ff, "srli\t\t%20-24r, %15-19r, %10-14d"},
    438   1.1  christos   {0x00000075, 0x3e0003ff, "srli.c\t\t%20-24r, %15-19r, %10-14d"},
    439   1.1  christos   {0x00000076, 0x3e0003ff, "srai\t\t%20-24r, %15-19r, %10-14d"},
    440   1.1  christos   {0x00000077, 0x3e0003ff, "srai.c\t\t%20-24r, %15-19r, %10-14d"},
    441   1.1  christos   {0x0000000a, 0x0000700f, "srl!\t\t%8-11r, %4-7r"},
    442   1.1  christos   {0x00006003, 0x00007007, "srli!\t\t%8-11r, %3-7d"},
    443   1.1  christos   {0x0000000b, 0x0000700f, "sra!\t\t%8-11r, %4-7r"},
    444   1.1  christos   {0x0c00000b, 0x3e00001f, "stc1\t\tc%15-19r, [%20-24r, %5-14i]"},
    445   1.1  christos   {0x0c000013, 0x3e00001f, "stc2\t\tc%15-19r, [%20-24r, %5-14i]"},
    446   1.1  christos   {0x0c00001b, 0x3e00001f, "stc3\t\tc%15-19r, [%20-24r, %5-14i]"},
    447   1.1  christos   {0x00000014, 0x3e0003ff, "sub\t\t%20-24r, %15-19r, %10-14r"},
    448   1.1  christos   {0x00000015, 0x3e0003ff, "sub.c\t\t%20-24r, %15-19r, %10-14r"},
    449   1.1  christos   {0x00000016, 0x3e0003ff, "subc\t\t%20-24r, %15-19r, %10-14r"},
    450   1.1  christos   {0x00000017, 0x3e0003ff, "subc.c\t\t%20-24r, %15-19r, %10-14r"},
    451   1.1  christos   {0x00002001, 0x0000700f, "sub!\t\t%8-11r, %4-7r"},
    452   1.1  christos   {0x00006080, 0x00007087, "subei!\t\t%8-11r, %3-6d"},
    453   1.1  christos   {0x28000000, 0x3e000000, "sw\t\t%20-24r, [%15-19r, %0-14i]"},
    454   1.1  christos   {0x06000004, 0x3e000007, "sw\t\t%20-24r, [%15-19r, %3-14i]+"},
    455   1.1  christos   {0x0e000004, 0x3e000007, "sw\t\t%20-24r, [%15-19r]+, %3-14i"},
    456   1.1  christos   {0x0000200c, 0x0000700f, "sw!\t\t%8-11r, [%4-7r]"},
    457   1.1  christos   {0x00007004, 0x00007007, "swp!\t\t%8-11r, %3-7d2"},
    458   1.1  christos   {0x00000002, 0x3e0003ff, "syscall\t\t%10-24d"},
    459   1.1  christos   {0x00000054, 0x3e007fff, "tcs"},
    460   1.1  christos   {0x00000454, 0x3e007fff, "tcc"},
    461   1.1  christos   {0x00003854, 0x3e007fff, "tcnz"},
    462   1.1  christos   {0x00000005, 0x00007f0f, "tcs!"},
    463   1.1  christos   {0x00000105, 0x00007f0f, "tcc!"},
    464   1.1  christos   {0x00000e05, 0x00007f0f, "tcnz!"},
    465   1.1  christos   {0x00001054, 0x3e007fff, "teq"},
    466   1.1  christos   {0x00000405, 0x00007f0f, "teq!"},
    467   1.1  christos   {0x00000854, 0x3e007fff, "tgtu"},
    468   1.1  christos   {0x00001854, 0x3e007fff, "tgt"},
    469   1.1  christos   {0x00002054, 0x3e007fff, "tge"},
    470   1.1  christos   {0x00000205, 0x00007f0f, "tgtu!"},
    471   1.1  christos   {0x00000605, 0x00007f0f, "tgt!"},
    472   1.1  christos   {0x00000805, 0x00007f0f, "tge!"},
    473   1.1  christos   {0x00000c54, 0x3e007fff, "tleu"},
    474   1.1  christos   {0x00001c54, 0x3e007fff, "tle"},
    475   1.1  christos   {0x00002454, 0x3e007fff, "tlt"},
    476   1.1  christos   {0x0c000004, 0x3e0003ff, "stlb"},
    477   1.1  christos   {0x0c000024, 0x3e0003ff, "mftlb"},
    478   1.1  christos   {0x0c000044, 0x3e0003ff, "mtptlb"},
    479   1.1  christos   {0x0c000064, 0x3e0003ff, "mtrtlb"},
    480   1.1  christos   {0x00000305, 0x00007f0f, "tleu!"},
    481   1.1  christos   {0x00000705, 0x00007f0f, "tle!"},
    482   1.1  christos   {0x00000905, 0x00007f0f, "tlt!"},
    483   1.1  christos   {0x00002854, 0x3e007fff, "tmi"},
    484   1.1  christos   {0x00000a05, 0x00007f0f, "tmi!"},
    485   1.1  christos   {0x00001454, 0x3e007fff, "tne"},
    486   1.1  christos   {0x00000505, 0x00007f0f, "tne!"},
    487   1.1  christos   {0x00002c54, 0x3e007fff, "tpl"},
    488   1.1  christos   {0x00000b05, 0x00007f0f, "tpl!"},
    489   1.1  christos   {0x00000004, 0x3e007fff, "trapcs\t\t%15-19d"},
    490   1.1  christos   {0x00000404, 0x3e007fff, "trapcc\t\t%15-19d"},
    491   1.1  christos   {0x00000804, 0x3e007fff, "trapgtu\t\t%15-19d"},
    492   1.1  christos   {0x00000c04, 0x3e007fff, "trapleu\t\t%15-19d"},
    493   1.1  christos   {0x00001004, 0x3e007fff, "trapeq\t\t%15-19d"},
    494   1.1  christos   {0x00001404, 0x3e007fff, "trapne\t\t%15-19d"},
    495   1.1  christos   {0x00001804, 0x3e007fff, "trapgt\t\t%15-19d"},
    496   1.1  christos   {0x00001c04, 0x3e007fff, "traple\t\t%15-19d"},
    497   1.1  christos   {0x00002004, 0x3e007fff, "trapge\t\t%15-19d"},
    498   1.1  christos   {0x00002404, 0x3e007fff, "traplt\t\t%15-19d"},
    499   1.1  christos   {0x00002804, 0x3e007fff, "trapmi\t\t%15-19d"},
    500   1.1  christos   {0x00002c04, 0x3e007fff, "trappl\t\t%15-19d"},
    501   1.1  christos   {0x00003004, 0x3e007fff, "trapvs\t\t%15-19d"},
    502   1.1  christos   {0x00003404, 0x3e007fff, "trapvc\t\t%15-19d"},
    503   1.1  christos   {0x00003c04, 0x3e007fff, "trap\t\t%15-19d"},
    504   1.1  christos   {0x00003c54, 0x3e007fff, "tset"},
    505   1.1  christos   {0x00000f05, 0x00007f0f, "tset!"},
    506   1.1  christos   {0x00003054, 0x3e007fff, "tvs"},
    507   1.1  christos   {0x00003454, 0x3e007fff, "tvc"},
    508   1.1  christos   {0x00000c05, 0x00007f0f, "tvs!"},
    509   1.1  christos   {0x00000d05, 0x00007f0f, "tvc!"},
    510   1.1  christos   {0x00000026, 0x3e0003ff, "xor\t\t%20-24r, %15-19r, %10-14r"},
    511   1.1  christos   {0x00000027, 0x3e0003ff, "xor.c\t\t%20-24r, %15-19r, %10-14r"},
    512   1.8  christos   {0x00002007, 0x0000700f, "xor!\t\t%8-11r, %4-7r"},
    513   1.8  christos   { 0, 0, NULL }
    514   1.1  christos };
    515   1.1  christos 
    516   1.1  christos typedef struct
    517   1.1  christos {
    518   1.1  christos   const char *name;
    519   1.1  christos   const char *description;
    520   1.1  christos   const char *reg_names[32];
    521   1.1  christos } score_regname;
    522   1.1  christos 
    523   1.1  christos static score_regname regnames[] =
    524   1.1  christos {
    525   1.1  christos   {"gcc", "Select register names used by GCC",
    526   1.1  christos   {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
    527   1.1  christos    "r11", "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20",
    528   1.1  christos    "r21", "r22", "r23", "r24", "r25", "r26", "r27", "gp", "r29", "r30", "r31"}},
    529   1.1  christos };
    530   1.1  christos 
    531   1.1  christos static unsigned int regname_selected = 0;
    532   1.1  christos 
    533   1.1  christos #define NUM_SCORE_REGNAMES  NUM_ELEM (regnames)
    534   1.1  christos #define score_regnames      regnames[regname_selected].reg_names
    535   1.1  christos 
    536   1.1  christos /* s3_s7: opcodes and export prototypes.  */
    537   1.6  christos int
    538  1.10  christos s7_print_insn (bfd_vma pc, struct disassemble_info *info, bool little);
    539   1.1  christos 
    540   1.1  christos /* Print one instruction from PC on INFO->STREAM.
    541   1.1  christos    Return the size of the instruction.  */
    542   1.1  christos static int
    543   1.1  christos print_insn_score32 (bfd_vma pc, struct disassemble_info *info, long given)
    544   1.1  christos {
    545   1.1  christos   struct score_opcode *insn;
    546   1.1  christos   void *stream = info->stream;
    547   1.1  christos   fprintf_ftype func = info->fprintf_func;
    548   1.1  christos 
    549   1.1  christos   for (insn = score_opcodes; insn->assembler; insn++)
    550   1.1  christos     {
    551   1.1  christos       if ((insn->mask & 0xffff0000) && (given & insn->mask) == insn->value)
    552   1.9  christos 	{
    553   1.9  christos 	  char *c;
    554   1.1  christos 
    555   1.9  christos 	  for (c = insn->assembler; *c; c++)
    556   1.9  christos 	    {
    557   1.9  christos 	      if (*c == '%')
    558   1.9  christos 		{
    559   1.9  christos 		  switch (*++c)
    560   1.9  christos 		    {
    561   1.9  christos 		    case 'j':
    562   1.9  christos 		      {
    563   1.9  christos 			int target;
    564   1.9  christos 
    565   1.9  christos 			if (info->flags & INSN_HAS_RELOC)
    566   1.9  christos 			  pc = 0;
    567   1.9  christos 			target = (pc & 0xfe000000) | (given & 0x01fffffe);
    568   1.9  christos 			(*info->print_address_func) (target, info);
    569   1.9  christos 		      }
    570   1.9  christos 		      break;
    571   1.9  christos 		    case 'b':
    572   1.9  christos 		      {
    573   1.9  christos 			/* Sign-extend a 20-bit number.  */
    574   1.9  christos #define SEXT20(x) ((((x) & 0xfffff) ^ (~ 0x7ffff)) + 0x80000)
    575   1.9  christos 			int disp = (given & 0x01ff8000) >> 5 | (given & 0x3fe);
    576   1.9  christos 			int target = (pc + SEXT20 (disp));
    577   1.9  christos 
    578   1.9  christos 			(*info->print_address_func) (target, info);
    579   1.9  christos 		      }
    580   1.9  christos 		      break;
    581   1.9  christos 		    case '0':
    582   1.9  christos 		    case '1':
    583   1.9  christos 		    case '2':
    584   1.9  christos 		    case '3':
    585   1.9  christos 		    case '4':
    586   1.9  christos 		    case '5':
    587   1.9  christos 		    case '6':
    588   1.9  christos 		    case '7':
    589   1.9  christos 		    case '8':
    590   1.9  christos 		    case '9':
    591   1.9  christos 		      {
    592   1.9  christos 			int bitstart = *c++ - '0';
    593   1.9  christos 			int bitend = 0;
    594   1.9  christos 
    595   1.9  christos 			while (*c >= '0' && *c <= '9')
    596   1.9  christos 			  bitstart = (bitstart * 10) + *c++ - '0';
    597   1.9  christos 
    598   1.9  christos 			switch (*c)
    599   1.9  christos 			  {
    600   1.9  christos 			  case '-':
    601   1.9  christos 			    c++;
    602   1.9  christos 			    while (*c >= '0' && *c <= '9')
    603   1.9  christos 			      bitend = (bitend * 10) + *c++ - '0';
    604   1.9  christos 
    605   1.9  christos 			    if (!bitend)
    606   1.9  christos 			      abort ();
    607   1.9  christos 
    608   1.9  christos 			    switch (*c)
    609   1.9  christos 			      {
    610   1.9  christos 			      case 'r':
    611   1.9  christos 				{
    612   1.9  christos 				  unsigned long reg;
    613   1.9  christos 
    614   1.9  christos 				  reg = given >> bitstart;
    615   1.9  christos 				  reg &= (2u << (bitend - bitstart)) - 1;
    616   1.9  christos 
    617   1.9  christos 				  func (stream, "%s", score_regnames[reg]);
    618   1.9  christos 				}
    619   1.9  christos 				break;
    620   1.9  christos 			      case 'd':
    621   1.9  christos 				{
    622   1.9  christos 				  unsigned long reg;
    623   1.9  christos 
    624   1.9  christos 				  reg = given >> bitstart;
    625   1.9  christos 				  reg &= (2u << (bitend - bitstart)) - 1;
    626   1.9  christos 
    627   1.9  christos 				  func (stream, "%ld", reg);
    628   1.9  christos 				}
    629   1.9  christos 				break;
    630   1.9  christos 			      case 'i':
    631   1.9  christos 				{
    632   1.9  christos 				  long reg;
    633   1.9  christos 
    634   1.9  christos 				  reg = given >> bitstart;
    635   1.9  christos 				  reg &= (2u << (bitend - bitstart)) - 1;
    636   1.9  christos 				  reg = ((reg ^ (1 << (bitend - bitstart)))
    637   1.9  christos 					 - (1 << (bitend - bitstart)));
    638   1.9  christos 
    639   1.9  christos 				  if (((given & insn->mask) == 0x0c00000a)      /* ldc1  */
    640   1.9  christos 				      || ((given & insn->mask) == 0x0c000012)   /* ldc2  */
    641   1.9  christos 				      || ((given & insn->mask) == 0x0c00001c)   /* ldc3  */
    642   1.9  christos 				      || ((given & insn->mask) == 0x0c00000b)   /* stc1  */
    643   1.9  christos 				      || ((given & insn->mask) == 0x0c000013)   /* stc2  */
    644   1.9  christos 				      || ((given & insn->mask) == 0x0c00001b))  /* stc3  */
    645   1.9  christos 				    reg *= 4;
    646   1.9  christos 
    647   1.9  christos 				  func (stream, "%ld", reg);
    648   1.9  christos 				}
    649   1.9  christos 				break;
    650   1.9  christos 			      case 'x':
    651   1.9  christos 				{
    652   1.9  christos 				  unsigned long reg;
    653   1.9  christos 
    654   1.9  christos 				  reg = given >> bitstart;
    655   1.9  christos 				  reg &= (2u << (bitend - bitstart)) - 1;
    656   1.9  christos 
    657   1.9  christos 				  func (stream, "%lx", reg);
    658   1.9  christos 				}
    659   1.9  christos 				break;
    660   1.9  christos 			      default:
    661   1.9  christos 				abort ();
    662   1.9  christos 			      }
    663   1.9  christos 			    break;
    664   1.9  christos 			  case '`':
    665   1.9  christos 			    c++;
    666   1.9  christos 			    if ((given & (1u << bitstart)) == 0)
    667   1.9  christos 			      func (stream, "%c", *c);
    668   1.9  christos 			    break;
    669   1.9  christos 			  case '\'':
    670   1.9  christos 			    c++;
    671   1.9  christos 			    if ((given & (1u << bitstart)) != 0)
    672   1.9  christos 			      func (stream, "%c", *c);
    673   1.9  christos 			    break;
    674   1.9  christos 			  default:
    675   1.9  christos 			    abort ();
    676   1.9  christos 			  }
    677   1.9  christos 			break;
    678   1.9  christos 		      }
    679   1.9  christos 		    default:
    680   1.1  christos 		      abort ();
    681   1.9  christos 		    }
    682   1.9  christos 		}
    683   1.9  christos 	      else
    684   1.9  christos 		func (stream, "%c", *c);
    685   1.9  christos 	    }
    686   1.9  christos 	  return 4;
    687   1.9  christos 	}
    688   1.1  christos     }
    689   1.1  christos 
    690   1.1  christos #if (SCORE_SIMULATOR_ACTIVE)
    691   1.1  christos   func (stream, _("<illegal instruction>"));
    692   1.1  christos   return 4;
    693   1.1  christos #endif
    694   1.1  christos 
    695   1.1  christos   abort ();
    696   1.1  christos }
    697   1.1  christos 
    698   1.1  christos static void
    699   1.1  christos print_insn_parallel_sym (struct disassemble_info *info)
    700   1.1  christos {
    701   1.1  christos   void *stream = info->stream;
    702   1.1  christos   fprintf_ftype func = info->fprintf_func;
    703   1.1  christos 
    704   1.1  christos   /* 10:       0000            nop!
    705   1.1  christos      4 space + 1 colon + 1 space + 1 tab + 8 opcode + 2 space + 1 tab.
    706   1.1  christos      FIXME: the space number is not accurate.  */
    707   1.1  christos   func (stream, "%s", " ||\n      \t          \t");
    708   1.1  christos }
    709   1.1  christos 
    710   1.1  christos /* Print one instruction from PC on INFO->STREAM.
    711   1.1  christos    Return the size of the instruction.  */
    712   1.1  christos static int
    713   1.1  christos print_insn_score16 (bfd_vma pc, struct disassemble_info *info, long given)
    714   1.1  christos {
    715   1.1  christos   struct score_opcode *insn;
    716   1.1  christos   void *stream = info->stream;
    717   1.1  christos   fprintf_ftype func = info->fprintf_func;
    718   1.1  christos 
    719   1.1  christos   given &= 0xffff;
    720   1.1  christos   for (insn = score_opcodes; insn->assembler; insn++)
    721   1.1  christos     {
    722   1.1  christos       if (!(insn->mask & 0xffff0000) && (given & insn->mask) == insn->value)
    723   1.9  christos 	{
    724   1.9  christos 	  char *c = insn->assembler;
    725   1.1  christos 
    726   1.9  christos 	  info->bytes_per_chunk = 2;
    727   1.9  christos 	  info->bytes_per_line = 4;
    728   1.9  christos 	  given &= 0xffff;
    729   1.9  christos 
    730   1.9  christos 	  for (; *c; c++)
    731   1.9  christos 	    {
    732   1.9  christos 	      if (*c == '%')
    733   1.9  christos 		{
    734   1.9  christos 		  switch (*++c)
    735   1.9  christos 		    {
    736   1.9  christos 
    737   1.9  christos 		    case 'j':
    738   1.9  christos 		      {
    739   1.9  christos 			int target;
    740   1.9  christos 
    741   1.9  christos 			if (info->flags & INSN_HAS_RELOC)
    742   1.9  christos 			  pc = 0;
    743   1.9  christos 
    744   1.9  christos 			target = (pc & 0xfffff000) | (given & 0x00000ffe);
    745   1.9  christos 			(*info->print_address_func) (target, info);
    746   1.9  christos 		      }
    747   1.9  christos 		      break;
    748   1.9  christos 		    case 'b':
    749   1.9  christos 		      {
    750   1.9  christos 			/* Sign-extend a 9-bit number.  */
    751   1.9  christos #define SEXT9(x) ((((x) & 0x1ff) ^ (~ 0xff)) + 0x100)
    752   1.9  christos 			int disp = (given & 0xff) << 1;
    753   1.9  christos 			int target = (pc + SEXT9 (disp));
    754   1.9  christos 
    755   1.9  christos 			(*info->print_address_func) (target, info);
    756   1.9  christos 		      }
    757   1.9  christos 		      break;
    758   1.9  christos 
    759   1.9  christos 		    case '0':
    760   1.9  christos 		    case '1':
    761   1.9  christos 		    case '2':
    762   1.9  christos 		    case '3':
    763   1.9  christos 		    case '4':
    764   1.9  christos 		    case '5':
    765   1.9  christos 		    case '6':
    766   1.9  christos 		    case '7':
    767   1.9  christos 		    case '8':
    768   1.9  christos 		    case '9':
    769   1.9  christos 		      {
    770   1.9  christos 			int bitstart = *c++ - '0';
    771   1.9  christos 			int bitend = 0;
    772   1.9  christos 
    773   1.9  christos 			while (*c >= '0' && *c <= '9')
    774   1.9  christos 			  bitstart = (bitstart * 10) + *c++ - '0';
    775   1.9  christos 
    776   1.9  christos 			switch (*c)
    777   1.9  christos 			  {
    778   1.9  christos 			  case '-':
    779   1.9  christos 			    {
    780   1.9  christos 			      long reg;
    781   1.9  christos 
    782   1.9  christos 			      c++;
    783   1.9  christos 			      while (*c >= '0' && *c <= '9')
    784   1.9  christos 				bitend = (bitend * 10) + *c++ - '0';
    785   1.9  christos 			      if (!bitend)
    786   1.9  christos 				abort ();
    787   1.9  christos 			      reg = given >> bitstart;
    788   1.9  christos 			      reg &= (2u << (bitend - bitstart)) - 1;
    789   1.9  christos 			      switch (*c)
    790   1.9  christos 				{
    791   1.9  christos 				case 'R':
    792   1.9  christos 				  func (stream, "%s", score_regnames[reg + 16]);
    793   1.9  christos 				  break;
    794   1.9  christos 				case 'r':
    795   1.9  christos 				  func (stream, "%s", score_regnames[reg]);
    796   1.9  christos 				  break;
    797   1.9  christos 				case 'd':
    798   1.9  christos 				  if (*(c + 1) == '\0')
    799   1.9  christos 				    func (stream, "%ld", reg);
    800   1.9  christos 				  else
    801   1.9  christos 				    {
    802   1.9  christos 				      c++;
    803   1.9  christos 				      if (*c == '1')
    804   1.9  christos 					func (stream, "%ld", reg << 1);
    805   1.9  christos 				      else if (*c == '2')
    806   1.9  christos 					func (stream, "%ld", reg << 2);
    807   1.9  christos 				    }
    808   1.9  christos 				  break;
    809   1.9  christos 
    810   1.9  christos 				case 'x':
    811   1.9  christos 				  if (*(c + 1) == '\0')
    812   1.9  christos 				    func (stream, "%lx", reg);
    813   1.9  christos 				  else
    814   1.9  christos 				    {
    815   1.9  christos 				      c++;
    816   1.9  christos 				      if (*c == '1')
    817   1.9  christos 					func (stream, "%lx", reg << 1);
    818   1.9  christos 				      else if (*c == '2')
    819   1.9  christos 					func (stream, "%lx", reg << 2);
    820   1.9  christos 				    }
    821   1.9  christos 				  break;
    822   1.9  christos 				case 'i':
    823   1.9  christos 				  reg = ((reg ^ (1 << bitend)) - (1 << bitend));
    824   1.9  christos 				  func (stream, "%ld", reg);
    825   1.9  christos 				  break;
    826   1.9  christos 				default:
    827   1.9  christos 				  abort ();
    828   1.9  christos 				}
    829   1.9  christos 			    }
    830   1.9  christos 			    break;
    831   1.9  christos 
    832   1.9  christos 			  case '\'':
    833   1.9  christos 			    c++;
    834   1.9  christos 			    if ((given & (1u << bitstart)) != 0)
    835   1.9  christos 			      func (stream, "%c", *c);
    836   1.9  christos 			    break;
    837   1.9  christos 			  default:
    838   1.9  christos 			    abort ();
    839   1.9  christos 			  }
    840   1.9  christos 		      }
    841   1.9  christos 		      break;
    842   1.9  christos 		    default:
    843   1.9  christos 		      abort ();
    844   1.9  christos 		    }
    845   1.9  christos 		}
    846   1.9  christos 	      else
    847   1.9  christos 		func (stream, "%c", *c);
    848   1.9  christos 	    }
    849   1.1  christos 
    850   1.9  christos 	  return 2;
    851   1.9  christos 	}
    852   1.1  christos     }
    853   1.1  christos #if (SCORE_SIMULATOR_ACTIVE)
    854   1.1  christos   func (stream, _("<illegal instruction>"));
    855   1.1  christos   return 2;
    856   1.1  christos #endif
    857   1.1  christos   /* No match.  */
    858   1.1  christos   abort ();
    859   1.1  christos }
    860   1.1  christos 
    861   1.1  christos /* s3_s7: exported functions.  */
    862   1.1  christos 
    863   1.1  christos /* NOTE: There are no checks in these routines that
    864   1.1  christos    the relevant number of data bytes exist.  */
    865   1.1  christos int
    866  1.10  christos s7_print_insn (bfd_vma pc, struct disassemble_info *info, bool little)
    867   1.1  christos {
    868   1.1  christos   unsigned char b[4];
    869   1.9  christos   unsigned long given;
    870   1.1  christos   long ridparity;
    871   1.1  christos   int status;
    872  1.10  christos   bool insn_pce_p = false;
    873  1.10  christos   bool insn_16_p = false;
    874   1.1  christos 
    875   1.1  christos   info->display_endian = little ? BFD_ENDIAN_LITTLE : BFD_ENDIAN_BIG;
    876   1.1  christos 
    877   1.1  christos   if (pc & 0x2)
    878   1.1  christos     {
    879   1.1  christos       info->bytes_per_chunk = 2;
    880   1.1  christos       status = info->read_memory_func (pc, (bfd_byte *) b, 2, info);
    881   1.1  christos       b[3] = b[2] = 0;
    882  1.10  christos       insn_16_p = true;
    883   1.1  christos     }
    884   1.1  christos   else
    885   1.1  christos     {
    886   1.1  christos       info->bytes_per_chunk = 4;
    887   1.9  christos       status = info->read_memory_func (pc, (bfd_byte *) &b[0], 4, info);
    888   1.1  christos       if (status != 0)
    889   1.9  christos 	{
    890   1.9  christos 	  info->bytes_per_chunk = 2;
    891   1.9  christos 	  status = info->read_memory_func (pc, (bfd_byte *) b, 2, info);
    892   1.9  christos 	  b[3] = b[2] = 0;
    893  1.10  christos 	  insn_16_p = true;
    894   1.9  christos 	}
    895   1.1  christos     }
    896   1.1  christos 
    897   1.1  christos   if (status != 0)
    898   1.1  christos     {
    899   1.1  christos       info->memory_error_func (status, pc, info);
    900   1.1  christos       return -1;
    901   1.1  christos     }
    902   1.1  christos 
    903   1.1  christos   if (little)
    904   1.9  christos     given = b[0] | b[1] << 8 | b[2] << 16 | (unsigned) b[3] << 24;
    905   1.1  christos   else
    906   1.9  christos     given = (unsigned) b[0] << 24 | b[1] << 16 | b[2] << 8 | b[3];
    907   1.1  christos 
    908   1.1  christos   if ((given & 0x80008000) == 0x80008000)
    909   1.1  christos     {
    910  1.10  christos       insn_pce_p = false;
    911  1.10  christos       insn_16_p = false;
    912   1.1  christos     }
    913   1.1  christos   else if ((given & 0x8000) == 0x8000)
    914  1.10  christos     insn_pce_p = true;
    915   1.1  christos   else
    916  1.10  christos     insn_16_p = true;
    917   1.1  christos 
    918   1.1  christos   /* 16 bit instruction.  */
    919   1.1  christos   if (insn_16_p)
    920   1.1  christos     {
    921   1.1  christos       if (little)
    922   1.9  christos 	given = b[0] | (b[1] << 8);
    923   1.1  christos       else
    924   1.9  christos 	given = (b[0] << 8) | b[1];
    925   1.1  christos 
    926   1.1  christos       status = print_insn_score16 (pc, info, given);
    927   1.1  christos     }
    928   1.1  christos   /* pce instruction.  */
    929   1.1  christos   else if (insn_pce_p)
    930   1.1  christos     {
    931   1.1  christos       long other;
    932   1.1  christos 
    933   1.1  christos       other = given & 0xFFFF;
    934   1.1  christos       given = (given & 0xFFFF0000) >> 16;
    935   1.1  christos 
    936   1.1  christos       status = print_insn_score16 (pc, info, given);
    937   1.1  christos       print_insn_parallel_sym (info);
    938   1.1  christos       status += print_insn_score16 (pc, info, other);
    939   1.9  christos       /* disassemble_bytes() will output 4 byte per chunk for pce
    940   1.9  christos 	 instruction.  */
    941   1.1  christos       info->bytes_per_chunk = 4;
    942   1.1  christos     }
    943   1.1  christos   /* 32 bit instruction.  */
    944   1.1  christos   else
    945   1.1  christos     {
    946   1.1  christos       /* Get rid of parity.  */
    947   1.1  christos       ridparity = (given & 0x7FFF);
    948   1.1  christos       ridparity |= (given & 0x7FFF0000) >> 1;
    949   1.1  christos       given = ridparity;
    950   1.1  christos       status = print_insn_score32 (pc, info, given);
    951   1.1  christos     }
    952   1.1  christos 
    953   1.1  christos   return status;
    954   1.1  christos }
    955