Commit 6c9c32f9b99ad417d61650519db5530e68bb2e93

Authored by wdenk
1 parent affae2bff8

Initial revision

Showing 1 changed file with 602 additions and 0 deletions Side-by-side Diff

include/bedbug/tables.h
  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 + */