1 /* $Id$ */ 2 3 #ifndef TABLES_H 4 #define TABLES_H 5 6 /* This is only included by common/bedbug.c, and depends on the following 7 * files to already be included 8 * common.h 9 * bedbug/bedbug.h 10 * bedbug/ppc.h 11 * bedbug/regs.h 12 */ 13 14 struct operand operands[] = { 15 /*Field Name Bits Shift Hint Position */ 16 /*----- ------ ----- ----- ---- ------------ */ 17 { O_AA, "O_AA", 1, 1, OH_SILENT }, /* 30 */ 18 { O_BD, "O_BD", 14, 2, OH_ADDR }, /* 16-29 */ 19 { O_BI, "O_BI", 5, 16, 0 }, /* 11-15 */ 20 { O_BO, "O_BO", 5, 21, 0 }, /* 6-10 */ 21 { O_crbD, "O_crbD", 5, 21, 0 }, /* 6-10 */ 22 { O_crbA, "O_crbA", 5, 16, 0 }, /* 11-15 */ 23 { O_crbB, "O_crbB", 5, 11, 0 }, /* 16-20 */ 24 { O_CRM, "O_CRM", 8, 12, 0 }, /* 12-19 */ 25 { O_d, "O_d", 15, 0, OH_OFFSET }, /* 16-31 */ 26 { O_frC, "O_frC", 5, 6, 0 }, /* 21-25 */ 27 { O_frD, "O_frD", 5, 21, 0 }, /* 6-10 */ 28 { O_frS, "O_frS", 5, 21, 0 }, /* 6-10 */ 29 { O_IMM, "O_IMM", 4, 12, 0 }, /* 16-19 */ 30 { O_LI, "O_LI", 24, 2, OH_ADDR }, /* 6-29 */ 31 { O_LK, "O_LK", 1, 0, OH_SILENT }, /* 31 */ 32 { O_MB, "O_MB", 5, 6, 0 }, /* 21-25 */ 33 { O_ME, "O_ME", 5, 1, 0 }, /* 26-30 */ 34 { O_NB, "O_NB", 5, 11, 0 }, /* 16-20 */ 35 { O_OE, "O_OE", 1, 10, OH_SILENT }, /* 21 */ 36 { O_rA, "O_rA", 5, 16, OH_REG }, /* 11-15 */ 37 { O_rB, "O_rB", 5, 11, OH_REG }, /* 16-20 */ 38 { O_Rc, "O_Rc", 1, 0, OH_SILENT }, /* 31 */ 39 { O_rD, "O_rD", 5, 21, OH_REG }, /* 6-10 */ 40 { O_rS, "O_rS", 5, 21, OH_REG }, /* 6-10 */ 41 { O_SH, "O_SH", 5, 11, 0 }, /* 16-20 */ 42 { O_SIMM, "O_SIMM", 16, 0, 0 }, /* 16-31 */ 43 { O_SR, "O_SR", 4, 16, 0 }, /* 12-15 */ 44 { O_TO, "O_TO", 5, 21, 0 }, /* 6-10 */ 45 { O_UIMM, "O_UIMM", 16, 0, 0 }, /* 16-31 */ 46 { O_crfD, "O_crfD", 3, 23, 0 }, /* 6- 8 */ 47 { O_crfS, "O_crfS", 3, 18, 0 }, /* 11-13 */ 48 { O_L, "O_L", 1, 21, 0 }, /* 10 */ 49 { O_spr, "O_spr", 10, 11, OH_SPR }, /* 11-20 */ 50 { O_tbr, "O_tbr", 10, 11, OH_TBR }, /* 11-20 */ 51 { O_cr2, "O_cr2", 0, 0, OH_LITERAL }, /* "cr2" */ 52 }; 53 54 const unsigned int n_operands = sizeof(operands) / sizeof(operands[0]); 55 56 /* A note about the fields array in the opcodes structure: 57 The operands are listed in the order they appear in the output. 58 59 This table is arranged in numeric order of the opcode. Note that some 60 opcodes have defined bits in odd places so not all forms of a command 61 will be in the same place. This is done so that a binary search can be 62 done to find the opcodes. Note that table D.2 in the MPC860 User's 63 Manual "Instructions Sorted by Opcode" does not account for these 64 bit locations */ 65 66 struct opcode opcodes[] = { 67 { D_OPCODE(3), D_MASK, {O_TO, O_rA, O_SIMM, 0}, 68 0, "twi", 0 }, 69 { D_OPCODE(7), D_MASK, {O_rD, O_rA, O_SIMM, 0}, 70 0, "mulli", 0 }, 71 { D_OPCODE(8), D_MASK, {O_rD, O_rA, O_SIMM, 0}, 72 0, "subfic", 0 }, 73 { D_OPCODE(10), D_MASK, {O_crfD, O_L, O_rA, O_UIMM, 0}, 74 0, "cmpli", 0 }, 75 { D_OPCODE(11), D_MASK, {O_crfD, O_L, O_rA, O_SIMM, 0}, 76 0, "cmpi", 0 }, 77 { D_OPCODE(12), D_MASK, {O_rD, O_rA, O_SIMM, 0}, 78 0, "addic", 0 }, 79 { D_OPCODE(13), D_MASK, {O_rD, O_rA, O_SIMM, 0}, 80 0, "addic.", 0 }, 81 { D_OPCODE(14), D_MASK, {O_rD, O_rA, O_SIMM, 0}, 82 0, "addi", H_RA0_IS_0 }, 83 { D_OPCODE(15), D_MASK, {O_rD, O_rA, O_SIMM, 0}, 84 0, "addis", H_RA0_IS_0|H_IMM_HIGH }, 85 { B_OPCODE(16,0,0), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0}, 86 handle_bc, "bc", H_RELATIVE }, 87 { B_OPCODE(16,0,1), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0}, 88 0, "bcl", H_RELATIVE }, 89 { B_OPCODE(16,1,0), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0}, 90 0, "bca", 0 }, 91 { B_OPCODE(16,1,1), B_MASK, {O_BO, O_BI, O_BD, O_AA, O_LK, 0}, 92 0, "bcla", 0 }, 93 { SC_OPCODE(17), SC_MASK, {0}, 94 0, "sc", 0 }, 95 { I_OPCODE(18,0,0), I_MASK, {O_LI, O_AA, O_LK, 0}, 96 0, "b", H_RELATIVE }, 97 { I_OPCODE(18,0,1), I_MASK, {O_LI, O_AA, O_LK, 0}, 98 0, "bl", H_RELATIVE }, 99 { I_OPCODE(18,1,0), I_MASK, {O_LI, O_AA, O_LK, 0}, 100 0, "ba", 0 }, 101 { I_OPCODE(18,1,1), I_MASK, {O_LI, O_AA, O_LK, 0}, 102 0, "bla", 0 }, 103 { XL_OPCODE(19,0,0), XL_MASK, {O_crfD, O_crfS}, 104 0, "mcrf", 0 }, 105 { XL_OPCODE(19,16,0), XL_MASK, {O_BO, O_BI, O_LK, 0}, 106 0, "bclr", 0 }, 107 { XL_OPCODE(19,16,1), XL_MASK, {O_BO, O_BI, O_LK, 0}, 108 0, "bclrl", 0 }, 109 { XL_OPCODE(19,33,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0}, 110 0, "crnor", 0 }, 111 { XL_OPCODE(19,50,0), XL_MASK, {0}, 112 0, "rfi", 0 }, 113 { XL_OPCODE(19,129,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0}, 114 0, "crandc", 0 }, 115 { XL_OPCODE(19,150,0), XL_MASK, {0}, 116 0, "isync", 0 }, 117 { XL_OPCODE(19,193,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0}, 118 0, "crxor", 0 }, 119 { XL_OPCODE(19,225,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0}, 120 0, "crnand", 0 }, 121 { XL_OPCODE(19,257,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0}, 122 0, "crand", 0 }, 123 { XL_OPCODE(19,289,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0}, 124 0, "creqv", 0 }, 125 { XL_OPCODE(19,417,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0}, 126 0, "crorc", 0 }, 127 { XL_OPCODE(19,449,0), XL_MASK, {O_crbD, O_crbA, O_crbB, 0}, 128 0, "cror", 0 }, 129 { XL_OPCODE(19,528,0), XL_MASK, {O_BO, O_BI, O_LK, 0}, 130 0, "bcctr", 0 }, 131 { XL_OPCODE(19,528,1), XL_MASK, {O_BO, O_BI, O_LK, 0}, 132 0, "bcctrl", 0 }, 133 { M_OPCODE(20,0), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0}, 134 0, "rlwimi", 0 }, 135 { M_OPCODE(20,1), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0}, 136 0, "rlwimi.", 0 }, 137 { M_OPCODE(21,0), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0}, 138 0, "rlwinm", 0 }, 139 { M_OPCODE(21,1), M_MASK, {O_rA, O_rS, O_SH, O_MB, O_ME, O_Rc, 0}, 140 0, "rlwinm.", 0 }, 141 { M_OPCODE(23,0), M_MASK, {O_rA, O_rS, O_rB, O_MB, O_ME, O_Rc, 0}, 142 0, "rlwnm", 0 }, 143 { M_OPCODE(23,1), M_MASK, {O_rA, O_rS, O_rB, O_MB, O_ME, O_Rc, 0}, 144 0, "rlwnm.", 0 }, 145 { D_OPCODE(24), D_MASK, {O_rA, O_rS, O_UIMM, 0}, 146 0, "ori", 0 }, 147 { D_OPCODE(25), D_MASK, {O_rA, O_rS, O_UIMM, 0}, 148 0, "oris", H_IMM_HIGH }, 149 { D_OPCODE(26), D_MASK, {O_rA, O_rS, O_UIMM, 0}, 150 0, "xori", 0 }, 151 { D_OPCODE(27), D_MASK, {O_rA, O_rS, O_UIMM, 0}, 152 0, "xoris", H_IMM_HIGH }, 153 { D_OPCODE(28), D_MASK, {O_rA, O_rS, O_UIMM, 0}, 154 0, "andi.", 0 }, 155 { D_OPCODE(29), D_MASK, {O_rA, O_rS, O_UIMM, 0}, 156 0, "andis.", H_IMM_HIGH }, 157 { X_OPCODE(31,0,0), X_MASK, {O_crfD, O_L, O_rA, O_rB, 0}, 158 0, "cmp", 0 }, 159 { X_OPCODE(31,4,0), X_MASK, {O_TO, O_rA, O_rB, 0}, 160 0, "tw", 0 }, 161 { XO_OPCODE(31,8,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 162 0, "subfc", 0 }, 163 { XO_OPCODE(31,8,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 164 0, "subfc.", 0 }, 165 { XO_OPCODE(31,10,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 166 0, "addc", 0 }, 167 { XO_OPCODE(31,10,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 168 0, "addc.", 0 }, 169 { XO_OPCODE(31,11,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0}, 170 0, "mulhwu", 0 }, 171 { XO_OPCODE(31,11,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0}, 172 0, "mulhwu.", 0 }, 173 { X_OPCODE(31,19,0), X_MASK, {O_rD, 0}, 174 0, "mfcr", 0 }, 175 { X_OPCODE(31,20,0), X_MASK, {O_rD, O_rA, O_rB, 0}, 176 0, "lwarx", H_RA0_IS_0 }, 177 { X_OPCODE(31,23,0), X_MASK, {O_rD, O_rA, O_rB, 0}, 178 0, "lwzx", H_RA0_IS_0 }, 179 { X_OPCODE(31,24,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 180 0, "slw", 0 }, 181 { X_OPCODE(31,24,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 182 0, "slw.", 0 }, 183 { X_OPCODE(31,26,0), X_MASK, {O_rA, O_rS, O_Rc, 0 }, 184 0, "cntlzw", 0 }, 185 { X_OPCODE(31,26,1), X_MASK, {O_rA, O_rS, O_Rc, 0}, 186 0, "cntlzw.", 0 }, 187 { X_OPCODE(31,28,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 188 0, "and", 0 }, 189 { X_OPCODE(31,28,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 190 0, "and.", 0 }, 191 { X_OPCODE(31,32,0), X_MASK, {O_crfD, O_L, O_rA, O_rB, 0}, 192 0, "cmpl", 0 }, 193 { XO_OPCODE(31,40,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 194 0, "subf", 0 }, 195 { XO_OPCODE(31,40,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 196 0, "subf.", 0 }, 197 { X_OPCODE(31,54,0), X_MASK, {O_rA, O_rB, 0}, 198 0, "dcbst", H_RA0_IS_0 }, 199 { X_OPCODE(31,55,0), X_MASK, {O_rD, O_rA, O_rB, 0}, 200 0, "lwzux", 0 }, 201 { X_OPCODE(31,60,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 202 0, "andc", 0 }, 203 { X_OPCODE(31,60,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 204 0, "andc.", 0 }, 205 { XO_OPCODE(31,75,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0}, 206 0, "mulhw", 0 }, 207 { XO_OPCODE(31,75,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_Rc, 0}, 208 0, "mulhw.", 0 }, 209 { X_OPCODE(31,83,0), X_MASK, {O_rD, 0}, 210 0, "mfmsr", 0 }, 211 { X_OPCODE(31,86,0), X_MASK, {O_rA, O_rB, 0}, 212 0, "dcbf", H_RA0_IS_0 }, 213 { X_OPCODE(31,87,0), X_MASK, {O_rD, O_rA, O_rB, 0}, 214 0, "lbzx", H_RA0_IS_0 }, 215 { XO_OPCODE(31,104,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 216 0, "neg", 0 }, 217 { XO_OPCODE(31,104,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 218 0, "neg.", 0 }, 219 { X_OPCODE(31,119,0), X_MASK, {O_rD, O_rA, O_rB, 0}, 220 0, "lbzux", 0 }, 221 { X_OPCODE(31,124,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 222 0, "nor", 0 }, 223 { X_OPCODE(31,124,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 224 0, "nor.", 0 }, 225 { XO_OPCODE(31,136,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 226 0, "subfe", 0 }, 227 { XO_OPCODE(31,136,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 228 0, "subfe.", 0 }, 229 { XO_OPCODE(31,138,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 230 0, "adde", 0 }, 231 { XO_OPCODE(31,138,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 232 0, "adde.", 0 }, 233 { XFX_OPCODE(31,144,0), XFX_MASK, {O_CRM, O_rS, 0}, 234 0, "mtcrf", 0 }, 235 { X_OPCODE(31,146,0), X_MASK, {O_rS, 0}, 236 0, "mtmsr", 0 }, 237 { X_OPCODE(31,150,1), X_MASK, {O_rS, O_rA, O_rB, 0}, 238 0, "stwcx.", 0 }, 239 { X_OPCODE(31,151,0), X_MASK, {O_rS, O_rA, O_rB, 0}, 240 0, "stwx", 0 }, 241 { X_OPCODE(31,183,0), X_MASK, {O_rS, O_rA, O_rB, 0}, 242 0, "stwux", 0 }, 243 { XO_OPCODE(31,200,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 244 0, "subfze", 0 }, 245 { XO_OPCODE(31,200,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 246 0, "subfze.", 0 }, 247 { XO_OPCODE(31,202,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 248 0, "addze", 0 }, 249 { XO_OPCODE(31,202,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 250 0, "addze.", 0 }, 251 { X_OPCODE(31,210,0), X_MASK, {O_SR, O_rS, 0}, 252 0, "mtsr", 0 }, 253 { X_OPCODE(31,215,0), X_MASK, {O_rS, O_rA, O_rB, 0}, 254 0, "stbx", H_RA0_IS_0 }, 255 { XO_OPCODE(31,232,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 256 0, "subfme", 0 }, 257 { XO_OPCODE(31,232,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 258 0, "subfme.", 0 }, 259 { XO_OPCODE(31,234,0,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 260 0, "addme", 0 }, 261 { XO_OPCODE(31,234,0,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 262 0, "addme.", 0 }, 263 { XO_OPCODE(31,235,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 264 0, "mullw", 0 }, 265 { XO_OPCODE(31,235,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 266 0, "mullw.", 0 }, 267 { X_OPCODE(31,242,0), X_MASK, {O_rS, O_rB, 0}, 268 0, "mtsrin", 0 }, 269 { X_OPCODE(31,246,0), X_MASK, {O_rA, O_rB, 0}, 270 0, "dcbtst", H_RA0_IS_0 }, 271 { X_OPCODE(31,247,0), X_MASK, {O_rS, O_rA, O_rB, 0}, 272 0, "stbux", 0 }, 273 { XO_OPCODE(31,266,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 274 0, "add", 0 }, 275 { XO_OPCODE(31,266,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 276 0, "add.", 0 }, 277 { X_OPCODE(31,278,0), X_MASK, {O_rA, O_rB, 0}, 278 0, "dcbt", H_RA0_IS_0 }, 279 { X_OPCODE(31,279,0), X_MASK, {O_rD, O_rA, O_rB, 0}, 280 0, "lhzx", H_RA0_IS_0 }, 281 { X_OPCODE(31,284,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 282 0, "eqv", 0 }, 283 { X_OPCODE(31,284,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 284 0, "eqv.", 0 }, 285 { X_OPCODE(31,306,0), X_MASK, {O_rB, 0}, 286 0, "tlbie", 0 }, 287 { X_OPCODE(31,310,0), X_MASK, {O_rD, O_rA, O_rB, 0}, 288 0, "eciwx", H_RA0_IS_0 }, 289 { X_OPCODE(31,311,0), X_MASK, {O_rD, O_rA, O_rB, 0}, 290 0, "lhzux", 0 }, 291 { X_OPCODE(31,316,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 292 0, "xor", 0 }, 293 { X_OPCODE(31,316,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 294 0, "xor.", 0 }, 295 { XFX_OPCODE(31,339,0), XFX_MASK, {O_rD, O_spr, 0}, 296 0, "mfspr", 0 }, 297 { X_OPCODE(31,343,0), X_MASK, {O_rD, O_rA, O_rB, 0}, 298 0, "lhax", H_RA0_IS_0 }, 299 { X_OPCODE(31,370,0), X_MASK, {0}, 300 0, "tlbia", 0 }, 301 { XFX_OPCODE(31,371,0), XFX_MASK, {O_rD, O_tbr, 0}, 302 0, "mftb", 0 }, 303 { X_OPCODE(31,375,0), X_MASK, {O_rD, O_rA, O_rB, 0}, 304 0, "lhaux", 0 }, 305 { X_OPCODE(31,407,0), X_MASK, {O_rS, O_rA, O_rB, 0}, 306 0, "sthx", H_RA0_IS_0 }, 307 { X_OPCODE(31,412,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 308 0, "orc", 0 }, 309 { X_OPCODE(31,412,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 310 0, "orc.", 0 }, 311 { X_OPCODE(31,438,0), X_MASK, {O_rS, O_rA, O_rB, 0}, 312 0, "ecowx", H_RA0_IS_0 }, 313 { X_OPCODE(31,439,0), X_MASK, {O_rS, O_rA, O_rB, 0}, 314 0, "sthux", 0 }, 315 { X_OPCODE(31,444,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 316 0, "or", 0 }, 317 { X_OPCODE(31,444,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 318 0, "or.", 0 }, 319 { XO_OPCODE(31,459,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 320 0, "divwu", 0 }, 321 { XO_OPCODE(31,459,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 322 0, "divwu.", 0 }, 323 { XFX_OPCODE(31,467,0), XFX_MASK, {O_spr, O_rS, 0}, 324 0, "mtspr", 0 }, 325 { X_OPCODE(31,470,0), X_MASK, {O_rA, O_rB, 0}, 326 0, "dcbi", H_RA0_IS_0 }, 327 { X_OPCODE(31,476,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 328 0, "nand", 0 }, 329 { X_OPCODE(31,476,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc,0}, 330 0, "nand.", 0 }, 331 { XO_OPCODE(31,491,0,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 332 0, "divw", 0 }, 333 { XO_OPCODE(31,491,0,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 334 0, "divw.", 0 }, 335 { X_OPCODE(31,512,0), X_MASK, {O_crfD, 0}, 336 0, "mcrxr", 0 }, 337 { XO_OPCODE(31,8,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 338 0, "subfco", 0 }, 339 { XO_OPCODE(31,8,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 340 0, "subfco.", 0 }, 341 { XO_OPCODE(31,10,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 342 0, "addco", 0 }, 343 { XO_OPCODE(31,10,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 344 0, "addco.", 0 }, 345 { X_OPCODE(31,533,0), X_MASK, {O_rD, O_rA, O_rB, 0}, 346 0, "lswx", H_RA0_IS_0 }, 347 { X_OPCODE(31,534,0), X_MASK, {O_rD, O_rA, O_rB, 0}, 348 0, "lwbrx", H_RA0_IS_0 }, 349 { X_OPCODE(31,536,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 350 0, "srw", 0 }, 351 { X_OPCODE(31,536,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 352 0, "srw.", 0 }, 353 { XO_OPCODE(31,40,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 354 0, "subfo", 0 }, 355 { XO_OPCODE(31,40,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 356 0, "subfo.", 0 }, 357 { X_OPCODE(31,566,0), X_MASK, {0}, 358 0, "tlbsync", 0 }, 359 { X_OPCODE(31,595,0), X_MASK, {O_rD, O_SR, 0}, 360 0, "mfsr", 0 }, 361 { X_OPCODE(31,597,0), X_MASK, {O_rD, O_rA, O_NB, 0}, 362 0, "lswi", H_RA0_IS_0 }, 363 { X_OPCODE(31,598,0), X_MASK, {0}, 364 0, "sync", 0 }, 365 { XO_OPCODE(31,104,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 366 0, "nego", 0 }, 367 { XO_OPCODE(31,104,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 368 0, "nego.", 0 }, 369 { XO_OPCODE(31,136,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 370 0, "subfeo", 0 }, 371 { XO_OPCODE(31,136,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 372 0, "subfeo.", 0 }, 373 { XO_OPCODE(31,138,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 374 0, "addeo", 0 }, 375 { XO_OPCODE(31,138,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 376 0, "addeo.", 0 }, 377 { X_OPCODE(31,659,0), X_MASK, {O_rD, O_rB, 0}, 378 0, "mfsrin", 0 }, 379 { X_OPCODE(31,661,0), X_MASK, {O_rS, O_rA, O_rB, 0}, 380 0, "stswx", H_RA0_IS_0 }, 381 { X_OPCODE(31,662,0), X_MASK, {O_rS, O_rA, O_rB, 0}, 382 0, "stwbrx", H_RA0_IS_0 }, 383 { XO_OPCODE(31,200,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 384 0, "subfzeo", 0 }, 385 { XO_OPCODE(31,200,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 386 0, "subfzeo.", 0 }, 387 { XO_OPCODE(31,202,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 388 0, "addzeo", 0 }, 389 { XO_OPCODE(31,202,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 390 0, "addzeo.", 0 }, 391 { X_OPCODE(31,725,0), X_MASK, {O_rS, O_rA, O_NB, 0}, 392 0, "stswi", H_RA0_IS_0 }, 393 { XO_OPCODE(31,232,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 394 0, "subfmeo", 0 }, 395 { XO_OPCODE(31,232,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 396 0, "subfmeo.", 0 }, 397 { XO_OPCODE(31,234,1,0), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 398 0, "addmeo", 0 }, 399 { XO_OPCODE(31,234,1,1), XO_MASK, {O_rD, O_rA, O_OE, O_Rc, 0}, 400 0, "addmeo.", 0 }, 401 { XO_OPCODE(31,235,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 402 0, "mullwo", 0 }, 403 { XO_OPCODE(31,235,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 404 0, "mullwo.", 0 }, 405 { XO_OPCODE(31,266,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 406 0, "addo", 0 }, 407 { XO_OPCODE(31,266,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 408 0, "addo.", 0 }, 409 { X_OPCODE(31,790,0), X_MASK, {O_rD, O_rA, O_rB, 0}, 410 0, "lhbrx", H_RA0_IS_0 }, 411 { X_OPCODE(31,792,0), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 412 0, "sraw", 0 }, 413 { X_OPCODE(31,792,1), X_MASK, {O_rA, O_rS, O_rB, O_Rc, 0}, 414 0, "sraw.", 0 }, 415 { X_OPCODE(31,824,0), X_MASK, {O_rA, O_rS, O_SH, O_Rc, 0}, 416 0, "srawi", 0 }, 417 { X_OPCODE(31,824,1), X_MASK, {O_rA, O_rS, O_SH, O_Rc, 0}, 418 0, "srawi.", 0 }, 419 { X_OPCODE(31,854,0), X_MASK, {0}, 420 0, "eieio", 0 }, 421 { X_OPCODE(31,918,0), X_MASK, {O_rS, O_rA, O_rB, 0}, 422 0, "sthbrx", H_RA0_IS_0 }, 423 { X_OPCODE(31,922,0), X_MASK, {O_rA, O_rS, O_Rc, 0}, 424 0, "extsh", 0 }, 425 { X_OPCODE(31,922,1), X_MASK, {O_rA, O_rS, O_Rc, 0}, 426 0, "extsh.", 0 }, 427 { X_OPCODE(31,954,0), X_MASK, {O_rA, O_rS, O_Rc, 0}, 428 0, "extsb", 0 }, 429 { X_OPCODE(31,954,1), X_MASK, {O_rA, O_rS, O_Rc, 0}, 430 0, "extsb.", 0 }, 431 { XO_OPCODE(31,459,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 432 0, "divwuo", 0 }, 433 { XO_OPCODE(31,459,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 434 0, "divwuo.", 0 }, 435 { X_OPCODE(31,978,0), X_MASK, {O_rB, 0}, 436 0, "tlbld", 0 }, 437 { X_OPCODE(31,982,0), X_MASK, {O_rA, O_rB, 0}, 438 0, "icbi", H_RA0_IS_0 }, 439 { XO_OPCODE(31,491,1,0), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 440 0, "divwo", 0 }, 441 { XO_OPCODE(31,491,1,1), XO_MASK, {O_rD, O_rA, O_rB, O_OE, O_Rc, 0}, 442 0, "divwo.", 0 }, 443 { X_OPCODE(31,1010,0), X_MASK, {O_rB, 0}, 444 0, "tlbli", 0 }, 445 { X_OPCODE(31,1014,0), X_MASK, {O_rA, O_rB, 0}, 446 0, "dcbz", H_RA0_IS_0 }, 447 { D_OPCODE(32), D_MASK, {O_rD, O_d, O_rA, 0}, 448 0, "lwz", H_RA0_IS_0 }, 449 { D_OPCODE(33), D_MASK, {O_rD, O_d, O_rA, 0}, 450 0, "lwzu", 0 }, 451 { D_OPCODE(34), D_MASK, {O_rD, O_d, O_rA, 0}, 452 0, "lbz", H_RA0_IS_0 }, 453 { D_OPCODE(35), D_MASK, {O_rD, O_d, O_rA, 0}, 454 0, "lbzu", 0 }, 455 { D_OPCODE(36), D_MASK, {O_rS, O_d, O_rA, 0}, 456 0, "stw", H_RA0_IS_0 }, 457 { D_OPCODE(37), D_MASK, {O_rS, O_d, O_rA, 0}, 458 0, "stwu", 0 }, 459 { D_OPCODE(38), D_MASK, {O_rS, O_d, O_rA, 0}, 460 0, "stb", H_RA0_IS_0 }, 461 { D_OPCODE(39), D_MASK, {O_rS, O_d, O_rA, 0}, 462 0, "stbu", 0 }, 463 { D_OPCODE(40), D_MASK, {O_rD, O_d, O_rA, 0}, 464 0, "lhz", H_RA0_IS_0 }, 465 { D_OPCODE(41), D_MASK, {O_rD, O_d, O_rA, 0}, 466 0, "lhzu", 0 }, 467 { D_OPCODE(42), D_MASK, {O_rD, O_d, O_rA, 0}, 468 0, "lha", H_RA0_IS_0 }, 469 { D_OPCODE(43), D_MASK, {O_rD, O_d, O_rA, 0}, 470 0, "lhau", 0 }, 471 { D_OPCODE(44), D_MASK, {O_rS, O_d, O_rA, 0}, 472 0, "sth", H_RA0_IS_0 }, 473 { D_OPCODE(45), D_MASK, {O_rS, O_d, O_rA, 0}, 474 0, "sthu", 0 }, 475 { D_OPCODE(46), D_MASK, {O_rD, O_d, O_rA, 0}, 476 0, "lmw", H_RA0_IS_0 }, 477 { D_OPCODE(47), D_MASK, {O_rS, O_d, O_rA, 0}, 478 0, "stmw", H_RA0_IS_0 }, 479 }; 480 481 const unsigned int n_opcodes = sizeof(opcodes) / sizeof(opcodes[0]); 482 483 struct spr_info spr_map[] = { 484 { SPR_XER, "XER" }, 485 { SPR_LR, "LR" }, 486 { SPR_CTR, "CTR" }, 487 { SPR_DSISR, "DSISR" }, 488 { SPR_DAR, "DAR" }, 489 { SPR_DEC, "DEC" }, 490 { SPR_SRR0, "SRR0" }, 491 { SPR_SRR1, "SRR1" }, 492 { SPR_EIE, "EIE" }, 493 { SPR_EID, "EID" }, 494 { SPR_CMPA, "CMPA" }, 495 { SPR_CMPB, "CMPB" }, 496 { SPR_CMPC, "CMPC" }, 497 { SPR_CMPD, "CMPD" }, 498 { SPR_ICR, "ICR" }, 499 { SPR_DER, "DER" }, 500 { SPR_COUNTA, "COUNTA" }, 501 { SPR_COUNTB, "COUNTB" }, 502 { SPR_CMPE, "CMPE" }, 503 { SPR_CMPF, "CMPF" }, 504 { SPR_CMPG, "CMPG" }, 505 { SPR_CMPH, "CMPH" }, 506 { SPR_LCTRL1, "LCTRL1" }, 507 { SPR_LCTRL2, "LCTRL2" }, 508 { SPR_ICTRL, "ICTRL" }, 509 { SPR_BAR, "BAR" }, 510 { SPR_USPRG0, "USPRG0" }, 511 { SPR_SPRG4_RO, "SPRG4_RO" }, 512 { SPR_SPRG5_RO, "SPRG5_RO" }, 513 { SPR_SPRG6_RO, "SPRG6_RO" }, 514 { SPR_SPRG7_RO, "SPRG7_RO" }, 515 { SPR_SPRG0, "SPRG0" }, 516 { SPR_SPRG1, "SPRG1" }, 517 { SPR_SPRG2, "SPRG2" }, 518 { SPR_SPRG3, "SPRG3" }, 519 { SPR_SPRG4, "SPRG4" }, 520 { SPR_SPRG5, "SPRG5" }, 521 { SPR_SPRG6, "SPRG6" }, 522 { SPR_SPRG7, "SPRG7" }, 523 { SPR_EAR, "EAR" }, 524 { SPR_TBL, "TBL" }, 525 { SPR_TBU, "TBU" }, 526 { SPR_IC_CST, "IC_CST" }, 527 { SPR_IC_ADR, "IC_ADR" }, 528 { SPR_IC_DAT, "IC_DAT" }, 529 { SPR_DC_CST, "DC_CST" }, 530 { SPR_DC_ADR, "DC_ADR" }, 531 { SPR_DC_DAT, "DC_DAT" }, 532 { SPR_DPDR, "DPDR" }, 533 { SPR_IMMR, "IMMR" }, 534 { SPR_MI_CTR, "MI_CTR" }, 535 { SPR_MI_AP, "MI_AP" }, 536 { SPR_MI_EPN, "MI_EPN" }, 537 { SPR_MI_TWC, "MI_TWC" }, 538 { SPR_MI_RPN, "MI_RPN" }, 539 { SPR_MD_CTR, "MD_CTR" }, 540 { SPR_M_CASID, "M_CASID" }, 541 { SPR_MD_AP, "MD_AP" }, 542 { SPR_MD_EPN, "MD_EPN" }, 543 { SPR_M_TWB, "M_TWB" }, 544 { SPR_MD_TWC, "MD_TWC" }, 545 { SPR_MD_RPN, "MD_RPN" }, 546 { SPR_M_TW, "M_TW" }, 547 { SPR_MI_DBCAM, "MI_DBCAM" }, 548 { SPR_MI_DBRAM0, "MI_DBRAM0" }, 549 { SPR_MI_DBRAM1, "MI_DBRAM1" }, 550 { SPR_MD_DBCAM, "MD_DBCAM" }, 551 { SPR_MD_DBRAM0, "MD_DBRAM0" }, 552 { SPR_MD_DBRAM1, "MD_DBRAM1" }, 553 { SPR_ZPR, "ZPR" }, 554 { SPR_PID, "PID" }, 555 { SPR_CCR0, "CCR0" }, 556 { SPR_IAC3, "IAC3" }, 557 { SPR_IAC4, "IAC4" }, 558 { SPR_DVC1, "DVC1" }, 559 { SPR_DVC2, "DVC2" }, 560 { SPR_SGR, "SGR" }, 561 { SPR_DCWR, "DCWR" }, 562 { SPR_SLER, "SLER" }, 563 { SPR_SU0R, "SU0R" }, 564 { SPR_DBCR1, "DBCR1" }, 565 { SPR_ICDBDR, "ICDBDR" }, 566 { SPR_ESR, "ESR" }, 567 { SPR_DEAR, "DEAR" }, 568 { SPR_EVPR, "EVPR" }, 569 { SPR_TSR, "TSR" }, 570 { SPR_TCR, "TCR" }, 571 { SPR_PIT, "PIT" }, 572 { SPR_SRR2, "SRR2" }, 573 { SPR_SRR3, "SRR3" }, 574 { SPR_DBSR, "DBSR" }, 575 { SPR_DBCR0, "DBCR0" }, 576 { SPR_IAC1, "IAC1" }, 577 { SPR_IAC2, "IAC2" }, 578 { SPR_DAC1, "DAC1" }, 579 { SPR_DAC2, "DAC2" }, 580 { SPR_DCCR, "DCCR" }, 581 { SPR_ICCR, "ICCR" }, 582 }; 583 584 const unsigned int n_sprs = sizeof(spr_map) / sizeof(spr_map[0]); 585 586 #endif 587 588 /* 589 * Copyright (c) 2000 William L. Pitts and W. Gerald Hicks 590 * All rights reserved. 591 * 592 * Redistribution and use in source and binary forms are freely 593 * permitted provided that the above copyright notice and this 594 * paragraph and the following disclaimer are duplicated in all 595 * such forms. 596 * 597 * This software is provided "AS IS" and without any express or 598 * implied warranties, including, without limitation, the implied 599 * warranties of merchantability and fitness for a particular 600 * purpose. 601 */ 602