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