• Main Page
  • Modules
  • Data Types
  • Files

osprey/cygnus/opcodes/ppc-opc.c

Go to the documentation of this file.
00001 /*
00002  * Copyright 2003, 2004, 2005, 2006 PathScale, Inc.  All Rights Reserved.
00003  */
00004 
00005 /* ppc-opc.c -- PowerPC opcode list
00006    Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004,
00007    2005 Free Software Foundation, Inc.
00008    Written by Ian Lance Taylor, Cygnus Support
00009 
00010    This file is part of GDB, GAS, and the GNU binutils.
00011 
00012    GDB, GAS, and the GNU binutils are free software; you can redistribute
00013    them and/or modify them under the terms of the GNU General Public
00014    License as published by the Free Software Foundation; either version
00015    2, or (at your option) any later version.
00016 
00017    GDB, GAS, and the GNU binutils are distributed in the hope that they
00018    will be useful, but WITHOUT ANY WARRANTY; without even the implied
00019    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
00020    the GNU General Public License for more details.
00021 
00022    You should have received a copy of the GNU General Public License
00023    along with this file; see the file COPYING.  If not, write to the Free
00024    Software Foundation, 59 Temple Place - Suite 330, Boston, MA
00025    02111-1307, USA.  */
00026 
00027 #include <stdio.h>
00028 #include "sysdep.h"
00029 #include "opcode/ppc.h"
00030 #include "opintl.h"
00031 
00032 /* This file holds the PowerPC opcode table.  The opcode table
00033    includes almost all of the extended instruction mnemonics.  This
00034    permits the disassembler to use them, and simplifies the assembler
00035    logic, at the cost of increasing the table size.  The table is
00036    strictly constant data, so the compiler should be able to put it in
00037    the .text section.
00038 
00039    This file also holds the operand table.  All knowledge about
00040    inserting operands into instructions and vice-versa is kept in this
00041    file.  */
00042 
00043 /* Local insertion and extraction functions.  */
00044 
00045 static unsigned long insert_bat (unsigned long, long, int, const char **);
00046 static long extract_bat (unsigned long, int, int *);
00047 static unsigned long insert_bba (unsigned long, long, int, const char **);
00048 static long extract_bba (unsigned long, int, int *);
00049 static unsigned long insert_bd (unsigned long, long, int, const char **);
00050 static long extract_bd (unsigned long, int, int *);
00051 static unsigned long insert_bdm (unsigned long, long, int, const char **);
00052 static long extract_bdm (unsigned long, int, int *);
00053 static unsigned long insert_bdp (unsigned long, long, int, const char **);
00054 static long extract_bdp (unsigned long, int, int *);
00055 static unsigned long insert_bo (unsigned long, long, int, const char **);
00056 static long extract_bo (unsigned long, int, int *);
00057 static unsigned long insert_boe (unsigned long, long, int, const char **);
00058 static long extract_boe (unsigned long, int, int *);
00059 static unsigned long insert_dq (unsigned long, long, int, const char **);
00060 static long extract_dq (unsigned long, int, int *);
00061 static unsigned long insert_ds (unsigned long, long, int, const char **);
00062 static long extract_ds (unsigned long, int, int *);
00063 static unsigned long insert_de (unsigned long, long, int, const char **);
00064 static long extract_de (unsigned long, int, int *);
00065 static unsigned long insert_des (unsigned long, long, int, const char **);
00066 static long extract_des (unsigned long, int, int *);
00067 static unsigned long insert_fxm (unsigned long, long, int, const char **);
00068 static long extract_fxm (unsigned long, int, int *);
00069 static unsigned long insert_li (unsigned long, long, int, const char **);
00070 static long extract_li (unsigned long, int, int *);
00071 static unsigned long insert_mbe (unsigned long, long, int, const char **);
00072 static long extract_mbe (unsigned long, int, int *);
00073 static unsigned long insert_mb6 (unsigned long, long, int, const char **);
00074 static long extract_mb6 (unsigned long, int, int *);
00075 static unsigned long insert_nb (unsigned long, long, int, const char **);
00076 static long extract_nb (unsigned long, int, int *);
00077 static unsigned long insert_nsi (unsigned long, long, int, const char **);
00078 static long extract_nsi (unsigned long, int, int *);
00079 static unsigned long insert_ral (unsigned long, long, int, const char **);
00080 static unsigned long insert_ram (unsigned long, long, int, const char **);
00081 static unsigned long insert_raq (unsigned long, long, int, const char **);
00082 static unsigned long insert_ras (unsigned long, long, int, const char **);
00083 static unsigned long insert_rbs (unsigned long, long, int, const char **);
00084 static long extract_rbs (unsigned long, int, int *);
00085 static unsigned long insert_rsq (unsigned long, long, int, const char **);
00086 static unsigned long insert_rtq (unsigned long, long, int, const char **);
00087 static unsigned long insert_sh6 (unsigned long, long, int, const char **);
00088 static long extract_sh6 (unsigned long, int, int *);
00089 static unsigned long insert_spr (unsigned long, long, int, const char **);
00090 static long extract_spr (unsigned long, int, int *);
00091 static unsigned long insert_tbr (unsigned long, long, int, const char **);
00092 static long extract_tbr (unsigned long, int, int *);
00093 static unsigned long insert_ev2 (unsigned long, long, int, const char **);
00094 static long extract_ev2 (unsigned long, int, int *);
00095 static unsigned long insert_ev4 (unsigned long, long, int, const char **);
00096 static long extract_ev4 (unsigned long, int, int *);
00097 static unsigned long insert_ev8 (unsigned long, long, int, const char **);
00098 static long extract_ev8 (unsigned long, int, int *);
00099 
00100 /* The operands table.
00101 
00102    The fields are bits, shift, insert, extract, flags.
00103 
00104    We used to put parens around the various additions, like the one
00105    for BA just below.  However, that caused trouble with feeble
00106    compilers with a limit on depth of a parenthesized expression, like
00107    (reportedly) the compiler in Microsoft Developer Studio 5.  So we
00108    omit the parens, since the macros are never used in a context where
00109    the addition will be ambiguous.  */
00110 
00111 const struct powerpc_operand powerpc_operands[] =
00112 {
00113   /* The zero index is used to indicate the end of the list of
00114      operands.  */
00115 #define UNUSED 0
00116   { 0, 0, NULL, NULL, 0 },
00117 
00118   /* The BA field in an XL form instruction.  */
00119 #define BA UNUSED + 1
00120 #define BA_MASK (0x1f << 16)
00121   { 5, 16, NULL, NULL, PPC_OPERAND_CR },
00122 
00123   /* The BA field in an XL form instruction when it must be the same
00124      as the BT field in the same instruction.  */
00125 #define BAT BA + 1
00126   { 5, 16, insert_bat, extract_bat, PPC_OPERAND_FAKE },
00127 
00128   /* The BB field in an XL form instruction.  */
00129 #define BB BAT + 1
00130 #define BB_MASK (0x1f << 11)
00131   { 5, 11, NULL, NULL, PPC_OPERAND_CR },
00132 
00133   /* The BB field in an XL form instruction when it must be the same
00134      as the BA field in the same instruction.  */
00135 #define BBA BB + 1
00136   { 5, 11, insert_bba, extract_bba, PPC_OPERAND_FAKE },
00137 
00138   /* The BD field in a B form instruction.  The lower two bits are
00139      forced to zero.  */
00140 #define BD BBA + 1
00141   { 16, 0, insert_bd, extract_bd, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
00142 
00143   /* The BD field in a B form instruction when absolute addressing is
00144      used.  */
00145 #define BDA BD + 1
00146   { 16, 0, insert_bd, extract_bd, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
00147 
00148   /* The BD field in a B form instruction when the - modifier is used.
00149      This sets the y bit of the BO field appropriately.  */
00150 #define BDM BDA + 1
00151   { 16, 0, insert_bdm, extract_bdm,
00152       PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
00153 
00154   /* The BD field in a B form instruction when the - modifier is used
00155      and absolute address is used.  */
00156 #define BDMA BDM + 1
00157   { 16, 0, insert_bdm, extract_bdm,
00158       PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
00159 
00160   /* The BD field in a B form instruction when the + modifier is used.
00161      This sets the y bit of the BO field appropriately.  */
00162 #define BDP BDMA + 1
00163   { 16, 0, insert_bdp, extract_bdp,
00164       PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
00165 
00166   /* The BD field in a B form instruction when the + modifier is used
00167      and absolute addressing is used.  */
00168 #define BDPA BDP + 1
00169   { 16, 0, insert_bdp, extract_bdp,
00170       PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
00171 
00172   /* The BF field in an X or XL form instruction.  */
00173 #define BF BDPA + 1
00174   { 3, 23, NULL, NULL, PPC_OPERAND_CR },
00175 
00176   /* An optional BF field.  This is used for comparison instructions,
00177      in which an omitted BF field is taken as zero.  */
00178 #define OBF BF + 1
00179   { 3, 23, NULL, NULL, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
00180 
00181   /* The BFA field in an X or XL form instruction.  */
00182 #define BFA OBF + 1
00183   { 3, 18, NULL, NULL, PPC_OPERAND_CR },
00184 
00185   /* The BI field in a B form or XL form instruction.  */
00186 #define BI BFA + 1
00187 #define BI_MASK (0x1f << 16)
00188   { 5, 16, NULL, NULL, PPC_OPERAND_CR },
00189 
00190   /* The BO field in a B form instruction.  Certain values are
00191      illegal.  */
00192 #define BO BI + 1
00193 #define BO_MASK (0x1f << 21)
00194   { 5, 21, insert_bo, extract_bo, 0 },
00195 
00196   /* The BO field in a B form instruction when the + or - modifier is
00197      used.  This is like the BO field, but it must be even.  */
00198 #define BOE BO + 1
00199   { 5, 21, insert_boe, extract_boe, 0 },
00200 
00201 #define BH BOE + 1
00202   { 2, 11, NULL, NULL, PPC_OPERAND_OPTIONAL },
00203 
00204   /* The BT field in an X or XL form instruction.  */
00205 #define BT BH + 1
00206   { 5, 21, NULL, NULL, PPC_OPERAND_CR },
00207 
00208   /* The condition register number portion of the BI field in a B form
00209      or XL form instruction.  This is used for the extended
00210      conditional branch mnemonics, which set the lower two bits of the
00211      BI field.  This field is optional.  */
00212 #define CR BT + 1
00213   { 3, 18, NULL, NULL, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
00214 
00215   /* The CRB field in an X form instruction.  */
00216 #define CRB CR + 1
00217   { 5, 6, NULL, NULL, 0 },
00218 
00219   /* The CRFD field in an X form instruction.  */
00220 #define CRFD CRB + 1
00221   { 3, 23, NULL, NULL, PPC_OPERAND_CR },
00222 
00223   /* The CRFS field in an X form instruction.  */
00224 #define CRFS CRFD + 1
00225   { 3, 0, NULL, NULL, PPC_OPERAND_CR },
00226 
00227   /* The CT field in an X form instruction.  */
00228 #define CT CRFS + 1
00229   { 5, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
00230 
00231   /* The D field in a D form instruction.  This is a displacement off
00232      a register, and implies that the next operand is a register in
00233      parentheses.  */
00234 #define D CT + 1
00235   { 16, 0, NULL, NULL, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
00236 
00237   /* The DE field in a DE form instruction.  This is like D, but is 12
00238      bits only.  */
00239 #define DE D + 1
00240   { 14, 0, insert_de, extract_de, PPC_OPERAND_PARENS },
00241 
00242   /* The DES field in a DES form instruction.  This is like DS, but is 14
00243      bits only (12 stored.)  */
00244 #define DES DE + 1
00245   { 14, 0, insert_des, extract_des, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
00246 
00247   /* The DQ field in a DQ form instruction.  This is like D, but the
00248      lower four bits are forced to zero. */
00249 #define DQ DES + 1
00250   { 16, 0, insert_dq, extract_dq,
00251       PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DQ },
00252 
00253   /* The DS field in a DS form instruction.  This is like D, but the
00254      lower two bits are forced to zero.  */
00255 #define DS DQ + 1
00256   { 16, 0, insert_ds, extract_ds,
00257       PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DS },
00258 
00259   /* The E field in a wrteei instruction.  */
00260 #define E DS + 1
00261   { 1, 15, NULL, NULL, 0 },
00262 
00263   /* The FL1 field in a POWER SC form instruction.  */
00264 #define FL1 E + 1
00265   { 4, 12, NULL, NULL, 0 },
00266 
00267   /* The FL2 field in a POWER SC form instruction.  */
00268 #define FL2 FL1 + 1
00269   { 3, 2, NULL, NULL, 0 },
00270 
00271   /* The FLM field in an XFL form instruction.  */
00272 #define FLM FL2 + 1
00273   { 8, 17, NULL, NULL, 0 },
00274 
00275   /* The FRA field in an X or A form instruction.  */
00276 #define FRA FLM + 1
00277 #define FRA_MASK (0x1f << 16)
00278   { 5, 16, NULL, NULL, PPC_OPERAND_FPR },
00279 
00280   /* The FRB field in an X or A form instruction.  */
00281 #define FRB FRA + 1
00282 #define FRB_MASK (0x1f << 11)
00283   { 5, 11, NULL, NULL, PPC_OPERAND_FPR },
00284 
00285   /* The FRC field in an A form instruction.  */
00286 #define FRC FRB + 1
00287 #define FRC_MASK (0x1f << 6)
00288   { 5, 6, NULL, NULL, PPC_OPERAND_FPR },
00289 
00290   /* The FRS field in an X form instruction or the FRT field in a D, X
00291      or A form instruction.  */
00292 #define FRS FRC + 1
00293 #define FRT FRS
00294   { 5, 21, NULL, NULL, PPC_OPERAND_FPR },
00295 
00296   /* The FXM field in an XFX instruction.  */
00297 #define FXM FRS + 1
00298 #define FXM_MASK (0xff << 12)
00299   { 8, 12, insert_fxm, extract_fxm, 0 },
00300 
00301   /* Power4 version for mfcr.  */
00302 #define FXM4 FXM + 1
00303   { 8, 12, insert_fxm, extract_fxm, PPC_OPERAND_OPTIONAL },
00304 
00305   /* The L field in a D or X form instruction.  */
00306 #define L FXM4 + 1
00307   { 1, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
00308 
00309   /* The LEV field in a POWER SC form instruction.  */
00310 #define LEV L + 1
00311   { 7, 5, NULL, NULL, 0 },
00312 
00313   /* The LI field in an I form instruction.  The lower two bits are
00314      forced to zero.  */
00315 #define LI LEV + 1
00316   { 26, 0, insert_li, extract_li, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
00317 
00318   /* The LI field in an I form instruction when used as an absolute
00319      address.  */
00320 #define LIA LI + 1
00321   { 26, 0, insert_li, extract_li, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
00322 
00323   /* The LS field in an X (sync) form instruction.  */
00324 #define LS LIA + 1
00325   { 2, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
00326 
00327   /* The MB field in an M form instruction.  */
00328 #define MB LS + 1
00329 #define MB_MASK (0x1f << 6)
00330   { 5, 6, NULL, NULL, 0 },
00331 
00332   /* The ME field in an M form instruction.  */
00333 #define ME MB + 1
00334 #define ME_MASK (0x1f << 1)
00335   { 5, 1, NULL, NULL, 0 },
00336 
00337   /* The MB and ME fields in an M form instruction expressed a single
00338      operand which is a bitmask indicating which bits to select.  This
00339      is a two operand form using PPC_OPERAND_NEXT.  See the
00340      description in opcode/ppc.h for what this means.  */
00341 #define MBE ME + 1
00342   { 5, 6, NULL, NULL, PPC_OPERAND_OPTIONAL | PPC_OPERAND_NEXT },
00343   { 32, 0, insert_mbe, extract_mbe, 0 },
00344 
00345   /* The MB or ME field in an MD or MDS form instruction.  The high
00346      bit is wrapped to the low end.  */
00347 #define MB6 MBE + 2
00348 #define ME6 MB6
00349 #define MB6_MASK (0x3f << 5)
00350   { 6, 5, insert_mb6, extract_mb6, 0 },
00351 
00352   /* The MO field in an mbar instruction.  */
00353 #define MO MB6 + 1
00354   { 5, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
00355 
00356   /* The NB field in an X form instruction.  The value 32 is stored as
00357      0.  */
00358 #define NB MO + 1
00359   { 6, 11, insert_nb, extract_nb, 0 },
00360 
00361   /* The NSI field in a D form instruction.  This is the same as the
00362      SI field, only negated.  */
00363 #define NSI NB + 1
00364   { 16, 0, insert_nsi, extract_nsi,
00365       PPC_OPERAND_NEGATIVE | PPC_OPERAND_SIGNED },
00366 
00367   /* The RA field in an D, DS, DQ, X, XO, M, or MDS form instruction.  */
00368 #define RA NSI + 1
00369 #define RA_MASK (0x1f << 16)
00370   { 5, 16, NULL, NULL, PPC_OPERAND_GPR },
00371 
00372   /* As above, but 0 in the RA field means zero, not r0.  */
00373 #define RA0 RA + 1
00374   { 5, 16, NULL, NULL, PPC_OPERAND_GPR_0 },
00375 
00376   /* The RA field in the DQ form lq instruction, which has special
00377      value restrictions.  */
00378 #define RAQ RA0 + 1
00379   { 5, 16, insert_raq, NULL, PPC_OPERAND_GPR_0 },
00380 
00381   /* The RA field in a D or X form instruction which is an updating
00382      load, which means that the RA field may not be zero and may not
00383      equal the RT field.  */
00384 #define RAL RAQ + 1
00385   { 5, 16, insert_ral, NULL, PPC_OPERAND_GPR_0 },
00386 
00387   /* The RA field in an lmw instruction, which has special value
00388      restrictions.  */
00389 #define RAM RAL + 1
00390   { 5, 16, insert_ram, NULL, PPC_OPERAND_GPR_0 },
00391 
00392   /* The RA field in a D or X form instruction which is an updating
00393      store or an updating floating point load, which means that the RA
00394      field may not be zero.  */
00395 #define RAS RAM + 1
00396   { 5, 16, insert_ras, NULL, PPC_OPERAND_GPR_0 },
00397 
00398   /* The RA field of the tlbwe instruction, which is optional.  */
00399 #define RAOPT RAS + 1
00400   { 5, 16, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL },
00401 
00402   /* The RB field in an X, XO, M, or MDS form instruction.  */
00403 #define RB RAOPT + 1
00404 #define RB_MASK (0x1f << 11)
00405   { 5, 11, NULL, NULL, PPC_OPERAND_GPR },
00406 
00407   /* The RB field in an X form instruction when it must be the same as
00408      the RS field in the instruction.  This is used for extended
00409      mnemonics like mr.  */
00410 #define RBS RB + 1
00411   { 5, 1, insert_rbs, extract_rbs, PPC_OPERAND_FAKE },
00412 
00413   /* The RS field in a D, DS, X, XFX, XS, M, MD or MDS form
00414      instruction or the RT field in a D, DS, X, XFX or XO form
00415      instruction.  */
00416 #define RS RBS + 1
00417 #define RT RS
00418 #define RT_MASK (0x1f << 21)
00419   { 5, 21, NULL, NULL, PPC_OPERAND_GPR },
00420 
00421   /* The RS field of the DS form stq instruction, which has special
00422      value restrictions.  */
00423 #define RSQ RS + 1
00424   { 5, 21, insert_rsq, NULL, PPC_OPERAND_GPR_0 },
00425 
00426   /* The RT field of the DQ form lq instruction, which has special
00427      value restrictions.  */
00428 #define RTQ RSQ + 1
00429   { 5, 21, insert_rtq, NULL, PPC_OPERAND_GPR_0 },
00430 
00431   /* The RS field of the tlbwe instruction, which is optional.  */
00432 #define RSO RTQ + 1
00433 #define RTO RSO
00434   { 5, 21, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL },
00435 
00436   /* The SH field in an X or M form instruction.  */
00437 #define SH RSO + 1
00438 #define SH_MASK (0x1f << 11)
00439   { 5, 11, NULL, NULL, 0 },
00440 
00441   /* The SH field in an MD form instruction.  This is split.  */
00442 #define SH6 SH + 1
00443 #define SH6_MASK ((0x1f << 11) | (1 << 1))
00444   { 6, 1, insert_sh6, extract_sh6, 0 },
00445 
00446   /* The SH field of the tlbwe instruction, which is optional.  */
00447 #define SHO SH6 + 1
00448   { 5, 11,NULL, NULL, PPC_OPERAND_OPTIONAL },
00449 
00450   /* The SI field in a D form instruction.  */
00451 #define SI SHO + 1
00452   { 16, 0, NULL, NULL, PPC_OPERAND_SIGNED },
00453 
00454   /* The SI field in a D form instruction when we accept a wide range
00455      of positive values.  */
00456 #define SISIGNOPT SI + 1
00457   { 16, 0, NULL, NULL, PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT },
00458 
00459   /* The SPR field in an XFX form instruction.  This is flipped--the
00460      lower 5 bits are stored in the upper 5 and vice- versa.  */
00461 #define SPR SISIGNOPT + 1
00462 #define PMR SPR
00463 #define SPR_MASK (0x3ff << 11)
00464   { 10, 11, insert_spr, extract_spr, 0 },
00465 
00466   /* The BAT index number in an XFX form m[ft]ibat[lu] instruction.  */
00467 #define SPRBAT SPR + 1
00468 #define SPRBAT_MASK (0x3 << 17)
00469   { 2, 17, NULL, NULL, 0 },
00470 
00471   /* The SPRG register number in an XFX form m[ft]sprg instruction.  */
00472 #define SPRG SPRBAT + 1
00473 #define SPRG_MASK (0x3 << 16)
00474   { 2, 16, NULL, NULL, 0 },
00475 
00476   /* The SR field in an X form instruction.  */
00477 #define SR SPRG + 1
00478   { 4, 16, NULL, NULL, 0 },
00479 
00480   /* The STRM field in an X AltiVec form instruction.  */
00481 #define STRM SR + 1
00482 #define STRM_MASK (0x3 << 21)
00483   { 2, 21, NULL, NULL, 0 },
00484 
00485   /* The SV field in a POWER SC form instruction.  */
00486 #define SV STRM + 1
00487   { 14, 2, NULL, NULL, 0 },
00488 
00489   /* The TBR field in an XFX form instruction.  This is like the SPR
00490      field, but it is optional.  */
00491 #define TBR SV + 1
00492   { 10, 11, insert_tbr, extract_tbr, PPC_OPERAND_OPTIONAL },
00493 
00494   /* The TO field in a D or X form instruction.  */
00495 #define TO TBR + 1
00496 #define TO_MASK (0x1f << 21)
00497   { 5, 21, NULL, NULL, 0 },
00498 
00499   /* The U field in an X form instruction.  */
00500 #define U TO + 1
00501   { 4, 12, NULL, NULL, 0 },
00502 
00503   /* The UI field in a D form instruction.  */
00504 #define UI U + 1
00505   { 16, 0, NULL, NULL, 0 },
00506 
00507   /* The VA field in a VA, VX or VXR form instruction.  */
00508 #define VA UI + 1
00509 #define VA_MASK (0x1f << 16)
00510   { 5, 16, NULL, NULL, PPC_OPERAND_VR },
00511 
00512   /* The VB field in a VA, VX or VXR form instruction.  */
00513 #define VB VA + 1
00514 #define VB_MASK (0x1f << 11)
00515   { 5, 11, NULL, NULL, PPC_OPERAND_VR },
00516 
00517   /* The VC field in a VA form instruction.  */
00518 #define VC VB + 1
00519 #define VC_MASK (0x1f << 6)
00520   { 5, 6, NULL, NULL, PPC_OPERAND_VR },
00521 
00522   /* The VD or VS field in a VA, VX, VXR or X form instruction.  */
00523 #define VD VC + 1
00524 #define VS VD
00525 #define VD_MASK (0x1f << 21)
00526   { 5, 21, NULL, NULL, PPC_OPERAND_VR },
00527 
00528   /* The SIMM field in a VX form instruction.  */
00529 #define SIMM VD + 1
00530   { 5, 16, NULL, NULL, PPC_OPERAND_SIGNED},
00531 
00532   /* The UIMM field in a VX form instruction.  */
00533 #define UIMM SIMM + 1
00534   { 5, 16, NULL, NULL, 0 },
00535 
00536   /* The SHB field in a VA form instruction.  */
00537 #define SHB UIMM + 1
00538   { 4, 6, NULL, NULL, 0 },
00539 
00540   /* The other UIMM field in a EVX form instruction.  */
00541 #define EVUIMM SHB + 1
00542   { 5, 11, NULL, NULL, 0 },
00543 
00544   /* The other UIMM field in a half word EVX form instruction.  */
00545 #define EVUIMM_2 EVUIMM + 1
00546   { 32, 11, insert_ev2, extract_ev2, PPC_OPERAND_PARENS },
00547 
00548   /* The other UIMM field in a word EVX form instruction.  */
00549 #define EVUIMM_4 EVUIMM_2 + 1
00550   { 32, 11, insert_ev4, extract_ev4, PPC_OPERAND_PARENS },
00551 
00552   /* The other UIMM field in a double EVX form instruction.  */
00553 #define EVUIMM_8 EVUIMM_4 + 1
00554   { 32, 11, insert_ev8, extract_ev8, PPC_OPERAND_PARENS },
00555 
00556   /* The WS field.  */
00557 #define WS EVUIMM_8 + 1
00558 #define WS_MASK (0x7 << 11)
00559   { 3, 11, NULL, NULL, 0 },
00560 
00561   /* The L field in an mtmsrd instruction */
00562 #define MTMSRD_L WS + 1
00563   { 1, 16, NULL, NULL, PPC_OPERAND_OPTIONAL },
00564 
00565 };
00566 
00567 /* The functions used to insert and extract complicated operands.  */
00568 
00569 /* The BA field in an XL form instruction when it must be the same as
00570    the BT field in the same instruction.  This operand is marked FAKE.
00571    The insertion function just copies the BT field into the BA field,
00572    and the extraction function just checks that the fields are the
00573    same.  */
00574 
00575 static unsigned long
00576 insert_bat (unsigned long insn,
00577       long value ATTRIBUTE_UNUSED,
00578       int dialect ATTRIBUTE_UNUSED,
00579       const char **errmsg ATTRIBUTE_UNUSED)
00580 {
00581   return insn | (((insn >> 21) & 0x1f) << 16);
00582 }
00583 
00584 static long
00585 extract_bat (unsigned long insn,
00586        int dialect ATTRIBUTE_UNUSED,
00587        int *invalid)
00588 {
00589   if (((insn >> 21) & 0x1f) != ((insn >> 16) & 0x1f))
00590     *invalid = 1;
00591   return 0;
00592 }
00593 
00594 /* The BB field in an XL form instruction when it must be the same as
00595    the BA field in the same instruction.  This operand is marked FAKE.
00596    The insertion function just copies the BA field into the BB field,
00597    and the extraction function just checks that the fields are the
00598    same.  */
00599 
00600 static unsigned long
00601 insert_bba (unsigned long insn,
00602       long value ATTRIBUTE_UNUSED,
00603       int dialect ATTRIBUTE_UNUSED,
00604       const char **errmsg ATTRIBUTE_UNUSED)
00605 {
00606   return insn | (((insn >> 16) & 0x1f) << 11);
00607 }
00608 
00609 static long
00610 extract_bba (unsigned long insn,
00611        int dialect ATTRIBUTE_UNUSED,
00612        int *invalid)
00613 {
00614   if (((insn >> 16) & 0x1f) != ((insn >> 11) & 0x1f))
00615     *invalid = 1;
00616   return 0;
00617 }
00618 
00619 /* The BD field in a B form instruction.  The lower two bits are
00620    forced to zero.  */
00621 
00622 static unsigned long
00623 insert_bd (unsigned long insn,
00624      long value,
00625      int dialect ATTRIBUTE_UNUSED,
00626      const char **errmsg ATTRIBUTE_UNUSED)
00627 {
00628   return insn | (value & 0xfffc);
00629 }
00630 
00631 static long
00632 extract_bd (unsigned long insn,
00633       int dialect ATTRIBUTE_UNUSED,
00634       int *invalid ATTRIBUTE_UNUSED)
00635 {
00636   return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
00637 }
00638 
00639 /* The BD field in a B form instruction when the - modifier is used.
00640    This modifier means that the branch is not expected to be taken.
00641    For chips built to versions of the architecture prior to version 2
00642    (ie. not Power4 compatible), we set the y bit of the BO field to 1
00643    if the offset is negative.  When extracting, we require that the y
00644    bit be 1 and that the offset be positive, since if the y bit is 0
00645    we just want to print the normal form of the instruction.
00646    Power4 compatible targets use two bits, "a", and "t", instead of
00647    the "y" bit.  "at" == 00 => no hint, "at" == 01 => unpredictable,
00648    "at" == 10 => not taken, "at" == 11 => taken.  The "t" bit is 00001
00649    in BO field, the "a" bit is 00010 for branch on CR(BI) and 01000
00650    for branch on CTR.  We only handle the taken/not-taken hint here.  */
00651 
00652 static unsigned long
00653 insert_bdm (unsigned long insn,
00654       long value,
00655       int dialect,
00656       const char **errmsg ATTRIBUTE_UNUSED)
00657 {
00658   if ((dialect & PPC_OPCODE_POWER4) == 0)
00659     {
00660       if ((value & 0x8000) != 0)
00661   insn |= 1 << 21;
00662     }
00663   else
00664     {
00665       if ((insn & (0x14 << 21)) == (0x04 << 21))
00666   insn |= 0x02 << 21;
00667       else if ((insn & (0x14 << 21)) == (0x10 << 21))
00668   insn |= 0x08 << 21;
00669     }
00670   return insn | (value & 0xfffc);
00671 }
00672 
00673 static long
00674 extract_bdm (unsigned long insn,
00675        int dialect,
00676        int *invalid)
00677 {
00678   if ((dialect & PPC_OPCODE_POWER4) == 0)
00679     {
00680       if (((insn & (1 << 21)) == 0) != ((insn & (1 << 15)) == 0))
00681   *invalid = 1;
00682     }
00683   else
00684     {
00685       if ((insn & (0x17 << 21)) != (0x06 << 21)
00686     && (insn & (0x1d << 21)) != (0x18 << 21))
00687   *invalid = 1;
00688     }
00689 
00690   return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
00691 }
00692 
00693 /* The BD field in a B form instruction when the + modifier is used.
00694    This is like BDM, above, except that the branch is expected to be
00695    taken.  */
00696 
00697 static unsigned long
00698 insert_bdp (unsigned long insn,
00699       long value,
00700       int dialect,
00701       const char **errmsg ATTRIBUTE_UNUSED)
00702 {
00703   if ((dialect & PPC_OPCODE_POWER4) == 0)
00704     {
00705       if ((value & 0x8000) == 0)
00706   insn |= 1 << 21;
00707     }
00708   else
00709     {
00710       if ((insn & (0x14 << 21)) == (0x04 << 21))
00711   insn |= 0x03 << 21;
00712       else if ((insn & (0x14 << 21)) == (0x10 << 21))
00713   insn |= 0x09 << 21;
00714     }
00715   return insn | (value & 0xfffc);
00716 }
00717 
00718 static long
00719 extract_bdp (unsigned long insn,
00720        int dialect,
00721        int *invalid)
00722 {
00723   if ((dialect & PPC_OPCODE_POWER4) == 0)
00724     {
00725       if (((insn & (1 << 21)) == 0) == ((insn & (1 << 15)) == 0))
00726   *invalid = 1;
00727     }
00728   else
00729     {
00730       if ((insn & (0x17 << 21)) != (0x07 << 21)
00731     && (insn & (0x1d << 21)) != (0x19 << 21))
00732   *invalid = 1;
00733     }
00734 
00735   return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
00736 }
00737 
00738 /* Check for legal values of a BO field.  */
00739 
00740 static int
00741 valid_bo (long value, int dialect)
00742 {
00743   if ((dialect & PPC_OPCODE_POWER4) == 0)
00744     {
00745       /* Certain encodings have bits that are required to be zero.
00746    These are (z must be zero, y may be anything):
00747        001zy
00748        011zy
00749        1z00y
00750        1z01y
00751        1z1zz
00752       */
00753       switch (value & 0x14)
00754   {
00755   default:
00756   case 0:
00757     return 1;
00758   case 0x4:
00759     return (value & 0x2) == 0;
00760   case 0x10:
00761     return (value & 0x8) == 0;
00762   case 0x14:
00763     return value == 0x14;
00764   }
00765     }
00766   else
00767     {
00768       /* Certain encodings have bits that are required to be zero.
00769    These are (z must be zero, a & t may be anything):
00770        0000z
00771        0001z
00772        0100z
00773        0101z
00774        001at
00775        011at
00776        1a00t
00777        1a01t
00778        1z1zz
00779       */
00780       if ((value & 0x14) == 0)
00781   return (value & 0x1) == 0;
00782       else if ((value & 0x14) == 0x14)
00783   return value == 0x14;
00784       else
00785   return 1;
00786     }
00787 }
00788 
00789 /* The BO field in a B form instruction.  Warn about attempts to set
00790    the field to an illegal value.  */
00791 
00792 static unsigned long
00793 insert_bo (unsigned long insn,
00794      long value,
00795      int dialect,
00796      const char **errmsg)
00797 {
00798   if (!valid_bo (value, dialect))
00799     *errmsg = _("invalid conditional option");
00800   return insn | ((value & 0x1f) << 21);
00801 }
00802 
00803 static long
00804 extract_bo (unsigned long insn,
00805       int dialect,
00806       int *invalid)
00807 {
00808   long value;
00809 
00810   value = (insn >> 21) & 0x1f;
00811   if (!valid_bo (value, dialect))
00812     *invalid = 1;
00813   return value;
00814 }
00815 
00816 /* The BO field in a B form instruction when the + or - modifier is
00817    used.  This is like the BO field, but it must be even.  When
00818    extracting it, we force it to be even.  */
00819 
00820 static unsigned long
00821 insert_boe (unsigned long insn,
00822       long value,
00823       int dialect,
00824       const char **errmsg)
00825 {
00826   if (!valid_bo (value, dialect))
00827     *errmsg = _("invalid conditional option");
00828   else if ((value & 1) != 0)
00829     *errmsg = _("attempt to set y bit when using + or - modifier");
00830 
00831   return insn | ((value & 0x1f) << 21);
00832 }
00833 
00834 static long
00835 extract_boe (unsigned long insn,
00836        int dialect,
00837        int *invalid)
00838 {
00839   long value;
00840 
00841   value = (insn >> 21) & 0x1f;
00842   if (!valid_bo (value, dialect))
00843     *invalid = 1;
00844   return value & 0x1e;
00845 }
00846 
00847 /* The DQ field in a DQ form instruction.  This is like D, but the
00848    lower four bits are forced to zero. */
00849 
00850 static unsigned long
00851 insert_dq (unsigned long insn,
00852      long value,
00853      int dialect ATTRIBUTE_UNUSED,
00854      const char **errmsg)
00855 {
00856   if ((value & 0xf) != 0)
00857     *errmsg = _("offset not a multiple of 16");
00858   return insn | (value & 0xfff0);
00859 }
00860 
00861 static long
00862 extract_dq (unsigned long insn,
00863       int dialect ATTRIBUTE_UNUSED,
00864       int *invalid ATTRIBUTE_UNUSED)
00865 {
00866   return ((insn & 0xfff0) ^ 0x8000) - 0x8000;
00867 }
00868 
00869 static unsigned long
00870 insert_ev2 (unsigned long insn,
00871       long value,
00872       int dialect ATTRIBUTE_UNUSED,
00873       const char **errmsg)
00874 {
00875   if ((value & 1) != 0)
00876     *errmsg = _("offset not a multiple of 2");
00877   if ((value > 62) != 0)
00878     *errmsg = _("offset greater than 62");
00879   return insn | ((value & 0x3e) << 10);
00880 }
00881 
00882 static long
00883 extract_ev2 (unsigned long insn,
00884        int dialect ATTRIBUTE_UNUSED,
00885        int *invalid ATTRIBUTE_UNUSED)
00886 {
00887   return (insn >> 10) & 0x3e;
00888 }
00889 
00890 static unsigned long
00891 insert_ev4 (unsigned long insn,
00892       long value,
00893       int dialect ATTRIBUTE_UNUSED,
00894       const char **errmsg)
00895 {
00896   if ((value & 3) != 0)
00897     *errmsg = _("offset not a multiple of 4");
00898   if ((value > 124) != 0)
00899     *errmsg = _("offset greater than 124");
00900   return insn | ((value & 0x7c) << 9);
00901 }
00902 
00903 static long
00904 extract_ev4 (unsigned long insn,
00905        int dialect ATTRIBUTE_UNUSED,
00906        int *invalid ATTRIBUTE_UNUSED)
00907 {
00908   return (insn >> 9) & 0x7c;
00909 }
00910 
00911 static unsigned long
00912 insert_ev8 (unsigned long insn,
00913       long value,
00914       int dialect ATTRIBUTE_UNUSED,
00915       const char **errmsg)
00916 {
00917   if ((value & 7) != 0)
00918     *errmsg = _("offset not a multiple of 8");
00919   if ((value > 248) != 0)
00920     *errmsg = _("offset greater than 248");
00921   return insn | ((value & 0xf8) << 8);
00922 }
00923 
00924 static long
00925 extract_ev8 (unsigned long insn,
00926        int dialect ATTRIBUTE_UNUSED,
00927        int *invalid ATTRIBUTE_UNUSED)
00928 {
00929   return (insn >> 8) & 0xf8;
00930 }
00931 
00932 /* The DS field in a DS form instruction.  This is like D, but the
00933    lower two bits are forced to zero.  */
00934 
00935 static unsigned long
00936 insert_ds (unsigned long insn,
00937      long value,
00938      int dialect ATTRIBUTE_UNUSED,
00939      const char **errmsg)
00940 {
00941   if ((value & 3) != 0)
00942     *errmsg = _("offset not a multiple of 4");
00943   return insn | (value & 0xfffc);
00944 }
00945 
00946 static long
00947 extract_ds (unsigned long insn,
00948       int dialect ATTRIBUTE_UNUSED,
00949       int *invalid ATTRIBUTE_UNUSED)
00950 {
00951   return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
00952 }
00953 
00954 /* The DE field in a DE form instruction.  */
00955 
00956 static unsigned long
00957 insert_de (unsigned long insn,
00958      long value,
00959      int dialect ATTRIBUTE_UNUSED,
00960      const char **errmsg)
00961 {
00962   if (value > 2047 || value < -2048)
00963     *errmsg = _("offset not between -2048 and 2047");
00964   return insn | ((value << 4) & 0xfff0);
00965 }
00966 
00967 static long
00968 extract_de (unsigned long insn,
00969       int dialect ATTRIBUTE_UNUSED,
00970       int *invalid ATTRIBUTE_UNUSED)
00971 {
00972   return (insn & 0xfff0) >> 4;
00973 }
00974 
00975 /* The DES field in a DES form instruction.  */
00976 
00977 static unsigned long
00978 insert_des (unsigned long insn,
00979       long value,
00980       int dialect ATTRIBUTE_UNUSED,
00981       const char **errmsg)
00982 {
00983   if (value > 8191 || value < -8192)
00984     *errmsg = _("offset not between -8192 and 8191");
00985   else if ((value & 3) != 0)
00986     *errmsg = _("offset not a multiple of 4");
00987   return insn | ((value << 2) & 0xfff0);
00988 }
00989 
00990 static long
00991 extract_des (unsigned long insn,
00992        int dialect ATTRIBUTE_UNUSED,
00993        int *invalid ATTRIBUTE_UNUSED)
00994 {
00995   return (((insn >> 2) & 0x3ffc) ^ 0x2000) - 0x2000;
00996 }
00997 
00998 /* FXM mask in mfcr and mtcrf instructions.  */
00999 
01000 static unsigned long
01001 insert_fxm (unsigned long insn,
01002       long value,
01003       int dialect,
01004       const char **errmsg)
01005 {
01006   /* If we're handling the mfocrf and mtocrf insns ensure that exactly
01007      one bit of the mask field is set.  */
01008   if ((insn & (1 << 20)) != 0)
01009     {
01010       if (value == 0 || (value & -value) != value)
01011   {
01012     *errmsg = _("invalid mask field");
01013     value = 0;
01014   }
01015     }
01016 
01017   /* If the optional field on mfcr is missing that means we want to use
01018      the old form of the instruction that moves the whole cr.  In that
01019      case we'll have VALUE zero.  There doesn't seem to be a way to
01020      distinguish this from the case where someone writes mfcr %r3,0.  */
01021   else if (value == 0)
01022     ;
01023 
01024   /* If only one bit of the FXM field is set, we can use the new form
01025      of the instruction, which is faster.  Unlike the Power4 branch hint
01026      encoding, this is not backward compatible.  Do not generate the
01027      new form unless -mpower4 has been given, or -many and the two
01028      operand form of mfcr was used.  */
01029   else if ((value & -value) == value
01030      && ((dialect & PPC_OPCODE_POWER4) != 0
01031          || ((dialect & PPC_OPCODE_ANY) != 0
01032        && (insn & (0x3ff << 1)) == 19 << 1)))
01033     insn |= 1 << 20;
01034 
01035   /* Any other value on mfcr is an error.  */
01036   else if ((insn & (0x3ff << 1)) == 19 << 1)
01037     {
01038       *errmsg = _("ignoring invalid mfcr mask");
01039       value = 0;
01040     }
01041 
01042   return insn | ((value & 0xff) << 12);
01043 }
01044 
01045 static long
01046 extract_fxm (unsigned long insn,
01047        int dialect ATTRIBUTE_UNUSED,
01048        int *invalid)
01049 {
01050   long mask = (insn >> 12) & 0xff;
01051 
01052   /* Is this a Power4 insn?  */
01053   if ((insn & (1 << 20)) != 0)
01054     {
01055       /* Exactly one bit of MASK should be set.  */
01056       if (mask == 0 || (mask & -mask) != mask)
01057   *invalid = 1;
01058     }
01059 
01060   /* Check that non-power4 form of mfcr has a zero MASK.  */
01061   else if ((insn & (0x3ff << 1)) == 19 << 1)
01062     {
01063       if (mask != 0)
01064   *invalid = 1;
01065     }
01066 
01067   return mask;
01068 }
01069 
01070 /* The LI field in an I form instruction.  The lower two bits are
01071    forced to zero.  */
01072 
01073 static unsigned long
01074 insert_li (unsigned long insn,
01075      long value,
01076      int dialect ATTRIBUTE_UNUSED,
01077      const char **errmsg)
01078 {
01079   if ((value & 3) != 0)
01080     *errmsg = _("ignoring least significant bits in branch offset");
01081   return insn | (value & 0x3fffffc);
01082 }
01083 
01084 static long
01085 extract_li (unsigned long insn,
01086       int dialect ATTRIBUTE_UNUSED,
01087       int *invalid ATTRIBUTE_UNUSED)
01088 {
01089   return ((insn & 0x3fffffc) ^ 0x2000000) - 0x2000000;
01090 }
01091 
01092 /* The MB and ME fields in an M form instruction expressed as a single
01093    operand which is itself a bitmask.  The extraction function always
01094    marks it as invalid, since we never want to recognize an
01095    instruction which uses a field of this type.  */
01096 
01097 static unsigned long
01098 insert_mbe (unsigned long insn,
01099       long value,
01100       int dialect ATTRIBUTE_UNUSED,
01101       const char **errmsg)
01102 {
01103   unsigned long uval, mask;
01104   int mb, me, mx, count, last;
01105 
01106   uval = value;
01107 
01108   if (uval == 0)
01109     {
01110       *errmsg = _("illegal bitmask");
01111       return insn;
01112     }
01113 
01114   mb = 0;
01115   me = 32;
01116   if ((uval & 1) != 0)
01117     last = 1;
01118   else
01119     last = 0;
01120   count = 0;
01121 
01122   /* mb: location of last 0->1 transition */
01123   /* me: location of last 1->0 transition */
01124   /* count: # transitions */
01125 
01126   for (mx = 0, mask = 1L << 31; mx < 32; ++mx, mask >>= 1)
01127     {
01128       if ((uval & mask) && !last)
01129   {
01130     ++count;
01131     mb = mx;
01132     last = 1;
01133   }
01134       else if (!(uval & mask) && last)
01135   {
01136     ++count;
01137     me = mx;
01138     last = 0;
01139   }
01140     }
01141   if (me == 0)
01142     me = 32;
01143 
01144   if (count != 2 && (count != 0 || ! last))
01145     *errmsg = _("illegal bitmask");
01146 
01147   return insn | (mb << 6) | ((me - 1) << 1);
01148 }
01149 
01150 static long
01151 extract_mbe (unsigned long insn,
01152        int dialect ATTRIBUTE_UNUSED,
01153        int *invalid)
01154 {
01155   long ret;
01156   int mb, me;
01157   int i;
01158 
01159   *invalid = 1;
01160 
01161   mb = (insn >> 6) & 0x1f;
01162   me = (insn >> 1) & 0x1f;
01163   if (mb < me + 1)
01164     {
01165       ret = 0;
01166       for (i = mb; i <= me; i++)
01167   ret |= 1L << (31 - i);
01168     }
01169   else if (mb == me + 1)
01170     ret = ~0;
01171   else /* (mb > me + 1) */
01172     {
01173       ret = ~0;
01174       for (i = me + 1; i < mb; i++)
01175   ret &= ~(1L << (31 - i));
01176     }
01177   return ret;
01178 }
01179 
01180 /* The MB or ME field in an MD or MDS form instruction.  The high bit
01181    is wrapped to the low end.  */
01182 
01183 static unsigned long
01184 insert_mb6 (unsigned long insn,
01185       long value,
01186       int dialect ATTRIBUTE_UNUSED,
01187       const char **errmsg ATTRIBUTE_UNUSED)
01188 {
01189   return insn | ((value & 0x1f) << 6) | (value & 0x20);
01190 }
01191 
01192 static long
01193 extract_mb6 (unsigned long insn,
01194        int dialect ATTRIBUTE_UNUSED,
01195        int *invalid ATTRIBUTE_UNUSED)
01196 {
01197   return ((insn >> 6) & 0x1f) | (insn & 0x20);
01198 }
01199 
01200 /* The NB field in an X form instruction.  The value 32 is stored as
01201    0.  */
01202 
01203 static unsigned long
01204 insert_nb (unsigned long insn,
01205      long value,
01206      int dialect ATTRIBUTE_UNUSED,
01207      const char **errmsg)
01208 {
01209   if (value < 0 || value > 32)
01210     *errmsg = _("value out of range");
01211   if (value == 32)
01212     value = 0;
01213   return insn | ((value & 0x1f) << 11);
01214 }
01215 
01216 static long
01217 extract_nb (unsigned long insn,
01218       int dialect ATTRIBUTE_UNUSED,
01219       int *invalid ATTRIBUTE_UNUSED)
01220 {
01221   long ret;
01222 
01223   ret = (insn >> 11) & 0x1f;
01224   if (ret == 0)
01225     ret = 32;
01226   return ret;
01227 }
01228 
01229 /* The NSI field in a D form instruction.  This is the same as the SI
01230    field, only negated.  The extraction function always marks it as
01231    invalid, since we never want to recognize an instruction which uses
01232    a field of this type.  */
01233 
01234 static unsigned long
01235 insert_nsi (unsigned long insn,
01236       long value,
01237       int dialect ATTRIBUTE_UNUSED,
01238       const char **errmsg ATTRIBUTE_UNUSED)
01239 {
01240   return insn | (-value & 0xffff);
01241 }
01242 
01243 static long
01244 extract_nsi (unsigned long insn,
01245        int dialect ATTRIBUTE_UNUSED,
01246        int *invalid)
01247 {
01248   *invalid = 1;
01249   return -(((insn & 0xffff) ^ 0x8000) - 0x8000);
01250 }
01251 
01252 /* The RA field in a D or X form instruction which is an updating
01253    load, which means that the RA field may not be zero and may not
01254    equal the RT field.  */
01255 
01256 static unsigned long
01257 insert_ral (unsigned long insn,
01258       long value,
01259       int dialect ATTRIBUTE_UNUSED,
01260       const char **errmsg)
01261 {
01262   if (value == 0
01263       || (unsigned long) value == ((insn >> 21) & 0x1f))
01264     *errmsg = "invalid register operand when updating";
01265   return insn | ((value & 0x1f) << 16);
01266 }
01267 
01268 /* The RA field in an lmw instruction, which has special value
01269    restrictions.  */
01270 
01271 static unsigned long
01272 insert_ram (unsigned long insn,
01273       long value,
01274       int dialect ATTRIBUTE_UNUSED,
01275       const char **errmsg)
01276 {
01277   if ((unsigned long) value >= ((insn >> 21) & 0x1f))
01278     *errmsg = _("index register in load range");
01279   return insn | ((value & 0x1f) << 16);
01280 }
01281 
01282 /* The RA field in the DQ form lq instruction, which has special
01283    value restrictions.  */
01284 
01285 static unsigned long
01286 insert_raq (unsigned long insn,
01287       long value,
01288       int dialect ATTRIBUTE_UNUSED,
01289       const char **errmsg)
01290 {
01291   long rtvalue = (insn & RT_MASK) >> 21;
01292 
01293   if (value == rtvalue)
01294     *errmsg = _("source and target register operands must be different");
01295   return insn | ((value & 0x1f) << 16);
01296 }
01297 
01298 /* The RA field in a D or X form instruction which is an updating
01299    store or an updating floating point load, which means that the RA
01300    field may not be zero.  */
01301 
01302 static unsigned long
01303 insert_ras (unsigned long insn,
01304       long value,
01305       int dialect ATTRIBUTE_UNUSED,
01306       const char **errmsg)
01307 {
01308   if (value == 0)
01309     *errmsg = _("invalid register operand when updating");
01310   return insn | ((value & 0x1f) << 16);
01311 }
01312 
01313 /* The RB field in an X form instruction when it must be the same as
01314    the RS field in the instruction.  This is used for extended
01315    mnemonics like mr.  This operand is marked FAKE.  The insertion
01316    function just copies the BT field into the BA field, and the
01317    extraction function just checks that the fields are the same.  */
01318 
01319 static unsigned long
01320 insert_rbs (unsigned long insn,
01321       long value ATTRIBUTE_UNUSED,
01322       int dialect ATTRIBUTE_UNUSED,
01323       const char **errmsg ATTRIBUTE_UNUSED)
01324 {
01325   return insn | (((insn >> 21) & 0x1f) << 11);
01326 }
01327 
01328 static long
01329 extract_rbs (unsigned long insn,
01330        int dialect ATTRIBUTE_UNUSED,
01331        int *invalid)
01332 {
01333   if (((insn >> 21) & 0x1f) != ((insn >> 11) & 0x1f))
01334     *invalid = 1;
01335   return 0;
01336 }
01337 
01338 /* The RT field of the DQ form lq instruction, which has special
01339    value restrictions.  */
01340 
01341 static unsigned long
01342 insert_rtq (unsigned long insn,
01343       long value,
01344       int dialect ATTRIBUTE_UNUSED,
01345       const char **errmsg)
01346 {
01347   if ((value & 1) != 0)
01348     *errmsg = _("target register operand must be even");
01349   return insn | ((value & 0x1f) << 21);
01350 }
01351 
01352 /* The RS field of the DS form stq instruction, which has special
01353    value restrictions.  */
01354 
01355 static unsigned long
01356 insert_rsq (unsigned long insn,
01357       long value ATTRIBUTE_UNUSED,
01358       int dialect ATTRIBUTE_UNUSED,
01359       const char **errmsg)
01360 {
01361   if ((value & 1) != 0)
01362     *errmsg = _("source register operand must be even");
01363   return insn | ((value & 0x1f) << 21);
01364 }
01365 
01366 /* The SH field in an MD form instruction.  This is split.  */
01367 
01368 static unsigned long
01369 insert_sh6 (unsigned long insn,
01370       long value,
01371       int dialect ATTRIBUTE_UNUSED,
01372       const char **errmsg ATTRIBUTE_UNUSED)
01373 {
01374   return insn | ((value & 0x1f) << 11) | ((value & 0x20) >> 4);
01375 }
01376 
01377 static long
01378 extract_sh6 (unsigned long insn,
01379        int dialect ATTRIBUTE_UNUSED,
01380        int *invalid ATTRIBUTE_UNUSED)
01381 {
01382   return ((insn >> 11) & 0x1f) | ((insn << 4) & 0x20);
01383 }
01384 
01385 /* The SPR field in an XFX form instruction.  This is flipped--the
01386    lower 5 bits are stored in the upper 5 and vice- versa.  */
01387 
01388 static unsigned long
01389 insert_spr (unsigned long insn,
01390       long value,
01391       int dialect ATTRIBUTE_UNUSED,
01392       const char **errmsg ATTRIBUTE_UNUSED)
01393 {
01394   return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6);
01395 }
01396 
01397 static long
01398 extract_spr (unsigned long insn,
01399        int dialect ATTRIBUTE_UNUSED,
01400        int *invalid ATTRIBUTE_UNUSED)
01401 {
01402   return ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
01403 }
01404 
01405 /* The TBR field in an XFX instruction.  This is just like SPR, but it
01406    is optional.  When TBR is omitted, it must be inserted as 268 (the
01407    magic number of the TB register).  These functions treat 0
01408    (indicating an omitted optional operand) as 268.  This means that
01409    ``mftb 4,0'' is not handled correctly.  This does not matter very
01410    much, since the architecture manual does not define mftb as
01411    accepting any values other than 268 or 269.  */
01412 
01413 #define TB (268)
01414 
01415 static unsigned long
01416 insert_tbr (unsigned long insn,
01417       long value,
01418       int dialect ATTRIBUTE_UNUSED,
01419       const char **errmsg ATTRIBUTE_UNUSED)
01420 {
01421   if (value == 0)
01422     value = TB;
01423   return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6);
01424 }
01425 
01426 static long
01427 extract_tbr (unsigned long insn,
01428        int dialect ATTRIBUTE_UNUSED,
01429        int *invalid ATTRIBUTE_UNUSED)
01430 {
01431   long ret;
01432 
01433   ret = ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
01434   if (ret == TB)
01435     ret = 0;
01436   return ret;
01437 }
01438 
01439 /* Macros used to form opcodes.  */
01440 
01441 /* The main opcode.  */
01442 #define OP(x) ((((unsigned long)(x)) & 0x3f) << 26)
01443 #define OP_MASK OP (0x3f)
01444 
01445 /* The main opcode combined with a trap code in the TO field of a D
01446    form instruction.  Used for extended mnemonics for the trap
01447    instructions.  */
01448 #define OPTO(x,to) (OP (x) | ((((unsigned long)(to)) & 0x1f) << 21))
01449 #define OPTO_MASK (OP_MASK | TO_MASK)
01450 
01451 /* The main opcode combined with a comparison size bit in the L field
01452    of a D form or X form instruction.  Used for extended mnemonics for
01453    the comparison instructions.  */
01454 #define OPL(x,l) (OP (x) | ((((unsigned long)(l)) & 1) << 21))
01455 #define OPL_MASK OPL (0x3f,1)
01456 
01457 /* An A form instruction.  */
01458 #define A(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1) | (((unsigned long)(rc)) & 1))
01459 #define A_MASK A (0x3f, 0x1f, 1)
01460 
01461 /* An A_MASK with the FRB field fixed.  */
01462 #define AFRB_MASK (A_MASK | FRB_MASK)
01463 
01464 /* An A_MASK with the FRC field fixed.  */
01465 #define AFRC_MASK (A_MASK | FRC_MASK)
01466 
01467 /* An A_MASK with the FRA and FRC fields fixed.  */
01468 #define AFRAFRC_MASK (A_MASK | FRA_MASK | FRC_MASK)
01469 
01470 /* A B form instruction.  */
01471 #define B(op, aa, lk) (OP (op) | ((((unsigned long)(aa)) & 1) << 1) | ((lk) & 1))
01472 #define B_MASK B (0x3f, 1, 1)
01473 
01474 /* A B form instruction setting the BO field.  */
01475 #define BBO(op, bo, aa, lk) (B ((op), (aa), (lk)) | ((((unsigned long)(bo)) & 0x1f) << 21))
01476 #define BBO_MASK BBO (0x3f, 0x1f, 1, 1)
01477 
01478 /* A BBO_MASK with the y bit of the BO field removed.  This permits
01479    matching a conditional branch regardless of the setting of the y
01480    bit.  Similarly for the 'at' bits used for power4 branch hints.  */
01481 #define Y_MASK   (((unsigned long) 1) << 21)
01482 #define AT1_MASK (((unsigned long) 3) << 21)
01483 #define AT2_MASK (((unsigned long) 9) << 21)
01484 #define BBOY_MASK  (BBO_MASK &~ Y_MASK)
01485 #define BBOAT_MASK (BBO_MASK &~ AT1_MASK)
01486 
01487 /* A B form instruction setting the BO field and the condition bits of
01488    the BI field.  */
01489 #define BBOCB(op, bo, cb, aa, lk) \
01490   (BBO ((op), (bo), (aa), (lk)) | ((((unsigned long)(cb)) & 0x3) << 16))
01491 #define BBOCB_MASK BBOCB (0x3f, 0x1f, 0x3, 1, 1)
01492 
01493 /* A BBOCB_MASK with the y bit of the BO field removed.  */
01494 #define BBOYCB_MASK (BBOCB_MASK &~ Y_MASK)
01495 #define BBOATCB_MASK (BBOCB_MASK &~ AT1_MASK)
01496 #define BBOAT2CB_MASK (BBOCB_MASK &~ AT2_MASK)
01497 
01498 /* A BBOYCB_MASK in which the BI field is fixed.  */
01499 #define BBOYBI_MASK (BBOYCB_MASK | BI_MASK)
01500 #define BBOATBI_MASK (BBOAT2CB_MASK | BI_MASK)
01501 
01502 /* An Context form instruction.  */
01503 #define CTX(op, xop)   (OP (op) | (((unsigned long)(xop)) & 0x7))
01504 #define CTX_MASK CTX(0x3f, 0x7)
01505 
01506 /* An User Context form instruction.  */
01507 #define UCTX(op, xop)  (OP (op) | (((unsigned long)(xop)) & 0x1f))
01508 #define UCTX_MASK UCTX(0x3f, 0x1f)
01509 
01510 /* The main opcode mask with the RA field clear.  */
01511 #define DRA_MASK (OP_MASK | RA_MASK)
01512 
01513 /* A DS form instruction.  */
01514 #define DSO(op, xop) (OP (op) | ((xop) & 0x3))
01515 #define DS_MASK DSO (0x3f, 3)
01516 
01517 /* A DE form instruction.  */
01518 #define DEO(op, xop) (OP (op) | ((xop) & 0xf))
01519 #define DE_MASK DEO (0x3e, 0xf)
01520 
01521 /* An EVSEL form instruction.  */
01522 #define EVSEL(op, xop) (OP (op) | (((unsigned long)(xop)) & 0xff) << 3)
01523 #define EVSEL_MASK EVSEL(0x3f, 0xff)
01524 
01525 /* An M form instruction.  */
01526 #define M(op, rc) (OP (op) | ((rc) & 1))
01527 #define M_MASK M (0x3f, 1)
01528 
01529 /* An M form instruction with the ME field specified.  */
01530 #define MME(op, me, rc) (M ((op), (rc)) | ((((unsigned long)(me)) & 0x1f) << 1))
01531 
01532 /* An M_MASK with the MB and ME fields fixed.  */
01533 #define MMBME_MASK (M_MASK | MB_MASK | ME_MASK)
01534 
01535 /* An M_MASK with the SH and ME fields fixed.  */
01536 #define MSHME_MASK (M_MASK | SH_MASK | ME_MASK)
01537 
01538 /* An MD form instruction.  */
01539 #define MD(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x7) << 2) | ((rc) & 1))
01540 #define MD_MASK MD (0x3f, 0x7, 1)
01541 
01542 /* An MD_MASK with the MB field fixed.  */
01543 #define MDMB_MASK (MD_MASK | MB6_MASK)
01544 
01545 /* An MD_MASK with the SH field fixed.  */
01546 #define MDSH_MASK (MD_MASK | SH6_MASK)
01547 
01548 /* An MDS form instruction.  */
01549 #define MDS(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0xf) << 1) | ((rc) & 1))
01550 #define MDS_MASK MDS (0x3f, 0xf, 1)
01551 
01552 /* An MDS_MASK with the MB field fixed.  */
01553 #define MDSMB_MASK (MDS_MASK | MB6_MASK)
01554 
01555 /* An SC form instruction.  */
01556 #define SC(op, sa, lk) (OP (op) | ((((unsigned long)(sa)) & 1) << 1) | ((lk) & 1))
01557 #define SC_MASK (OP_MASK | (((unsigned long)0x3ff) << 16) | (((unsigned long)1) << 1) | 1)
01558 
01559 /* An VX form instruction.  */
01560 #define VX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7ff))
01561 
01562 /* The mask for an VX form instruction.  */
01563 #define VX_MASK VX(0x3f, 0x7ff)
01564 
01565 /* An VA form instruction.  */
01566 #define VXA(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x03f))
01567 
01568 /* The mask for an VA form instruction.  */
01569 #define VXA_MASK VXA(0x3f, 0x3f)
01570 
01571 /* An VXR form instruction.  */
01572 #define VXR(op, xop, rc) (OP (op) | (((rc) & 1) << 10) | (((unsigned long)(xop)) & 0x3ff))
01573 
01574 /* The mask for a VXR form instruction.  */
01575 #define VXR_MASK VXR(0x3f, 0x3ff, 1)
01576 
01577 /* An X form instruction.  */
01578 #define X(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))
01579 
01580 /* An X form instruction with the RC bit specified.  */
01581 #define XRC(op, xop, rc) (X ((op), (xop)) | ((rc) & 1))
01582 
01583 /* The mask for an X form instruction.  */
01584 #define X_MASK XRC (0x3f, 0x3ff, 1)
01585 
01586 /* An X_MASK with the RA field fixed.  */
01587 #define XRA_MASK (X_MASK | RA_MASK)
01588 
01589 /* An X_MASK with the RB field fixed.  */
01590 #define XRB_MASK (X_MASK | RB_MASK)
01591 
01592 /* An X_MASK with the RT field fixed.  */
01593 #define XRT_MASK (X_MASK | RT_MASK)
01594 
01595 /* An X_MASK with the RA and RB fields fixed.  */
01596 #define XRARB_MASK (X_MASK | RA_MASK | RB_MASK)
01597 
01598 /* An XRARB_MASK, but with the L bit clear.  */
01599 #define XRLARB_MASK (XRARB_MASK & ~((unsigned long) 1 << 16))
01600 
01601 /* An X_MASK with the RT and RA fields fixed.  */
01602 #define XRTRA_MASK (X_MASK | RT_MASK | RA_MASK)
01603 
01604 /* An XRTRA_MASK, but with L bit clear.  */
01605 #define XRTLRA_MASK (XRTRA_MASK & ~((unsigned long) 1 << 21))
01606 
01607 /* An X form instruction with the L bit specified.  */
01608 #define XOPL(op, xop, l) (X ((op), (xop)) | ((((unsigned long)(l)) & 1) << 21))
01609 
01610 /* The mask for an X form comparison instruction.  */
01611 #define XCMP_MASK (X_MASK | (((unsigned long)1) << 22))
01612 
01613 /* The mask for an X form comparison instruction with the L field
01614    fixed.  */
01615 #define XCMPL_MASK (XCMP_MASK | (((unsigned long)1) << 21))
01616 
01617 /* An X form trap instruction with the TO field specified.  */
01618 #define XTO(op, xop, to) (X ((op), (xop)) | ((((unsigned long)(to)) & 0x1f) << 21))
01619 #define XTO_MASK (X_MASK | TO_MASK)
01620 
01621 /* An X form tlb instruction with the SH field specified.  */
01622 #define XTLB(op, xop, sh) (X ((op), (xop)) | ((((unsigned long)(sh)) & 0x1f) << 11))
01623 #define XTLB_MASK (X_MASK | SH_MASK)
01624 
01625 /* An X form sync instruction.  */
01626 #define XSYNC(op, xop, l) (X ((op), (xop)) | ((((unsigned long)(l)) & 3) << 21))
01627 
01628 /* An X form sync instruction with everything filled in except the LS field.  */
01629 #define XSYNC_MASK (0xff9fffff)
01630 
01631 /* An X form AltiVec dss instruction.  */
01632 #define XDSS(op, xop, a) (X ((op), (xop)) | ((((unsigned long)(a)) & 1) << 25))
01633 #define XDSS_MASK XDSS(0x3f, 0x3ff, 1)
01634 
01635 /* An XFL form instruction.  */
01636 #define XFL(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1) | (((unsigned long)(rc)) & 1))
01637 #define XFL_MASK (XFL (0x3f, 0x3ff, 1) | (((unsigned long)1) << 25) | (((unsigned long)1) << 16))
01638 
01639 /* An X form isel instruction.  */
01640 #define XISEL(op, xop)  (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1))
01641 #define XISEL_MASK      XISEL(0x3f, 0x1f)
01642 
01643 /* An XL form instruction with the LK field set to 0.  */
01644 #define XL(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))
01645 
01646 /* An XL form instruction which uses the LK field.  */
01647 #define XLLK(op, xop, lk) (XL ((op), (xop)) | ((lk) & 1))
01648 
01649 /* The mask for an XL form instruction.  */
01650 #define XL_MASK XLLK (0x3f, 0x3ff, 1)
01651 
01652 /* An XL form instruction which explicitly sets the BO field.  */
01653 #define XLO(op, bo, xop, lk) \
01654   (XLLK ((op), (xop), (lk)) | ((((unsigned long)(bo)) & 0x1f) << 21))
01655 #define XLO_MASK (XL_MASK | BO_MASK)
01656 
01657 /* An XL form instruction which explicitly sets the y bit of the BO
01658    field.  */
01659 #define XLYLK(op, xop, y, lk) (XLLK ((op), (xop), (lk)) | ((((unsigned long)(y)) & 1) << 21))
01660 #define XLYLK_MASK (XL_MASK | Y_MASK)
01661 
01662 /* An XL form instruction which sets the BO field and the condition
01663    bits of the BI field.  */
01664 #define XLOCB(op, bo, cb, xop, lk) \
01665   (XLO ((op), (bo), (xop), (lk)) | ((((unsigned long)(cb)) & 3) << 16))
01666 #define XLOCB_MASK XLOCB (0x3f, 0x1f, 0x3, 0x3ff, 1)
01667 
01668 /* An XL_MASK or XLYLK_MASK or XLOCB_MASK with the BB field fixed.  */
01669 #define XLBB_MASK (XL_MASK | BB_MASK)
01670 #define XLYBB_MASK (XLYLK_MASK | BB_MASK)
01671 #define XLBOCBBB_MASK (XLOCB_MASK | BB_MASK)
01672 
01673 /* A mask for branch instructions using the BH field.  */
01674 #define XLBH_MASK (XL_MASK | (0x1c << 11))
01675 
01676 /* An XL_MASK with the BO and BB fields fixed.  */
01677 #define XLBOBB_MASK (XL_MASK | BO_MASK | BB_MASK)
01678 
01679 /* An XL_MASK with the BO, BI and BB fields fixed.  */
01680 #define XLBOBIBB_MASK (XL_MASK | BO_MASK | BI_MASK | BB_MASK)
01681 
01682 /* An XO form instruction.  */
01683 #define XO(op, xop, oe, rc) \
01684   (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 1) | ((((unsigned long)(oe)) & 1) << 10) | (((unsigned long)(rc)) & 1))
01685 #define XO_MASK XO (0x3f, 0x1ff, 1, 1)
01686 
01687 /* An XO_MASK with the RB field fixed.  */
01688 #define XORB_MASK (XO_MASK | RB_MASK)
01689 
01690 /* An XS form instruction.  */
01691 #define XS(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 2) | (((unsigned long)(rc)) & 1))
01692 #define XS_MASK XS (0x3f, 0x1ff, 1)
01693 
01694 /* A mask for the FXM version of an XFX form instruction.  */
01695 #define XFXFXM_MASK (X_MASK | (1 << 11) | (1 << 20))
01696 
01697 /* An XFX form instruction with the FXM field filled in.  */
01698 #define XFXM(op, xop, fxm, p4) \
01699   (X ((op), (xop)) | ((((unsigned long)(fxm)) & 0xff) << 12) \
01700    | ((unsigned long)(p4) << 20))
01701 
01702 /* An XFX form instruction with the SPR field filled in.  */
01703 #define XSPR(op, xop, spr) \
01704   (X ((op), (xop)) | ((((unsigned long)(spr)) & 0x1f) << 16) | ((((unsigned long)(spr)) & 0x3e0) << 6))
01705 #define XSPR_MASK (X_MASK | SPR_MASK)
01706 
01707 /* An XFX form instruction with the SPR field filled in except for the
01708    SPRBAT field.  */
01709 #define XSPRBAT_MASK (XSPR_MASK &~ SPRBAT_MASK)
01710 
01711 /* An XFX form instruction with the SPR field filled in except for the
01712    SPRG field.  */
01713 #define XSPRG_MASK (XSPR_MASK &~ SPRG_MASK)
01714 
01715 /* An X form instruction with everything filled in except the E field.  */
01716 #define XE_MASK (0xffff7fff)
01717 
01718 /* An X form user context instruction.  */
01719 #define XUC(op, xop)  (OP (op) | (((unsigned long)(xop)) & 0x1f))
01720 #define XUC_MASK      XUC(0x3f, 0x1f)
01721 
01722 /* The BO encodings used in extended conditional branch mnemonics.  */
01723 #define BODNZF  (0x0)
01724 #define BODNZFP (0x1)
01725 #define BODZF (0x2)
01726 #define BODZFP  (0x3)
01727 #define BODNZT  (0x8)
01728 #define BODNZTP (0x9)
01729 #define BODZT (0xa)
01730 #define BODZTP  (0xb)
01731 
01732 #define BOF (0x4)
01733 #define BOFP  (0x5)
01734 #define BOFM4 (0x6)
01735 #define BOFP4 (0x7)
01736 #define BOT (0xc)
01737 #define BOTP  (0xd)
01738 #define BOTM4 (0xe)
01739 #define BOTP4 (0xf)
01740 
01741 #define BODNZ (0x10)
01742 #define BODNZP  (0x11)
01743 #define BODZ  (0x12)
01744 #define BODZP (0x13)
01745 #define BODNZM4 (0x18)
01746 #define BODNZP4 (0x19)
01747 #define BODZM4  (0x1a)
01748 #define BODZP4  (0x1b)
01749 
01750 #define BOU (0x14)
01751 
01752 /* The BI condition bit encodings used in extended conditional branch
01753    mnemonics.  */
01754 #define CBLT  (0)
01755 #define CBGT  (1)
01756 #define CBEQ  (2)
01757 #define CBSO  (3)
01758 
01759 /* The TO encodings used in extended trap mnemonics.  */
01760 #define TOLGT (0x1)
01761 #define TOLLT (0x2)
01762 #define TOEQ  (0x4)
01763 #define TOLGE (0x5)
01764 #define TOLNL (0x5)
01765 #define TOLLE (0x6)
01766 #define TOLNG (0x6)
01767 #define TOGT  (0x8)
01768 #define TOGE  (0xc)
01769 #define TONL  (0xc)
01770 #define TOLT  (0x10)
01771 #define TOLE  (0x14)
01772 #define TONG  (0x14)
01773 #define TONE  (0x18)
01774 #define TOU (0x1f)
01775 
01776 /* Smaller names for the flags so each entry in the opcodes table will
01777    fit on a single line.  */
01778 #undef  PPC
01779 #define PPC     PPC_OPCODE_PPC
01780 #define PPCCOM  PPC_OPCODE_PPC | PPC_OPCODE_COMMON
01781 #define NOPOWER4 PPC_OPCODE_NOPOWER4 | PPCCOM
01782 #define POWER4  PPC_OPCODE_POWER4
01783 #define PPC32   PPC_OPCODE_32 | PPC_OPCODE_PPC
01784 #define PPC64   PPC_OPCODE_64 | PPC_OPCODE_PPC
01785 #define PPC403  PPC_OPCODE_403
01786 #define PPC405  PPC403
01787 #define PPC440  PPC_OPCODE_440
01788 #define PPC750  PPC
01789 #define PPC860  PPC
01790 #define PPCVEC  PPC_OPCODE_ALTIVEC
01791 #define POWER   PPC_OPCODE_POWER
01792 #define POWER2  PPC_OPCODE_POWER | PPC_OPCODE_POWER2
01793 #define PPCPWR2 PPC_OPCODE_PPC | PPC_OPCODE_POWER | PPC_OPCODE_POWER2
01794 #define POWER32 PPC_OPCODE_POWER | PPC_OPCODE_32
01795 #define COM     PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON
01796 #define COM32   PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_32
01797 #define M601    PPC_OPCODE_POWER | PPC_OPCODE_601
01798 #define PWRCOM  PPC_OPCODE_POWER | PPC_OPCODE_601 | PPC_OPCODE_COMMON
01799 #define MFDEC1  PPC_OPCODE_POWER
01800 #define MFDEC2  PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE
01801 #define BOOKE PPC_OPCODE_BOOKE
01802 #define BOOKE64 PPC_OPCODE_BOOKE64
01803 #define CLASSIC PPC_OPCODE_CLASSIC
01804 #define PPCSPE  PPC_OPCODE_SPE
01805 #define PPCISEL PPC_OPCODE_ISEL
01806 #define PPCEFS  PPC_OPCODE_EFS
01807 #define PPCBRLK PPC_OPCODE_BRLOCK
01808 #define PPCPMR  PPC_OPCODE_PMR
01809 #define PPCCHLK PPC_OPCODE_CACHELCK
01810 #define PPCCHLK64 PPC_OPCODE_CACHELCK | PPC_OPCODE_BOOKE64
01811 #define PPCRFMCI  PPC_OPCODE_RFMCI
01812 
01813 /* The opcode table.
01814 
01815    The format of the opcode table is:
01816 
01817    NAME      OPCODE MASK    FLAGS   { OPERANDS }
01818 
01819    NAME is the name of the instruction.
01820    OPCODE is the instruction opcode.
01821    MASK is the opcode mask; this is used to tell the disassembler
01822      which bits in the actual opcode must match OPCODE.
01823    FLAGS are flags indicated what processors support the instruction.
01824    OPERANDS is the list of operands.
01825 
01826    The disassembler reads the table in order and prints the first
01827    instruction which matches, so this table is sorted to put more
01828    specific instructions before more general instructions.  It is also
01829    sorted by major opcode.  */
01830 
01831 const struct powerpc_opcode powerpc_opcodes[] = {
01832 { "attn",    X(0,256), X_MASK,    POWER4,   { 0 } },
01833 { "tdlgti",  OPTO(2,TOLGT), OPTO_MASK,  PPC64,    { RA, SI } },
01834 { "tdllti",  OPTO(2,TOLLT), OPTO_MASK,  PPC64,    { RA, SI } },
01835 { "tdeqi",   OPTO(2,TOEQ), OPTO_MASK, PPC64,    { RA, SI } },
01836 { "tdlgei",  OPTO(2,TOLGE), OPTO_MASK,  PPC64,    { RA, SI } },
01837 { "tdlnli",  OPTO(2,TOLNL), OPTO_MASK,  PPC64,    { RA, SI } },
01838 { "tdllei",  OPTO(2,TOLLE), OPTO_MASK,  PPC64,    { RA, SI } },
01839 { "tdlngi",  OPTO(2,TOLNG), OPTO_MASK,  PPC64,    { RA, SI } },
01840 { "tdgti",   OPTO(2,TOGT), OPTO_MASK, PPC64,    { RA, SI } },
01841 { "tdgei",   OPTO(2,TOGE), OPTO_MASK, PPC64,    { RA, SI } },
01842 { "tdnli",   OPTO(2,TONL), OPTO_MASK, PPC64,    { RA, SI } },
01843 { "tdlti",   OPTO(2,TOLT), OPTO_MASK, PPC64,    { RA, SI } },
01844 { "tdlei",   OPTO(2,TOLE), OPTO_MASK, PPC64,    { RA, SI } },
01845 { "tdngi",   OPTO(2,TONG), OPTO_MASK, PPC64,    { RA, SI } },
01846 { "tdnei",   OPTO(2,TONE), OPTO_MASK, PPC64,    { RA, SI } },
01847 { "tdi",     OP(2), OP_MASK,  PPC64,    { TO, RA, SI } },
01848 
01849 { "twlgti",  OPTO(3,TOLGT), OPTO_MASK,  PPCCOM,   { RA, SI } },
01850 { "tlgti",   OPTO(3,TOLGT), OPTO_MASK,  PWRCOM,   { RA, SI } },
01851 { "twllti",  OPTO(3,TOLLT), OPTO_MASK,  PPCCOM,   { RA, SI } },
01852 { "tllti",   OPTO(3,TOLLT), OPTO_MASK,  PWRCOM,   { RA, SI } },
01853 { "tweqi",   OPTO(3,TOEQ), OPTO_MASK, PPCCOM,   { RA, SI } },
01854 { "teqi",    OPTO(3,TOEQ), OPTO_MASK, PWRCOM,   { RA, SI } },
01855 { "twlgei",  OPTO(3,TOLGE), OPTO_MASK,  PPCCOM,   { RA, SI } },
01856 { "tlgei",   OPTO(3,TOLGE), OPTO_MASK,  PWRCOM,   { RA, SI } },
01857 { "twlnli",  OPTO(3,TOLNL), OPTO_MASK,  PPCCOM,   { RA, SI } },
01858 { "tlnli",   OPTO(3,TOLNL), OPTO_MASK,  PWRCOM,   { RA, SI } },
01859 { "twllei",  OPTO(3,TOLLE), OPTO_MASK,  PPCCOM,   { RA, SI } },
01860 { "tllei",   OPTO(3,TOLLE), OPTO_MASK,  PWRCOM,   { RA, SI } },
01861 { "twlngi",  OPTO(3,TOLNG), OPTO_MASK,  PPCCOM,   { RA, SI } },
01862 { "tlngi",   OPTO(3,TOLNG), OPTO_MASK,  PWRCOM,   { RA, SI } },
01863 { "twgti",   OPTO(3,TOGT), OPTO_MASK, PPCCOM,   { RA, SI } },
01864 { "tgti",    OPTO(3,TOGT), OPTO_MASK, PWRCOM,   { RA, SI } },
01865 { "twgei",   OPTO(3,TOGE), OPTO_MASK, PPCCOM,   { RA, SI } },
01866 { "tgei",    OPTO(3,TOGE), OPTO_MASK, PWRCOM,   { RA, SI } },
01867 { "twnli",   OPTO(3,TONL), OPTO_MASK, PPCCOM,   { RA, SI } },
01868 { "tnli",    OPTO(3,TONL), OPTO_MASK, PWRCOM,   { RA, SI } },
01869 { "twlti",   OPTO(3,TOLT), OPTO_MASK, PPCCOM,   { RA, SI } },
01870 { "tlti",    OPTO(3,TOLT), OPTO_MASK, PWRCOM,   { RA, SI } },
01871 { "twlei",   OPTO(3,TOLE), OPTO_MASK, PPCCOM,   { RA, SI } },
01872 { "tlei",    OPTO(3,TOLE), OPTO_MASK, PWRCOM,   { RA, SI } },
01873 { "twngi",   OPTO(3,TONG), OPTO_MASK, PPCCOM,   { RA, SI } },
01874 { "tngi",    OPTO(3,TONG), OPTO_MASK, PWRCOM,   { RA, SI } },
01875 { "twnei",   OPTO(3,TONE), OPTO_MASK, PPCCOM,   { RA, SI } },
01876 { "tnei",    OPTO(3,TONE), OPTO_MASK, PWRCOM,   { RA, SI } },
01877 { "twi",     OP(3), OP_MASK,  PPCCOM,   { TO, RA, SI } },
01878 { "ti",      OP(3), OP_MASK,  PWRCOM,   { TO, RA, SI } },
01879 
01880 { "macchw", XO(4,172,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01881 { "macchw.",  XO(4,172,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01882 { "macchwo",  XO(4,172,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01883 { "macchwo.", XO(4,172,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01884 { "macchws",  XO(4,236,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01885 { "macchws.", XO(4,236,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01886 { "macchwso", XO(4,236,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01887 { "macchwso.",  XO(4,236,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01888 { "macchwsu", XO(4,204,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01889 { "macchwsu.",  XO(4,204,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01890 { "macchwsuo",  XO(4,204,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01891 { "macchwsuo.", XO(4,204,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01892 { "macchwu",  XO(4,140,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01893 { "macchwu.", XO(4,140,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01894 { "macchwuo", XO(4,140,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01895 { "macchwuo.",  XO(4,140,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01896 { "machhw", XO(4,44,0,0),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01897 { "machhw.",  XO(4,44,0,1),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01898 { "machhwo",  XO(4,44,1,0),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01899 { "machhwo.", XO(4,44,1,1),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01900 { "machhws",  XO(4,108,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01901 { "machhws.", XO(4,108,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01902 { "machhwso", XO(4,108,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01903 { "machhwso.",  XO(4,108,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01904 { "machhwsu", XO(4,76,0,0),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01905 { "machhwsu.",  XO(4,76,0,1),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01906 { "machhwsuo",  XO(4,76,1,0),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01907 { "machhwsuo.", XO(4,76,1,1),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01908 { "machhwu",  XO(4,12,0,0),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01909 { "machhwu.", XO(4,12,0,1),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01910 { "machhwuo", XO(4,12,1,0),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01911 { "machhwuo.",  XO(4,12,1,1),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01912 { "maclhw", XO(4,428,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01913 { "maclhw.",  XO(4,428,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01914 { "maclhwo",  XO(4,428,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01915 { "maclhwo.", XO(4,428,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01916 { "maclhws",  XO(4,492,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01917 { "maclhws.", XO(4,492,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01918 { "maclhwso", XO(4,492,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01919 { "maclhwso.",  XO(4,492,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01920 { "maclhwsu", XO(4,460,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01921 { "maclhwsu.",  XO(4,460,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01922 { "maclhwsuo",  XO(4,460,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01923 { "maclhwsuo.", XO(4,460,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01924 { "maclhwu",  XO(4,396,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01925 { "maclhwu.", XO(4,396,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01926 { "maclhwuo", XO(4,396,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01927 { "maclhwuo.",  XO(4,396,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01928 { "mulchw", XRC(4,168,0),  X_MASK,  PPC405|PPC440,  { RT, RA, RB } },
01929 { "mulchw.",  XRC(4,168,1),  X_MASK,  PPC405|PPC440,  { RT, RA, RB } },
01930 { "mulchwu",  XRC(4,136,0),  X_MASK,  PPC405|PPC440,  { RT, RA, RB } },
01931 { "mulchwu.", XRC(4,136,1),  X_MASK,  PPC405|PPC440,  { RT, RA, RB } },
01932 { "mulhhw", XRC(4,40,0),   X_MASK,  PPC405|PPC440,  { RT, RA, RB } },
01933 { "mulhhw.",  XRC(4,40,1),   X_MASK,  PPC405|PPC440,  { RT, RA, RB } },
01934 { "mulhhwu",  XRC(4,8,0),    X_MASK,  PPC405|PPC440,  { RT, RA, RB } },
01935 { "mulhhwu.", XRC(4,8,1),    X_MASK,  PPC405|PPC440,  { RT, RA, RB } },
01936 { "mullhw", XRC(4,424,0),  X_MASK,  PPC405|PPC440,  { RT, RA, RB } },
01937 { "mullhw.",  XRC(4,424,1),  X_MASK,  PPC405|PPC440,  { RT, RA, RB } },
01938 { "mullhwu",  XRC(4,392,0),  X_MASK,  PPC405|PPC440,  { RT, RA, RB } },
01939 { "mullhwu.", XRC(4,392,1),  X_MASK,  PPC405|PPC440,  { RT, RA, RB } },
01940 { "nmacchw",  XO(4,174,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01941 { "nmacchw.", XO(4,174,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01942 { "nmacchwo", XO(4,174,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01943 { "nmacchwo.",  XO(4,174,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01944 { "nmacchws", XO(4,238,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01945 { "nmacchws.",  XO(4,238,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01946 { "nmacchwso",  XO(4,238,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01947 { "nmacchwso.", XO(4,238,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01948 { "nmachhw",  XO(4,46,0,0),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01949 { "nmachhw.", XO(4,46,0,1),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01950 { "nmachhwo", XO(4,46,1,0),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01951 { "nmachhwo.",  XO(4,46,1,1),  XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01952 { "nmachhws", XO(4,110,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01953 { "nmachhws.",  XO(4,110,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01954 { "nmachhwso",  XO(4,110,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01955 { "nmachhwso.", XO(4,110,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01956 { "nmaclhw",  XO(4,430,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01957 { "nmaclhw.", XO(4,430,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01958 { "nmaclhwo", XO(4,430,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01959 { "nmaclhwo.",  XO(4,430,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01960 { "nmaclhws", XO(4,494,0,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01961 { "nmaclhws.",  XO(4,494,0,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01962 { "nmaclhwso",  XO(4,494,1,0), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01963 { "nmaclhwso.", XO(4,494,1,1), XO_MASK, PPC405|PPC440,  { RT, RA, RB } },
01964 { "mfvscr",  VX(4, 1540), VX_MASK,  PPCVEC,   { VD } },
01965 { "mtvscr",  VX(4, 1604), VX_MASK,  PPCVEC,   { VB } },
01966 
01967   /* Double-precision opcodes.  */
01968   /* Some of these conflict with AltiVec, so move them before, since
01969      PPCVEC includes the PPC_OPCODE_PPC set.  */
01970 { "efscfd",   VX(4, 719), VX_MASK,  PPCEFS,   { RS, RB } },
01971 { "efdabs",   VX(4, 740), VX_MASK,  PPCEFS,   { RS, RA } },
01972 { "efdnabs",  VX(4, 741), VX_MASK,  PPCEFS,   { RS, RA } },
01973 { "efdneg",   VX(4, 742), VX_MASK,  PPCEFS,   { RS, RA } },
01974 { "efdadd",   VX(4, 736), VX_MASK,  PPCEFS,   { RS, RA, RB } },
01975 { "efdsub",   VX(4, 737), VX_MASK,  PPCEFS,   { RS, RA, RB } },
01976 { "efdmul",   VX(4, 744), VX_MASK,  PPCEFS,   { RS, RA, RB } },
01977 { "efddiv",   VX(4, 745), VX_MASK,  PPCEFS,   { RS, RA, RB } },
01978 { "efdcmpgt", VX(4, 748), VX_MASK,  PPCEFS,   { CRFD, RA, RB } },
01979 { "efdcmplt", VX(4, 749), VX_MASK,  PPCEFS,   { CRFD, RA, RB } },
01980 { "efdcmpeq", VX(4, 750), VX_MASK,  PPCEFS,   { CRFD, RA, RB } },
01981 { "efdtstgt", VX(4, 764), VX_MASK,  PPCEFS,   { CRFD, RA, RB } },
01982 { "efdtstlt", VX(4, 765), VX_MASK,  PPCEFS,   { CRFD, RA, RB } },
01983 { "efdtsteq", VX(4, 766), VX_MASK,  PPCEFS,   { CRFD, RA, RB } },
01984 { "efdcfsi",  VX(4, 753), VX_MASK,  PPCEFS,   { RS, RB } },
01985 { "efdcfsid", VX(4, 739), VX_MASK,  PPCEFS,   { RS, RB } },
01986 { "efdcfui",  VX(4, 752), VX_MASK,  PPCEFS,   { RS, RB } },
01987 { "efdcfuid", VX(4, 738), VX_MASK,  PPCEFS,   { RS, RB } },
01988 { "efdcfsf",  VX(4, 755), VX_MASK,  PPCEFS,   { RS, RB } },
01989 { "efdcfuf",  VX(4, 754), VX_MASK,  PPCEFS,   { RS, RB } },
01990 { "efdctsi",  VX(4, 757), VX_MASK,  PPCEFS,   { RS, RB } },
01991 { "efdctsidz",VX(4, 747), VX_MASK,  PPCEFS,   { RS, RB } },
01992 { "efdctsiz", VX(4, 762), VX_MASK,  PPCEFS,   { RS, RB } },
01993 { "efdctui",  VX(4, 756), VX_MASK,  PPCEFS,   { RS, RB } },
01994 { "efdctuidz",VX(4, 746), VX_MASK,  PPCEFS,   { RS, RB } },
01995 { "efdctuiz", VX(4, 760), VX_MASK,  PPCEFS,   { RS, RB } },
01996 { "efdctsf",  VX(4, 759), VX_MASK,  PPCEFS,   { RS, RB } },
01997 { "efdctuf",  VX(4, 758), VX_MASK,  PPCEFS,   { RS, RB } },
01998 { "efdcfs",   VX(4, 751), VX_MASK,  PPCEFS,   { RS, RB } },
01999   /* End of double-precision opcodes.  */
02000 
02001 { "vaddcuw", VX(4,  384), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02002 { "vaddfp",  VX(4,   10), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02003 { "vaddsbs", VX(4,  768), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02004 { "vaddshs", VX(4,  832), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02005 { "vaddsws", VX(4,  896), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02006 { "vaddubm", VX(4,    0), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02007 { "vaddubs", VX(4,  512), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02008 { "vadduhm", VX(4,   64), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02009 { "vadduhs", VX(4,  576), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02010 { "vadduwm", VX(4,  128), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02011 { "vadduws", VX(4,  640), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02012 { "vand",    VX(4, 1028), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02013 { "vandc",   VX(4, 1092), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02014 { "vavgsb",  VX(4, 1282), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02015 { "vavgsh",  VX(4, 1346), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02016 { "vavgsw",  VX(4, 1410), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02017 { "vavgub",  VX(4, 1026), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02018 { "vavguh",  VX(4, 1090), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02019 { "vavguw",  VX(4, 1154), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02020 { "vcfsx",   VX(4,  842), VX_MASK,  PPCVEC,   { VD, VB, UIMM } },
02021 { "vcfux",   VX(4,  778), VX_MASK,  PPCVEC,   { VD, VB, UIMM } },
02022 { "vcmpbfp",   VXR(4, 966, 0), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02023 { "vcmpbfp.",  VXR(4, 966, 1), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02024 { "vcmpeqfp",  VXR(4, 198, 0), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02025 { "vcmpeqfp.", VXR(4, 198, 1), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02026 { "vcmpequb",  VXR(4,   6, 0), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02027 { "vcmpequb.", VXR(4,   6, 1), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02028 { "vcmpequh",  VXR(4,  70, 0), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02029 { "vcmpequh.", VXR(4,  70, 1), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02030 { "vcmpequw",  VXR(4, 134, 0), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02031 { "vcmpequw.", VXR(4, 134, 1), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02032 { "vcmpgefp",  VXR(4, 454, 0), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02033 { "vcmpgefp.", VXR(4, 454, 1), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02034 { "vcmpgtfp",  VXR(4, 710, 0), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02035 { "vcmpgtfp.", VXR(4, 710, 1), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02036 { "vcmpgtsb",  VXR(4, 774, 0), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02037 { "vcmpgtsb.", VXR(4, 774, 1), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02038 { "vcmpgtsh",  VXR(4, 838, 0), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02039 { "vcmpgtsh.", VXR(4, 838, 1), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02040 { "vcmpgtsw",  VXR(4, 902, 0), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02041 { "vcmpgtsw.", VXR(4, 902, 1), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02042 { "vcmpgtub",  VXR(4, 518, 0), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02043 { "vcmpgtub.", VXR(4, 518, 1), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02044 { "vcmpgtuh",  VXR(4, 582, 0), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02045 { "vcmpgtuh.", VXR(4, 582, 1), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02046 { "vcmpgtuw",  VXR(4, 646, 0), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02047 { "vcmpgtuw.", VXR(4, 646, 1), VXR_MASK, PPCVEC,  { VD, VA, VB } },
02048 { "vctsxs",    VX(4,  970), VX_MASK,  PPCVEC,   { VD, VB, UIMM } },
02049 { "vctuxs",    VX(4,  906), VX_MASK,  PPCVEC,   { VD, VB, UIMM } },
02050 { "vexptefp",  VX(4,  394), VX_MASK,  PPCVEC,   { VD, VB } },
02051 { "vlogefp",   VX(4,  458), VX_MASK,  PPCVEC,   { VD, VB } },
02052 { "vmaddfp",   VXA(4,  46), VXA_MASK, PPCVEC,   { VD, VA, VC, VB } },
02053 { "vmaxfp",    VX(4, 1034), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02054 { "vmaxsb",    VX(4,  258), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02055 { "vmaxsh",    VX(4,  322), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02056 { "vmaxsw",    VX(4,  386), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02057 { "vmaxub",    VX(4,    2), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02058 { "vmaxuh",    VX(4,   66), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02059 { "vmaxuw",    VX(4,  130), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02060 { "vmhaddshs", VXA(4,  32), VXA_MASK, PPCVEC,   { VD, VA, VB, VC } },
02061 { "vmhraddshs", VXA(4, 33), VXA_MASK, PPCVEC,   { VD, VA, VB, VC } },
02062 { "vminfp",    VX(4, 1098), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02063 { "vminsb",    VX(4,  770), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02064 { "vminsh",    VX(4,  834), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02065 { "vminsw",    VX(4,  898), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02066 { "vminub",    VX(4,  514), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02067 { "vminuh",    VX(4,  578), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02068 { "vminuw",    VX(4,  642), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02069 { "vmladduhm", VXA(4,  34), VXA_MASK, PPCVEC,   { VD, VA, VB, VC } },
02070 { "vmrghb",    VX(4,   12), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02071 { "vmrghh",    VX(4,   76), VX_MASK,    PPCVEC,   { VD, VA, VB } },
02072 { "vmrghw",    VX(4,  140), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02073 { "vmrglb",    VX(4,  268), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02074 { "vmrglh",    VX(4,  332), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02075 { "vmrglw",    VX(4,  396), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02076 { "vmsummbm",  VXA(4,  37), VXA_MASK, PPCVEC,   { VD, VA, VB, VC } },
02077 { "vmsumshm",  VXA(4,  40), VXA_MASK, PPCVEC,   { VD, VA, VB, VC } },
02078 { "vmsumshs",  VXA(4,  41), VXA_MASK, PPCVEC,   { VD, VA, VB, VC } },
02079 { "vmsumubm",  VXA(4,  36), VXA_MASK,   PPCVEC,   { VD, VA, VB, VC } },
02080 { "vmsumuhm",  VXA(4,  38), VXA_MASK,   PPCVEC,   { VD, VA, VB, VC } },
02081 { "vmsumuhs",  VXA(4,  39), VXA_MASK,   PPCVEC,   { VD, VA, VB, VC } },
02082 { "vmulesb",   VX(4,  776), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02083 { "vmulesh",   VX(4,  840), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02084 { "vmuleub",   VX(4,  520), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02085 { "vmuleuh",   VX(4,  584), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02086 { "vmulosb",   VX(4,  264), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02087 { "vmulosh",   VX(4,  328), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02088 { "vmuloub",   VX(4,    8), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02089 { "vmulouh",   VX(4,   72), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02090 { "vnmsubfp",  VXA(4,  47), VXA_MASK, PPCVEC,   { VD, VA, VC, VB } },
02091 { "vnor",      VX(4, 1284), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02092 { "vor",       VX(4, 1156), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02093 { "vperm",     VXA(4,  43), VXA_MASK, PPCVEC,   { VD, VA, VB, VC } },
02094 { "vpkpx",     VX(4,  782), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02095 { "vpkshss",   VX(4,  398), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02096 { "vpkshus",   VX(4,  270), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02097 { "vpkswss",   VX(4,  462), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02098 { "vpkswus",   VX(4,  334), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02099 { "vpkuhum",   VX(4,   14), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02100 { "vpkuhus",   VX(4,  142), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02101 { "vpkuwum",   VX(4,   78), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02102 { "vpkuwus",   VX(4,  206), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02103 { "vrefp",     VX(4,  266), VX_MASK,  PPCVEC,   { VD, VB } },
02104 { "vrfim",     VX(4,  714), VX_MASK,  PPCVEC,   { VD, VB } },
02105 { "vrfin",     VX(4,  522), VX_MASK,  PPCVEC,   { VD, VB } },
02106 { "vrfip",     VX(4,  650), VX_MASK,  PPCVEC,   { VD, VB } },
02107 { "vrfiz",     VX(4,  586), VX_MASK,  PPCVEC,   { VD, VB } },
02108 { "vrlb",      VX(4,    4), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02109 { "vrlh",      VX(4,   68), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02110 { "vrlw",      VX(4,  132), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02111 { "vrsqrtefp", VX(4,  330), VX_MASK,  PPCVEC,   { VD, VB } },
02112 { "vsel",      VXA(4,  42), VXA_MASK, PPCVEC,   { VD, VA, VB, VC } },
02113 { "vsl",       VX(4,  452), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02114 { "vslb",      VX(4,  260), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02115 { "vsldoi",    VXA(4,  44), VXA_MASK, PPCVEC,   { VD, VA, VB, SHB } },
02116 { "vslh",      VX(4,  324), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02117 { "vslo",      VX(4, 1036), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02118 { "vslw",      VX(4,  388), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02119 { "vspltb",    VX(4,  524), VX_MASK,  PPCVEC,   { VD, VB, UIMM } },
02120 { "vsplth",    VX(4,  588), VX_MASK,  PPCVEC,   { VD, VB, UIMM } },
02121 { "vspltisb",  VX(4,  780), VX_MASK,  PPCVEC,   { VD, SIMM } },
02122 { "vspltish",  VX(4,  844), VX_MASK,  PPCVEC,   { VD, SIMM } },
02123 { "vspltisw",  VX(4,  908), VX_MASK,  PPCVEC,   { VD, SIMM } },
02124 { "vspltw",    VX(4,  652), VX_MASK,  PPCVEC,   { VD, VB, UIMM } },
02125 { "vsr",       VX(4,  708), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02126 { "vsrab",     VX(4,  772), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02127 { "vsrah",     VX(4,  836), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02128 { "vsraw",     VX(4,  900), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02129 { "vsrb",      VX(4,  516), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02130 { "vsrh",      VX(4,  580), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02131 { "vsro",      VX(4, 1100), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02132 { "vsrw",      VX(4,  644), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02133 { "vsubcuw",   VX(4, 1408), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02134 { "vsubfp",    VX(4,   74), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02135 { "vsubsbs",   VX(4, 1792), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02136 { "vsubshs",   VX(4, 1856), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02137 { "vsubsws",   VX(4, 1920), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02138 { "vsububm",   VX(4, 1024), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02139 { "vsububs",   VX(4, 1536), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02140 { "vsubuhm",   VX(4, 1088), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02141 { "vsubuhs",   VX(4, 1600), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02142 { "vsubuwm",   VX(4, 1152), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02143 { "vsubuws",   VX(4, 1664), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02144 { "vsumsws",   VX(4, 1928), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02145 { "vsum2sws",  VX(4, 1672), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02146 { "vsum4sbs",  VX(4, 1800), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02147 { "vsum4shs",  VX(4, 1608), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02148 { "vsum4ubs",  VX(4, 1544), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02149 { "vupkhpx",   VX(4,  846), VX_MASK,  PPCVEC,   { VD, VB } },
02150 { "vupkhsb",   VX(4,  526), VX_MASK,  PPCVEC,   { VD, VB } },
02151 { "vupkhsh",   VX(4,  590), VX_MASK,  PPCVEC,   { VD, VB } },
02152 { "vupklpx",   VX(4,  974), VX_MASK,  PPCVEC,   { VD, VB } },
02153 { "vupklsb",   VX(4,  654), VX_MASK,  PPCVEC,   { VD, VB } },
02154 { "vupklsh",   VX(4,  718), VX_MASK,  PPCVEC,   { VD, VB } },
02155 { "vxor",      VX(4, 1220), VX_MASK,  PPCVEC,   { VD, VA, VB } },
02156 
02157 { "evaddw",    VX(4, 512), VX_MASK, PPCSPE,   { RS, RA, RB } },
02158 { "evaddiw",   VX(4, 514), VX_MASK, PPCSPE,   { RS, RB, UIMM } },
02159 { "evsubfw",   VX(4, 516), VX_MASK, PPCSPE,   { RS, RA, RB } },
02160 { "evsubw",    VX(4, 516), VX_MASK, PPCSPE,   { RS, RB, RA } },
02161 { "evsubifw",  VX(4, 518), VX_MASK, PPCSPE,   { RS, UIMM, RB } },
02162 { "evsubiw",   VX(4, 518), VX_MASK, PPCSPE,   { RS, RB, UIMM } },
02163 { "evabs",     VX(4, 520), VX_MASK, PPCSPE,   { RS, RA } },
02164 { "evneg",     VX(4, 521), VX_MASK, PPCSPE,   { RS, RA } },
02165 { "evextsb",   VX(4, 522), VX_MASK, PPCSPE,   { RS, RA } },
02166 { "evextsh",   VX(4, 523), VX_MASK, PPCSPE,   { RS, RA } },
02167 { "evrndw",    VX(4, 524), VX_MASK, PPCSPE,   { RS, RA } },
02168 { "evcntlzw",  VX(4, 525), VX_MASK, PPCSPE,   { RS, RA } },
02169 { "evcntlsw",  VX(4, 526), VX_MASK, PPCSPE,   { RS, RA } },
02170 
02171 { "brinc",     VX(4, 527), VX_MASK, PPCSPE,   { RS, RA, RB } },
02172 
02173 { "evand",     VX(4, 529), VX_MASK, PPCSPE,   { RS, RA, RB } },
02174 { "evandc",    VX(4, 530), VX_MASK, PPCSPE,   { RS, RA, RB } },
02175 { "evmr",      VX(4, 535), VX_MASK, PPCSPE,   { RS, RA, BBA } },
02176 { "evor",      VX(4, 535), VX_MASK, PPCSPE,   { RS, RA, RB } },
02177 { "evorc",     VX(4, 539), VX_MASK, PPCSPE,   { RS, RA, RB } },
02178 { "evxor",     VX(4, 534), VX_MASK, PPCSPE,   { RS, RA, RB } },
02179 { "eveqv",     VX(4, 537), VX_MASK, PPCSPE,   { RS, RA, RB } },
02180 { "evnand",    VX(4, 542), VX_MASK, PPCSPE,   { RS, RA, RB } },
02181 { "evnot",     VX(4, 536), VX_MASK, PPCSPE,   { RS, RA, BBA } },
02182 { "evnor",     VX(4, 536), VX_MASK, PPCSPE,   { RS, RA, RB } },
02183 
02184 { "evrlw",     VX(4, 552), VX_MASK, PPCSPE,   { RS, RA, RB } },
02185 { "evrlwi",    VX(4, 554), VX_MASK, PPCSPE,   { RS, RA, EVUIMM } },
02186 { "evslw",     VX(4, 548), VX_MASK, PPCSPE,   { RS, RA, RB } },
02187 { "evslwi",    VX(4, 550), VX_MASK, PPCSPE,   { RS, RA, EVUIMM } },
02188 { "evsrws",    VX(4, 545), VX_MASK, PPCSPE,   { RS, RA, RB } },
02189 { "evsrwu",    VX(4, 544), VX_MASK, PPCSPE,   { RS, RA, RB } },
02190 { "evsrwis",   VX(4, 547), VX_MASK, PPCSPE,   { RS, RA, EVUIMM } },
02191 { "evsrwiu",   VX(4, 546), VX_MASK, PPCSPE,   { RS, RA, EVUIMM } },
02192 { "evsplati",  VX(4, 553), VX_MASK, PPCSPE,   { RS, SIMM } },
02193 { "evsplatfi", VX(4, 555), VX_MASK, PPCSPE,   { RS, SIMM } },
02194 { "evmergehi", VX(4, 556), VX_MASK, PPCSPE,   { RS, RA, RB } },
02195 { "evmergelo", VX(4, 557), VX_MASK, PPCSPE,   { RS, RA, RB } },
02196 { "evmergehilo",VX(4,558), VX_MASK, PPCSPE,   { RS, RA, RB } },
02197 { "evmergelohi",VX(4,559), VX_MASK, PPCSPE,   { RS, RA, RB } },
02198 
02199 { "evcmpgts",  VX(4, 561), VX_MASK, PPCSPE,   { CRFD, RA, RB } },
02200 { "evcmpgtu",  VX(4, 560), VX_MASK, PPCSPE,   { CRFD, RA, RB } },
02201 { "evcmplts",  VX(4, 563), VX_MASK, PPCSPE,   { CRFD, RA, RB } },
02202 { "evcmpltu",  VX(4, 562), VX_MASK, PPCSPE,   { CRFD, RA, RB } },
02203 { "evcmpeq",   VX(4, 564), VX_MASK, PPCSPE,   { CRFD, RA, RB } },
02204 { "evsel",     EVSEL(4,79),EVSEL_MASK,  PPCSPE,   { RS, RA, RB, CRFS } },
02205 
02206 { "evldd",     VX(4, 769), VX_MASK, PPCSPE,   { RS, EVUIMM_8, RA } },
02207 { "evlddx",    VX(4, 768), VX_MASK, PPCSPE,   { RS, RA, RB } },
02208 { "evldw",     VX(4, 771), VX_MASK, PPCSPE,   { RS, EVUIMM_8, RA } },
02209 { "evldwx",    VX(4, 770), VX_MASK, PPCSPE,   { RS, RA, RB } },
02210 { "evldh",     VX(4, 773), VX_MASK, PPCSPE,   { RS, EVUIMM_8, RA } },
02211 { "evldhx",    VX(4, 772), VX_MASK, PPCSPE,   { RS, RA, RB } },
02212 { "evlwhe",    VX(4, 785), VX_MASK, PPCSPE,   { RS, EVUIMM_4, RA } },
02213 { "evlwhex",   VX(4, 784), VX_MASK, PPCSPE,   { RS, RA, RB } },
02214 { "evlwhou",   VX(4, 789), VX_MASK, PPCSPE,   { RS, EVUIMM_4, RA } },
02215 { "evlwhoux",  VX(4, 788), VX_MASK, PPCSPE,   { RS, RA, RB } },
02216 { "evlwhos",   VX(4, 791), VX_MASK, PPCSPE,   { RS, EVUIMM_4, RA } },
02217 { "evlwhosx",  VX(4, 790), VX_MASK, PPCSPE,   { RS, RA, RB } },
02218 { "evlwwsplat",VX(4, 793), VX_MASK, PPCSPE,   { RS, EVUIMM_4, RA } },
02219 { "evlwwsplatx",VX(4, 792), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02220 { "evlwhsplat",VX(4, 797), VX_MASK, PPCSPE,   { RS, EVUIMM_4, RA } },
02221 { "evlwhsplatx",VX(4, 796), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02222 { "evlhhesplat",VX(4, 777), VX_MASK,  PPCSPE,   { RS, EVUIMM_2, RA } },
02223 { "evlhhesplatx",VX(4, 776), VX_MASK, PPCSPE,   { RS, RA, RB } },
02224 { "evlhhousplat",VX(4, 781), VX_MASK, PPCSPE,   { RS, EVUIMM_2, RA } },
02225 { "evlhhousplatx",VX(4, 780), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02226 { "evlhhossplat",VX(4, 783), VX_MASK, PPCSPE,   { RS, EVUIMM_2, RA } },
02227 { "evlhhossplatx",VX(4, 782), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02228 
02229 { "evstdd",    VX(4, 801), VX_MASK, PPCSPE,   { RS, EVUIMM_8, RA } },
02230 { "evstddx",   VX(4, 800), VX_MASK, PPCSPE,   { RS, RA, RB } },
02231 { "evstdw",    VX(4, 803), VX_MASK, PPCSPE,   { RS, EVUIMM_8, RA } },
02232 { "evstdwx",   VX(4, 802), VX_MASK, PPCSPE,   { RS, RA, RB } },
02233 { "evstdh",    VX(4, 805), VX_MASK, PPCSPE,   { RS, EVUIMM_8, RA } },
02234 { "evstdhx",   VX(4, 804), VX_MASK, PPCSPE,   { RS, RA, RB } },
02235 { "evstwwe",   VX(4, 825), VX_MASK, PPCSPE,   { RS, EVUIMM_4, RA } },
02236 { "evstwwex",  VX(4, 824), VX_MASK, PPCSPE,   { RS, RA, RB } },
02237 { "evstwwo",   VX(4, 829), VX_MASK, PPCSPE,   { RS, EVUIMM_4, RA } },
02238 { "evstwwox",  VX(4, 828), VX_MASK, PPCSPE,   { RS, RA, RB } },
02239 { "evstwhe",   VX(4, 817), VX_MASK, PPCSPE,   { RS, EVUIMM_4, RA } },
02240 { "evstwhex",  VX(4, 816), VX_MASK, PPCSPE,   { RS, RA, RB } },
02241 { "evstwho",   VX(4, 821), VX_MASK, PPCSPE,   { RS, EVUIMM_4, RA } },
02242 { "evstwhox",  VX(4, 820), VX_MASK, PPCSPE,   { RS, RA, RB } },
02243 
02244 { "evfsabs",   VX(4, 644), VX_MASK, PPCSPE,   { RS, RA } },
02245 { "evfsnabs",  VX(4, 645), VX_MASK, PPCSPE,   { RS, RA } },
02246 { "evfsneg",   VX(4, 646), VX_MASK, PPCSPE,   { RS, RA } },
02247 { "evfsadd",   VX(4, 640), VX_MASK, PPCSPE,   { RS, RA, RB } },
02248 { "evfssub",   VX(4, 641), VX_MASK, PPCSPE,   { RS, RA, RB } },
02249 { "evfsmul",   VX(4, 648), VX_MASK, PPCSPE,   { RS, RA, RB } },
02250 { "evfsdiv",   VX(4, 649), VX_MASK, PPCSPE,   { RS, RA, RB } },
02251 { "evfscmpgt", VX(4, 652), VX_MASK, PPCSPE,   { CRFD, RA, RB } },
02252 { "evfscmplt", VX(4, 653), VX_MASK, PPCSPE,   { CRFD, RA, RB } },
02253 { "evfscmpeq", VX(4, 654), VX_MASK, PPCSPE,   { CRFD, RA, RB } },
02254 { "evfststgt", VX(4, 668), VX_MASK, PPCSPE,   { CRFD, RA, RB } },
02255 { "evfststlt", VX(4, 669), VX_MASK, PPCSPE,   { CRFD, RA, RB } },
02256 { "evfststeq", VX(4, 670), VX_MASK, PPCSPE,   { CRFD, RA, RB } },
02257 { "evfscfui",  VX(4, 656), VX_MASK, PPCSPE,   { RS, RB } },
02258 { "evfsctuiz", VX(4, 664), VX_MASK, PPCSPE,   { RS, RB } },
02259 { "evfscfsi",  VX(4, 657), VX_MASK, PPCSPE,   { RS, RB } },
02260 { "evfscfuf",  VX(4, 658), VX_MASK, PPCSPE,   { RS, RB } },
02261 { "evfscfsf",  VX(4, 659), VX_MASK, PPCSPE,   { RS, RB } },
02262 { "evfsctui",  VX(4, 660), VX_MASK, PPCSPE,   { RS, RB } },
02263 { "evfsctsi",  VX(4, 661), VX_MASK, PPCSPE,   { RS, RB } },
02264 { "evfsctsiz", VX(4, 666), VX_MASK, PPCSPE,   { RS, RB } },
02265 { "evfsctuf",  VX(4, 662), VX_MASK, PPCSPE,   { RS, RB } },
02266 { "evfsctsf",  VX(4, 663), VX_MASK, PPCSPE,   { RS, RB } },
02267 
02268 { "efsabs",   VX(4, 708), VX_MASK,  PPCEFS,   { RS, RA } },
02269 { "efsnabs",  VX(4, 709), VX_MASK,  PPCEFS,   { RS, RA } },
02270 { "efsneg",   VX(4, 710), VX_MASK,  PPCEFS,   { RS, RA } },
02271 { "efsadd",   VX(4, 704), VX_MASK,  PPCEFS,   { RS, RA, RB } },
02272 { "efssub",   VX(4, 705), VX_MASK,  PPCEFS,   { RS, RA, RB } },
02273 { "efsmul",   VX(4, 712), VX_MASK,  PPCEFS,   { RS, RA, RB } },
02274 { "efsdiv",   VX(4, 713), VX_MASK,  PPCEFS,   { RS, RA, RB } },
02275 { "efscmpgt", VX(4, 716), VX_MASK,  PPCEFS,   { CRFD, RA, RB } },
02276 { "efscmplt", VX(4, 717), VX_MASK,  PPCEFS,   { CRFD, RA, RB } },
02277 { "efscmpeq", VX(4, 718), VX_MASK,  PPCEFS,   { CRFD, RA, RB } },
02278 { "efststgt", VX(4, 732), VX_MASK,  PPCEFS,   { CRFD, RA, RB } },
02279 { "efststlt", VX(4, 733), VX_MASK,  PPCEFS,   { CRFD, RA, RB } },
02280 { "efststeq", VX(4, 734), VX_MASK,  PPCEFS,   { CRFD, RA, RB } },
02281 { "efscfui",  VX(4, 720), VX_MASK,  PPCEFS,   { RS, RB } },
02282 { "efsctuiz", VX(4, 728), VX_MASK,  PPCEFS,   { RS, RB } },
02283 { "efscfsi",  VX(4, 721), VX_MASK,  PPCEFS,   { RS, RB } },
02284 { "efscfuf",  VX(4, 722), VX_MASK,  PPCEFS,   { RS, RB } },
02285 { "efscfsf",  VX(4, 723), VX_MASK,  PPCEFS,   { RS, RB } },
02286 { "efsctui",  VX(4, 724), VX_MASK,  PPCEFS,   { RS, RB } },
02287 { "efsctsi",  VX(4, 725), VX_MASK,  PPCEFS,   { RS, RB } },
02288 { "efsctsiz", VX(4, 730), VX_MASK,  PPCEFS,   { RS, RB } },
02289 { "efsctuf",  VX(4, 726), VX_MASK,  PPCEFS,   { RS, RB } },
02290 { "efsctsf",  VX(4, 727), VX_MASK,  PPCEFS,   { RS, RB } },
02291 
02292 { "evmhossf",  VX(4, 1031), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02293 { "evmhossfa", VX(4, 1063), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02294 { "evmhosmf",  VX(4, 1039), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02295 { "evmhosmfa", VX(4, 1071), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02296 { "evmhosmi",  VX(4, 1037), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02297 { "evmhosmia", VX(4, 1069), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02298 { "evmhoumi",  VX(4, 1036), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02299 { "evmhoumia", VX(4, 1068), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02300 { "evmhessf",  VX(4, 1027), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02301 { "evmhessfa", VX(4, 1059), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02302 { "evmhesmf",  VX(4, 1035), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02303 { "evmhesmfa", VX(4, 1067), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02304 { "evmhesmi",  VX(4, 1033), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02305 { "evmhesmia", VX(4, 1065), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02306 { "evmheumi",  VX(4, 1032), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02307 { "evmheumia", VX(4, 1064), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02308 
02309 { "evmhossfaaw",VX(4, 1287), VX_MASK, PPCSPE,   { RS, RA, RB } },
02310 { "evmhossiaaw",VX(4, 1285), VX_MASK, PPCSPE,   { RS, RA, RB } },
02311 { "evmhosmfaaw",VX(4, 1295), VX_MASK, PPCSPE,   { RS, RA, RB } },
02312 { "evmhosmiaaw",VX(4, 1293), VX_MASK, PPCSPE,   { RS, RA, RB } },
02313 { "evmhousiaaw",VX(4, 1284), VX_MASK, PPCSPE,   { RS, RA, RB } },
02314 { "evmhoumiaaw",VX(4, 1292), VX_MASK, PPCSPE,   { RS, RA, RB } },
02315 { "evmhessfaaw",VX(4, 1283), VX_MASK, PPCSPE,   { RS, RA, RB } },
02316 { "evmhessiaaw",VX(4, 1281), VX_MASK, PPCSPE,   { RS, RA, RB } },
02317 { "evmhesmfaaw",VX(4, 1291), VX_MASK, PPCSPE,   { RS, RA, RB } },
02318 { "evmhesmiaaw",VX(4, 1289), VX_MASK, PPCSPE,   { RS, RA, RB } },
02319 { "evmheusiaaw",VX(4, 1280), VX_MASK, PPCSPE,   { RS, RA, RB } },
02320 { "evmheumiaaw",VX(4, 1288), VX_MASK, PPCSPE,   { RS, RA, RB } },
02321 
02322 { "evmhossfanw",VX(4, 1415), VX_MASK, PPCSPE,   { RS, RA, RB } },
02323 { "evmhossianw",VX(4, 1413), VX_MASK, PPCSPE,   { RS, RA, RB } },
02324 { "evmhosmfanw",VX(4, 1423), VX_MASK, PPCSPE,   { RS, RA, RB } },
02325 { "evmhosmianw",VX(4, 1421), VX_MASK, PPCSPE,   { RS, RA, RB } },
02326 { "evmhousianw",VX(4, 1412), VX_MASK, PPCSPE,   { RS, RA, RB } },
02327 { "evmhoumianw",VX(4, 1420), VX_MASK, PPCSPE,   { RS, RA, RB } },
02328 { "evmhessfanw",VX(4, 1411), VX_MASK, PPCSPE,   { RS, RA, RB } },
02329 { "evmhessianw",VX(4, 1409), VX_MASK, PPCSPE,   { RS, RA, RB } },
02330 { "evmhesmfanw",VX(4, 1419), VX_MASK, PPCSPE,   { RS, RA, RB } },
02331 { "evmhesmianw",VX(4, 1417), VX_MASK, PPCSPE,   { RS, RA, RB } },
02332 { "evmheusianw",VX(4, 1408), VX_MASK, PPCSPE,   { RS, RA, RB } },
02333 { "evmheumianw",VX(4, 1416), VX_MASK, PPCSPE,   { RS, RA, RB } },
02334 
02335 { "evmhogsmfaa",VX(4, 1327), VX_MASK, PPCSPE,   { RS, RA, RB } },
02336 { "evmhogsmiaa",VX(4, 1325), VX_MASK, PPCSPE,   { RS, RA, RB } },
02337 { "evmhogumiaa",VX(4, 1324), VX_MASK, PPCSPE,   { RS, RA, RB } },
02338 { "evmhegsmfaa",VX(4, 1323), VX_MASK, PPCSPE,   { RS, RA, RB } },
02339 { "evmhegsmiaa",VX(4, 1321), VX_MASK, PPCSPE,   { RS, RA, RB } },
02340 { "evmhegumiaa",VX(4, 1320), VX_MASK, PPCSPE,   { RS, RA, RB } },
02341 
02342 { "evmhogsmfan",VX(4, 1455), VX_MASK, PPCSPE,   { RS, RA, RB } },
02343 { "evmhogsmian",VX(4, 1453), VX_MASK, PPCSPE,   { RS, RA, RB } },
02344 { "evmhogumian",VX(4, 1452), VX_MASK, PPCSPE,   { RS, RA, RB } },
02345 { "evmhegsmfan",VX(4, 1451), VX_MASK, PPCSPE,   { RS, RA, RB } },
02346 { "evmhegsmian",VX(4, 1449), VX_MASK, PPCSPE,   { RS, RA, RB } },
02347 { "evmhegumian",VX(4, 1448), VX_MASK, PPCSPE,   { RS, RA, RB } },
02348 
02349 { "evmwhssf",  VX(4, 1095), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02350 { "evmwhssfa", VX(4, 1127), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02351 { "evmwhsmf",  VX(4, 1103), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02352 { "evmwhsmfa", VX(4, 1135), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02353 { "evmwhsmi",  VX(4, 1101), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02354 { "evmwhsmia", VX(4, 1133), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02355 { "evmwhumi",  VX(4, 1100), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02356 { "evmwhumia", VX(4, 1132), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02357 
02358 { "evmwlumi",  VX(4, 1096), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02359 { "evmwlumia", VX(4, 1128), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02360 
02361 { "evmwlssiaaw",VX(4, 1345), VX_MASK, PPCSPE,   { RS, RA, RB } },
02362 { "evmwlsmiaaw",VX(4, 1353), VX_MASK, PPCSPE,   { RS, RA, RB } },
02363 { "evmwlusiaaw",VX(4, 1344), VX_MASK, PPCSPE,   { RS, RA, RB } },
02364 { "evmwlumiaaw",VX(4, 1352), VX_MASK, PPCSPE,   { RS, RA, RB } },
02365 
02366 { "evmwlssianw",VX(4, 1473), VX_MASK, PPCSPE,   { RS, RA, RB } },
02367 { "evmwlsmianw",VX(4, 1481), VX_MASK, PPCSPE,   { RS, RA, RB } },
02368 { "evmwlusianw",VX(4, 1472), VX_MASK, PPCSPE,   { RS, RA, RB } },
02369 { "evmwlumianw",VX(4, 1480), VX_MASK, PPCSPE,   { RS, RA, RB } },
02370 
02371 { "evmwssf",   VX(4, 1107), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02372 { "evmwssfa",  VX(4, 1139), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02373 { "evmwsmf",   VX(4, 1115), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02374 { "evmwsmfa",  VX(4, 1147), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02375 { "evmwsmi",   VX(4, 1113), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02376 { "evmwsmia",  VX(4, 1145), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02377 { "evmwumi",   VX(4, 1112), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02378 { "evmwumia",  VX(4, 1144), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02379 
02380 { "evmwssfaa", VX(4, 1363), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02381 { "evmwsmfaa", VX(4, 1371), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02382 { "evmwsmiaa", VX(4, 1369), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02383 { "evmwumiaa", VX(4, 1368), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02384 
02385 { "evmwssfan", VX(4, 1491), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02386 { "evmwsmfan", VX(4, 1499), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02387 { "evmwsmian", VX(4, 1497), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02388 { "evmwumian", VX(4, 1496), VX_MASK,  PPCSPE,   { RS, RA, RB } },
02389 
02390 { "evaddssiaaw",VX(4, 1217), VX_MASK, PPCSPE,   { RS, RA } },
02391 { "evaddsmiaaw",VX(4, 1225), VX_MASK, PPCSPE,   { RS, RA } },
02392 { "evaddusiaaw",VX(4, 1216), VX_MASK, PPCSPE,   { RS, RA } },
02393 { "evaddumiaaw",VX(4, 1224), VX_MASK, PPCSPE,   { RS, RA } },
02394 
02395 { "evsubfssiaaw",VX(4, 1219), VX_MASK,  PPCSPE,   { RS, RA } },
02396 { "evsubfsmiaaw",VX(4, 1227), VX_MASK,  PPCSPE,   { RS, RA } },
02397 { "evsubfusiaaw",VX(4, 1218), VX_MASK,  PPCSPE,   { RS, RA } },
02398 { "evsubfumiaaw",VX(4, 1226), VX_MASK,  PPCSPE,   { RS, RA } },
02399 
02400 { "evmra",    VX(4, 1220), VX_MASK, PPCSPE,   { RS, RA } },
02401 
02402 { "evdivws",  VX(4, 1222), VX_MASK, PPCSPE,   { RS, RA, RB } },
02403 { "evdivwu",  VX(4, 1223), VX_MASK, PPCSPE,   { RS, RA, RB } },
02404 
02405 { "mulli",   OP(7), OP_MASK,  PPCCOM,   { RT, RA, SI } },
02406 { "muli",    OP(7), OP_MASK,  PWRCOM,   { RT, RA, SI } },
02407 
02408 { "subfic",  OP(8), OP_MASK,  PPCCOM,   { RT, RA, SI } },
02409 { "sfi",     OP(8), OP_MASK,  PWRCOM,   { RT, RA, SI } },
02410 
02411 { "dozi",    OP(9), OP_MASK,  M601,   { RT, RA, SI } },
02412 
02413 { "bce",     B(9,0,0),  B_MASK,   BOOKE64,  { BO, BI, BD } },
02414 { "bcel",    B(9,0,1),  B_MASK,   BOOKE64,  { BO, BI, BD } },
02415 { "bcea",    B(9,1,0),  B_MASK,   BOOKE64,  { BO, BI, BDA } },
02416 { "bcela",   B(9,1,1),  B_MASK,   BOOKE64,  { BO, BI, BDA } },
02417 
02418 { "cmplwi",  OPL(10,0), OPL_MASK, PPCCOM,   { OBF, RA, UI } },
02419 { "cmpldi",  OPL(10,1), OPL_MASK, PPC64,    { OBF, RA, UI } },
02420 { "cmpli",   OP(10),  OP_MASK,  PPC,    { BF, L, RA, UI } },
02421 { "cmpli",   OP(10),  OP_MASK,  PWRCOM,   { BF, RA, UI } },
02422 
02423 { "cmpwi",   OPL(11,0), OPL_MASK, PPCCOM,   { OBF, RA, SI } },
02424 { "cmpdi",   OPL(11,1), OPL_MASK, PPC64,    { OBF, RA, SI } },
02425 { "cmpi",    OP(11),  OP_MASK,  PPC,    { BF, L, RA, SI } },
02426 { "cmpi",    OP(11),  OP_MASK,  PWRCOM,   { BF, RA, SI } },
02427 
02428 { "addic",   OP(12),  OP_MASK,  PPCCOM,   { RT, RA, SI } },
02429 { "ai",      OP(12),  OP_MASK,  PWRCOM,   { RT, RA, SI } },
02430 { "subic",   OP(12),  OP_MASK,  PPCCOM,   { RT, RA, NSI } },
02431 
02432 { "addic.",  OP(13),  OP_MASK,  PPCCOM,   { RT, RA, SI } },
02433 { "ai.",     OP(13),  OP_MASK,  PWRCOM,   { RT, RA, SI } },
02434 { "subic.",  OP(13),  OP_MASK,  PPCCOM,   { RT, RA, NSI } },
02435 
02436 { "li",      OP(14),  DRA_MASK, PPCCOM,   { RT, SI } },
02437 { "lil",     OP(14),  DRA_MASK, PWRCOM,   { RT, SI } },
02438 { "addi",    OP(14),  OP_MASK,  PPCCOM,   { RT, RA0, SI } },
02439 { "cal",     OP(14),  OP_MASK,  PWRCOM,   { RT, D, RA0 } },
02440 { "subi",    OP(14),  OP_MASK,  PPCCOM,   { RT, RA0, NSI } },
02441 { "la",      OP(14),  OP_MASK,  PPCCOM,   { RT, D, RA0 } },
02442 
02443 { "lis",     OP(15),  DRA_MASK, PPCCOM,   { RT, SISIGNOPT } },
02444 { "liu",     OP(15),  DRA_MASK, PWRCOM,   { RT, SISIGNOPT } },
02445 { "addis",   OP(15),  OP_MASK,  PPCCOM,   { RT,RA0,SISIGNOPT } },
02446 { "cau",     OP(15),  OP_MASK,  PWRCOM,   { RT,RA0,SISIGNOPT } },
02447 { "subis",   OP(15),  OP_MASK,  PPCCOM,   { RT, RA0, NSI } },
02448 
02449 { "bdnz-",   BBO(16,BODNZ,0,0),      BBOATBI_MASK, PPCCOM,  { BDM } },
02450 { "bdnz+",   BBO(16,BODNZ,0,0),      BBOATBI_MASK, PPCCOM,  { BDP } },
02451 { "bdnz",    BBO(16,BODNZ,0,0),      BBOATBI_MASK, PPCCOM,  { BD } },
02452 { "bdn",     BBO(16,BODNZ,0,0),      BBOATBI_MASK, PWRCOM,  { BD } },
02453 { "bdnzl-",  BBO(16,BODNZ,0,1),      BBOATBI_MASK, PPCCOM,  { BDM } },
02454 { "bdnzl+",  BBO(16,BODNZ,0,1),      BBOATBI_MASK, PPCCOM,  { BDP } },
02455 { "bdnzl",   BBO(16,BODNZ,0,1),      BBOATBI_MASK, PPCCOM,  { BD } },
02456 { "bdnl",    BBO(16,BODNZ,0,1),      BBOATBI_MASK, PWRCOM,  { BD } },
02457 { "bdnza-",  BBO(16,BODNZ,1,0),      BBOATBI_MASK, PPCCOM,  { BDMA } },
02458 { "bdnza+",  BBO(16,BODNZ,1,0),      BBOATBI_MASK, PPCCOM,  { BDPA } },
02459 { "bdnza",   BBO(16,BODNZ,1,0),      BBOATBI_MASK, PPCCOM,  { BDA } },
02460 { "bdna",    BBO(16,BODNZ,1,0),      BBOATBI_MASK, PWRCOM,  { BDA } },
02461 { "bdnzla-", BBO(16,BODNZ,1,1),      BBOATBI_MASK, PPCCOM,  { BDMA } },
02462 { "bdnzla+", BBO(16,BODNZ,1,1),      BBOATBI_MASK, PPCCOM,  { BDPA } },
02463 { "bdnzla",  BBO(16,BODNZ,1,1),      BBOATBI_MASK, PPCCOM,  { BDA } },
02464 { "bdnla",   BBO(16,BODNZ,1,1),      BBOATBI_MASK, PWRCOM,  { BDA } },
02465 { "bdz-",    BBO(16,BODZ,0,0),       BBOATBI_MASK, PPCCOM,  { BDM } },
02466 { "bdz+",    BBO(16,BODZ,0,0),       BBOATBI_MASK, PPCCOM,  { BDP } },
02467 { "bdz",     BBO(16,BODZ,0,0),       BBOATBI_MASK, COM,   { BD } },
02468 { "bdzl-",   BBO(16,BODZ,0,1),       BBOATBI_MASK, PPCCOM,  { BDM } },
02469 { "bdzl+",   BBO(16,BODZ,0,1),       BBOATBI_MASK, PPCCOM,  { BDP } },
02470 { "bdzl",    BBO(16,BODZ,0,1),       BBOATBI_MASK, COM,   { BD } },
02471 { "bdza-",   BBO(16,BODZ,1,0),       BBOATBI_MASK, PPCCOM,  { BDMA } },
02472 { "bdza+",   BBO(16,BODZ,1,0),       BBOATBI_MASK, PPCCOM,  { BDPA } },
02473 { "bdza",    BBO(16,BODZ,1,0),       BBOATBI_MASK, COM,   { BDA } },
02474 { "bdzla-",  BBO(16,BODZ,1,1),       BBOATBI_MASK, PPCCOM,  { BDMA } },
02475 { "bdzla+",  BBO(16,BODZ,1,1),       BBOATBI_MASK, PPCCOM,  { BDPA } },
02476 { "bdzla",   BBO(16,BODZ,1,1),       BBOATBI_MASK, COM,   { BDA } },
02477 { "blt-",    BBOCB(16,BOT,CBLT,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02478 { "blt+",    BBOCB(16,BOT,CBLT,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02479 { "blt",     BBOCB(16,BOT,CBLT,0,0), BBOATCB_MASK, COM,   { CR, BD } },
02480 { "bltl-",   BBOCB(16,BOT,CBLT,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02481 { "bltl+",   BBOCB(16,BOT,CBLT,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02482 { "bltl",    BBOCB(16,BOT,CBLT,0,1), BBOATCB_MASK, COM,   { CR, BD } },
02483 { "blta-",   BBOCB(16,BOT,CBLT,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02484 { "blta+",   BBOCB(16,BOT,CBLT,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02485 { "blta",    BBOCB(16,BOT,CBLT,1,0), BBOATCB_MASK, COM,   { CR, BDA } },
02486 { "bltla-",  BBOCB(16,BOT,CBLT,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02487 { "bltla+",  BBOCB(16,BOT,CBLT,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02488 { "bltla",   BBOCB(16,BOT,CBLT,1,1), BBOATCB_MASK, COM,   { CR, BDA } },
02489 { "bgt-",    BBOCB(16,BOT,CBGT,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02490 { "bgt+",    BBOCB(16,BOT,CBGT,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02491 { "bgt",     BBOCB(16,BOT,CBGT,0,0), BBOATCB_MASK, COM,   { CR, BD } },
02492 { "bgtl-",   BBOCB(16,BOT,CBGT,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02493 { "bgtl+",   BBOCB(16,BOT,CBGT,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02494 { "bgtl",    BBOCB(16,BOT,CBGT,0,1), BBOATCB_MASK, COM,   { CR, BD } },
02495 { "bgta-",   BBOCB(16,BOT,CBGT,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02496 { "bgta+",   BBOCB(16,BOT,CBGT,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02497 { "bgta",    BBOCB(16,BOT,CBGT,1,0), BBOATCB_MASK, COM,   { CR, BDA } },
02498 { "bgtla-",  BBOCB(16,BOT,CBGT,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02499 { "bgtla+",  BBOCB(16,BOT,CBGT,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02500 { "bgtla",   BBOCB(16,BOT,CBGT,1,1), BBOATCB_MASK, COM,   { CR, BDA } },
02501 { "beq-",    BBOCB(16,BOT,CBEQ,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02502 { "beq+",    BBOCB(16,BOT,CBEQ,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02503 { "beq",     BBOCB(16,BOT,CBEQ,0,0), BBOATCB_MASK, COM,   { CR, BD } },
02504 { "beql-",   BBOCB(16,BOT,CBEQ,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02505 { "beql+",   BBOCB(16,BOT,CBEQ,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02506 { "beql",    BBOCB(16,BOT,CBEQ,0,1), BBOATCB_MASK, COM,   { CR, BD } },
02507 { "beqa-",   BBOCB(16,BOT,CBEQ,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02508 { "beqa+",   BBOCB(16,BOT,CBEQ,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02509 { "beqa",    BBOCB(16,BOT,CBEQ,1,0), BBOATCB_MASK, COM,   { CR, BDA } },
02510 { "beqla-",  BBOCB(16,BOT,CBEQ,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02511 { "beqla+",  BBOCB(16,BOT,CBEQ,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02512 { "beqla",   BBOCB(16,BOT,CBEQ,1,1), BBOATCB_MASK, COM,   { CR, BDA } },
02513 { "bso-",    BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02514 { "bso+",    BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02515 { "bso",     BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, COM,   { CR, BD } },
02516 { "bsol-",   BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02517 { "bsol+",   BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02518 { "bsol",    BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, COM,   { CR, BD } },
02519 { "bsoa-",   BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02520 { "bsoa+",   BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02521 { "bsoa",    BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, COM,   { CR, BDA } },
02522 { "bsola-",  BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02523 { "bsola+",  BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02524 { "bsola",   BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, COM,   { CR, BDA } },
02525 { "bun-",    BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02526 { "bun+",    BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02527 { "bun",     BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM,  { CR, BD } },
02528 { "bunl-",   BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02529 { "bunl+",   BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02530 { "bunl",    BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM,  { CR, BD } },
02531 { "buna-",   BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02532 { "buna+",   BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02533 { "buna",    BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDA } },
02534 { "bunla-",  BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02535 { "bunla+",  BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02536 { "bunla",   BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDA } },
02537 { "bge-",    BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02538 { "bge+",    BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02539 { "bge",     BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, COM,   { CR, BD } },
02540 { "bgel-",   BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02541 { "bgel+",   BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02542 { "bgel",    BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, COM,   { CR, BD } },
02543 { "bgea-",   BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02544 { "bgea+",   BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02545 { "bgea",    BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, COM,   { CR, BDA } },
02546 { "bgela-",  BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02547 { "bgela+",  BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02548 { "bgela",   BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, COM,   { CR, BDA } },
02549 { "bnl-",    BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02550 { "bnl+",    BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02551 { "bnl",     BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, COM,   { CR, BD } },
02552 { "bnll-",   BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02553 { "bnll+",   BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02554 { "bnll",    BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, COM,   { CR, BD } },
02555 { "bnla-",   BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02556 { "bnla+",   BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02557 { "bnla",    BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, COM,   { CR, BDA } },
02558 { "bnlla-",  BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02559 { "bnlla+",  BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02560 { "bnlla",   BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, COM,   { CR, BDA } },
02561 { "ble-",    BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02562 { "ble+",    BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02563 { "ble",     BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, COM,   { CR, BD } },
02564 { "blel-",   BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02565 { "blel+",   BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02566 { "blel",    BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, COM,   { CR, BD } },
02567 { "blea-",   BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02568 { "blea+",   BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02569 { "blea",    BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, COM,   { CR, BDA } },
02570 { "blela-",  BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02571 { "blela+",  BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02572 { "blela",   BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, COM,   { CR, BDA } },
02573 { "bng-",    BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02574 { "bng+",    BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02575 { "bng",     BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, COM,   { CR, BD } },
02576 { "bngl-",   BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02577 { "bngl+",   BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02578 { "bngl",    BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, COM,   { CR, BD } },
02579 { "bnga-",   BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02580 { "bnga+",   BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02581 { "bnga",    BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, COM,   { CR, BDA } },
02582 { "bngla-",  BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02583 { "bngla+",  BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02584 { "bngla",   BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, COM,   { CR, BDA } },
02585 { "bne-",    BBOCB(16,BOF,CBEQ,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02586 { "bne+",    BBOCB(16,BOF,CBEQ,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02587 { "bne",     BBOCB(16,BOF,CBEQ,0,0), BBOATCB_MASK, COM,   { CR, BD } },
02588 { "bnel-",   BBOCB(16,BOF,CBEQ,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02589 { "bnel+",   BBOCB(16,BOF,CBEQ,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02590 { "bnel",    BBOCB(16,BOF,CBEQ,0,1), BBOATCB_MASK, COM,   { CR, BD } },
02591 { "bnea-",   BBOCB(16,BOF,CBEQ,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02592 { "bnea+",   BBOCB(16,BOF,CBEQ,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02593 { "bnea",    BBOCB(16,BOF,CBEQ,1,0), BBOATCB_MASK, COM,   { CR, BDA } },
02594 { "bnela-",  BBOCB(16,BOF,CBEQ,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02595 { "bnela+",  BBOCB(16,BOF,CBEQ,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02596 { "bnela",   BBOCB(16,BOF,CBEQ,1,1), BBOATCB_MASK, COM,   { CR, BDA } },
02597 { "bns-",    BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02598 { "bns+",    BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02599 { "bns",     BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, COM,   { CR, BD } },
02600 { "bnsl-",   BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02601 { "bnsl+",   BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02602 { "bnsl",    BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, COM,   { CR, BD } },
02603 { "bnsa-",   BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02604 { "bnsa+",   BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02605 { "bnsa",    BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, COM,   { CR, BDA } },
02606 { "bnsla-",  BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02607 { "bnsla+",  BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02608 { "bnsla",   BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, COM,   { CR, BDA } },
02609 { "bnu-",    BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02610 { "bnu+",    BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02611 { "bnu",     BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM,  { CR, BD } },
02612 { "bnul-",   BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDM } },
02613 { "bnul+",   BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM,  { CR, BDP } },
02614 { "bnul",    BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM,  { CR, BD } },
02615 { "bnua-",   BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02616 { "bnua+",   BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02617 { "bnua",    BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM,  { CR, BDA } },
02618 { "bnula-",  BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDMA } },
02619 { "bnula+",  BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDPA } },
02620 { "bnula",   BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM,  { CR, BDA } },
02621 { "bdnzt-",  BBO(16,BODNZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
02622 { "bdnzt+",  BBO(16,BODNZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
02623 { "bdnzt",   BBO(16,BODNZT,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
02624 { "bdnztl-", BBO(16,BODNZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
02625 { "bdnztl+", BBO(16,BODNZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
02626 { "bdnztl",  BBO(16,BODNZT,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
02627 { "bdnzta-", BBO(16,BODNZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
02628 { "bdnzta+", BBO(16,BODNZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
02629 { "bdnzta",  BBO(16,BODNZT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
02630 { "bdnztla-",BBO(16,BODNZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
02631 { "bdnztla+",BBO(16,BODNZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
02632 { "bdnztla", BBO(16,BODNZT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
02633 { "bdnzf-",  BBO(16,BODNZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
02634 { "bdnzf+",  BBO(16,BODNZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
02635 { "bdnzf",   BBO(16,BODNZF,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
02636 { "bdnzfl-", BBO(16,BODNZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
02637 { "bdnzfl+", BBO(16,BODNZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
02638 { "bdnzfl",  BBO(16,BODNZF,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
02639 { "bdnzfa-", BBO(16,BODNZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
02640 { "bdnzfa+", BBO(16,BODNZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
02641 { "bdnzfa",  BBO(16,BODNZF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
02642 { "bdnzfla-",BBO(16,BODNZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
02643 { "bdnzfla+",BBO(16,BODNZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
02644 { "bdnzfla", BBO(16,BODNZF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
02645 { "bt-",     BBO(16,BOT,0,0), BBOAT_MASK, PPCCOM, { BI, BDM } },
02646 { "bt+",     BBO(16,BOT,0,0), BBOAT_MASK, PPCCOM, { BI, BDP } },
02647 { "bt",      BBO(16,BOT,0,0), BBOAT_MASK, PPCCOM, { BI, BD } },
02648 { "bbt",     BBO(16,BOT,0,0), BBOAT_MASK, PWRCOM, { BI, BD } },
02649 { "btl-",    BBO(16,BOT,0,1), BBOAT_MASK, PPCCOM, { BI, BDM } },
02650 { "btl+",    BBO(16,BOT,0,1), BBOAT_MASK, PPCCOM, { BI, BDP } },
02651 { "btl",     BBO(16,BOT,0,1), BBOAT_MASK, PPCCOM, { BI, BD } },
02652 { "bbtl",    BBO(16,BOT,0,1), BBOAT_MASK, PWRCOM, { BI, BD } },
02653 { "bta-",    BBO(16,BOT,1,0), BBOAT_MASK, PPCCOM, { BI, BDMA } },
02654 { "bta+",    BBO(16,BOT,1,0), BBOAT_MASK, PPCCOM, { BI, BDPA } },
02655 { "bta",     BBO(16,BOT,1,0), BBOAT_MASK, PPCCOM, { BI, BDA } },
02656 { "bbta",    BBO(16,BOT,1,0), BBOAT_MASK, PWRCOM, { BI, BDA } },
02657 { "btla-",   BBO(16,BOT,1,1), BBOAT_MASK, PPCCOM, { BI, BDMA } },
02658 { "btla+",   BBO(16,BOT,1,1), BBOAT_MASK, PPCCOM, { BI, BDPA } },
02659 { "btla",    BBO(16,BOT,1,1), BBOAT_MASK, PPCCOM, { BI, BDA } },
02660 { "bbtla",   BBO(16,BOT,1,1), BBOAT_MASK, PWRCOM, { BI, BDA } },
02661 { "bf-",     BBO(16,BOF,0,0), BBOAT_MASK, PPCCOM, { BI, BDM } },
02662 { "bf+",     BBO(16,BOF,0,0), BBOAT_MASK, PPCCOM, { BI, BDP } },
02663 { "bf",      BBO(16,BOF,0,0), BBOAT_MASK, PPCCOM, { BI, BD } },
02664 { "bbf",     BBO(16,BOF,0,0), BBOAT_MASK, PWRCOM, { BI, BD } },
02665 { "bfl-",    BBO(16,BOF,0,1), BBOAT_MASK, PPCCOM, { BI, BDM } },
02666 { "bfl+",    BBO(16,BOF,0,1), BBOAT_MASK, PPCCOM, { BI, BDP } },
02667 { "bfl",     BBO(16,BOF,0,1), BBOAT_MASK, PPCCOM, { BI, BD } },
02668 { "bbfl",    BBO(16,BOF,0,1), BBOAT_MASK, PWRCOM, { BI, BD } },
02669 { "bfa-",    BBO(16,BOF,1,0), BBOAT_MASK, PPCCOM, { BI, BDMA } },
02670 { "bfa+",    BBO(16,BOF,1,0), BBOAT_MASK, PPCCOM, { BI, BDPA } },
02671 { "bfa",     BBO(16,BOF,1,0), BBOAT_MASK, PPCCOM, { BI, BDA } },
02672 { "bbfa",    BBO(16,BOF,1,0), BBOAT_MASK, PWRCOM, { BI, BDA } },
02673 { "bfla-",   BBO(16,BOF,1,1), BBOAT_MASK, PPCCOM, { BI, BDMA } },
02674 { "bfla+",   BBO(16,BOF,1,1), BBOAT_MASK, PPCCOM, { BI, BDPA } },
02675 { "bfla",    BBO(16,BOF,1,1), BBOAT_MASK, PPCCOM, { BI, BDA } },
02676 { "bbfla",   BBO(16,BOF,1,1), BBOAT_MASK, PWRCOM, { BI, BDA } },
02677 { "bdzt-",   BBO(16,BODZT,0,0), BBOY_MASK, NOPOWER4,  { BI, BDM } },
02678 { "bdzt+",   BBO(16,BODZT,0,0), BBOY_MASK, NOPOWER4,  { BI, BDP } },
02679 { "bdzt",    BBO(16,BODZT,0,0), BBOY_MASK, PPCCOM,  { BI, BD } },
02680 { "bdztl-",  BBO(16,BODZT,0,1), BBOY_MASK, NOPOWER4,  { BI, BDM } },
02681 { "bdztl+",  BBO(16,BODZT,0,1), BBOY_MASK, NOPOWER4,  { BI, BDP } },
02682 { "bdztl",   BBO(16,BODZT,0,1), BBOY_MASK, PPCCOM,  { BI, BD } },
02683 { "bdzta-",  BBO(16,BODZT,1,0), BBOY_MASK, NOPOWER4,  { BI, BDMA } },
02684 { "bdzta+",  BBO(16,BODZT,1,0), BBOY_MASK, NOPOWER4,  { BI, BDPA } },
02685 { "bdzta",   BBO(16,BODZT,1,0), BBOY_MASK, PPCCOM,  { BI, BDA } },
02686 { "bdztla-", BBO(16,BODZT,1,1), BBOY_MASK, NOPOWER4,  { BI, BDMA } },
02687 { "bdztla+", BBO(16,BODZT,1,1), BBOY_MASK, NOPOWER4,  { BI, BDPA } },
02688 { "bdztla",  BBO(16,BODZT,1,1), BBOY_MASK, PPCCOM,  { BI, BDA } },
02689 { "bdzf-",   BBO(16,BODZF,0,0), BBOY_MASK, NOPOWER4,  { BI, BDM } },
02690 { "bdzf+",   BBO(16,BODZF,0,0), BBOY_MASK, NOPOWER4,  { BI, BDP } },
02691 { "bdzf",    BBO(16,BODZF,0,0), BBOY_MASK, PPCCOM,  { BI, BD } },
02692 { "bdzfl-",  BBO(16,BODZF,0,1), BBOY_MASK, NOPOWER4,  { BI, BDM } },
02693 { "bdzfl+",  BBO(16,BODZF,0,1), BBOY_MASK, NOPOWER4,  { BI, BDP } },
02694 { "bdzfl",   BBO(16,BODZF,0,1), BBOY_MASK, PPCCOM,  { BI, BD } },
02695 { "bdzfa-",  BBO(16,BODZF,1,0), BBOY_MASK, NOPOWER4,  { BI, BDMA } },
02696 { "bdzfa+",  BBO(16,BODZF,1,0), BBOY_MASK, NOPOWER4,  { BI, BDPA } },
02697 { "bdzfa",   BBO(16,BODZF,1,0), BBOY_MASK, PPCCOM,  { BI, BDA } },
02698 { "bdzfla-", BBO(16,BODZF,1,1), BBOY_MASK, NOPOWER4,  { BI, BDMA } },
02699 { "bdzfla+", BBO(16,BODZF,1,1), BBOY_MASK, NOPOWER4,  { BI, BDPA } },
02700 { "bdzfla",  BBO(16,BODZF,1,1), BBOY_MASK, PPCCOM,  { BI, BDA } },
02701 { "bc-",     B(16,0,0), B_MASK,   PPCCOM,   { BOE, BI, BDM } },
02702 { "bc+",     B(16,0,0), B_MASK,   PPCCOM,   { BOE, BI, BDP } },
02703 { "bc",      B(16,0,0), B_MASK,   COM,    { BO, BI, BD } },
02704 { "bcl-",    B(16,0,1), B_MASK,   PPCCOM,   { BOE, BI, BDM } },
02705 { "bcl+",    B(16,0,1), B_MASK,   PPCCOM,   { BOE, BI, BDP } },
02706 { "bcl",     B(16,0,1), B_MASK,   COM,    { BO, BI, BD } },
02707 { "bca-",    B(16,1,0), B_MASK,   PPCCOM,   { BOE, BI, BDMA } },
02708 { "bca+",    B(16,1,0), B_MASK,   PPCCOM,   { BOE, BI, BDPA } },
02709 { "bca",     B(16,1,0), B_MASK,   COM,    { BO, BI, BDA } },
02710 { "bcla-",   B(16,1,1), B_MASK,   PPCCOM,   { BOE, BI, BDMA } },
02711 { "bcla+",   B(16,1,1), B_MASK,   PPCCOM,   { BOE, BI, BDPA } },
02712 { "bcla",    B(16,1,1), B_MASK,   COM,    { BO, BI, BDA } },
02713 
02714 { "sc",      SC(17,1,0), 0xffffffff,  PPC,    { 0 } },
02715 { "svc",     SC(17,0,0), SC_MASK, POWER,    { LEV, FL1, FL2 } },
02716 { "svcl",    SC(17,0,1), SC_MASK, POWER,    { LEV, FL1, FL2 } },
02717 { "svca",    SC(17,1,0), SC_MASK, PWRCOM,   { SV } },
02718 { "svcla",   SC(17,1,1), SC_MASK, POWER,    { SV } },
02719 
02720 { "b",       B(18,0,0), B_MASK,   COM,    { LI } },
02721 { "bl",      B(18,0,1), B_MASK,   COM,    { LI } },
02722 { "ba",      B(18,1,0), B_MASK,   COM,    { LIA } },
02723 { "bla",     B(18,1,1), B_MASK,   COM,    { LIA } },
02724 
02725 { "mcrf",    XL(19,0),  XLBB_MASK|(3 << 21)|(3 << 16), COM, { BF, BFA } },
02726 
02727 { "blr",     XLO(19,BOU,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
02728 { "br",      XLO(19,BOU,16,0), XLBOBIBB_MASK, PWRCOM, { 0 } },
02729 { "blrl",    XLO(19,BOU,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
02730 { "brl",     XLO(19,BOU,16,1), XLBOBIBB_MASK, PWRCOM, { 0 } },
02731 { "bdnzlr",  XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
02732 { "bdnzlr-", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
02733 { "bdnzlr-", XLO(19,BODNZM4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
02734 { "bdnzlr+", XLO(19,BODNZP,16,0), XLBOBIBB_MASK, NOPOWER4,  { 0 } },
02735 { "bdnzlr+", XLO(19,BODNZP4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
02736 { "bdnzlrl", XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
02737 { "bdnzlrl-",XLO(19,BODNZ,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
02738 { "bdnzlrl-",XLO(19,BODNZM4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
02739 { "bdnzlrl+",XLO(19,BODNZP,16,1), XLBOBIBB_MASK, NOPOWER4,  { 0 } },
02740 { "bdnzlrl+",XLO(19,BODNZP4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
02741 { "bdzlr",   XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPCCOM,  { 0 } },
02742 { "bdzlr-",  XLO(19,BODZ,16,0), XLBOBIBB_MASK, NOPOWER4,  { 0 } },
02743 { "bdzlr-",  XLO(19,BODZM4,16,0), XLBOBIBB_MASK, POWER4,  { 0 } },
02744 { "bdzlr+",  XLO(19,BODZP,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
02745 { "bdzlr+",  XLO(19,BODZP4,16,0), XLBOBIBB_MASK, POWER4,  { 0 } },
02746 { "bdzlrl",  XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPCCOM,  { 0 } },
02747 { "bdzlrl-", XLO(19,BODZ,16,1), XLBOBIBB_MASK, NOPOWER4,  { 0 } },
02748 { "bdzlrl-", XLO(19,BODZM4,16,1), XLBOBIBB_MASK, POWER4,  { 0 } },
02749 { "bdzlrl+", XLO(19,BODZP,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
02750 { "bdzlrl+", XLO(19,BODZP4,16,1), XLBOBIBB_MASK, POWER4,  { 0 } },
02751 { "bltlr",   XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
02752 { "bltlr-",  XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02753 { "bltlr-",  XLOCB(19,BOTM4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02754 { "bltlr+",  XLOCB(19,BOTP,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02755 { "bltlr+",  XLOCB(19,BOTP4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02756 { "bltr",    XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
02757 { "bltlrl",  XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
02758 { "bltlrl-", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02759 { "bltlrl-", XLOCB(19,BOTM4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02760 { "bltlrl+", XLOCB(19,BOTP,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02761 { "bltlrl+", XLOCB(19,BOTP4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02762 { "bltrl",   XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
02763 { "bgtlr",   XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
02764 { "bgtlr-",  XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02765 { "bgtlr-",  XLOCB(19,BOTM4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02766 { "bgtlr+",  XLOCB(19,BOTP,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02767 { "bgtlr+",  XLOCB(19,BOTP4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02768 { "bgtr",    XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
02769 { "bgtlrl",  XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
02770 { "bgtlrl-", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02771 { "bgtlrl-", XLOCB(19,BOTM4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02772 { "bgtlrl+", XLOCB(19,BOTP,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02773 { "bgtlrl+", XLOCB(19,BOTP4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02774 { "bgtrl",   XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
02775 { "beqlr",   XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
02776 { "beqlr-",  XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02777 { "beqlr-",  XLOCB(19,BOTM4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02778 { "beqlr+",  XLOCB(19,BOTP,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02779 { "beqlr+",  XLOCB(19,BOTP4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02780 { "beqr",    XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
02781 { "beqlrl",  XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
02782 { "beqlrl-", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02783 { "beqlrl-", XLOCB(19,BOTM4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02784 { "beqlrl+", XLOCB(19,BOTP,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02785 { "beqlrl+", XLOCB(19,BOTP4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02786 { "beqrl",   XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
02787 { "bsolr",   XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
02788 { "bsolr-",  XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02789 { "bsolr-",  XLOCB(19,BOTM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02790 { "bsolr+",  XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02791 { "bsolr+",  XLOCB(19,BOTP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02792 { "bsor",    XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
02793 { "bsolrl",  XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
02794 { "bsolrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02795 { "bsolrl-", XLOCB(19,BOTM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02796 { "bsolrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02797 { "bsolrl+", XLOCB(19,BOTP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02798 { "bsorl",   XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
02799 { "bunlr",   XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
02800 { "bunlr-",  XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02801 { "bunlr-",  XLOCB(19,BOTM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02802 { "bunlr+",  XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02803 { "bunlr+",  XLOCB(19,BOTP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02804 { "bunlrl",  XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
02805 { "bunlrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02806 { "bunlrl-", XLOCB(19,BOTM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02807 { "bunlrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02808 { "bunlrl+", XLOCB(19,BOTP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02809 { "bgelr",   XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
02810 { "bgelr-",  XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02811 { "bgelr-",  XLOCB(19,BOFM4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02812 { "bgelr+",  XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02813 { "bgelr+",  XLOCB(19,BOFP4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02814 { "bger",    XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
02815 { "bgelrl",  XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
02816 { "bgelrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02817 { "bgelrl-", XLOCB(19,BOFM4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02818 { "bgelrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02819 { "bgelrl+", XLOCB(19,BOFP4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02820 { "bgerl",   XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
02821 { "bnllr",   XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
02822 { "bnllr-",  XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02823 { "bnllr-",  XLOCB(19,BOFM4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02824 { "bnllr+",  XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02825 { "bnllr+",  XLOCB(19,BOFP4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02826 { "bnlr",    XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
02827 { "bnllrl",  XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
02828 { "bnllrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02829 { "bnllrl-", XLOCB(19,BOFM4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02830 { "bnllrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02831 { "bnllrl+", XLOCB(19,BOFP4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02832 { "bnlrl",   XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
02833 { "blelr",   XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
02834 { "blelr-",  XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02835 { "blelr-",  XLOCB(19,BOFM4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02836 { "blelr+",  XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02837 { "blelr+",  XLOCB(19,BOFP4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02838 { "bler",    XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
02839 { "blelrl",  XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
02840 { "blelrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02841 { "blelrl-", XLOCB(19,BOFM4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02842 { "blelrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02843 { "blelrl+", XLOCB(19,BOFP4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02844 { "blerl",   XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
02845 { "bnglr",   XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
02846 { "bnglr-",  XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02847 { "bnglr-",  XLOCB(19,BOFM4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02848 { "bnglr+",  XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02849 { "bnglr+",  XLOCB(19,BOFP4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02850 { "bngr",    XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
02851 { "bnglrl",  XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
02852 { "bnglrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02853 { "bnglrl-", XLOCB(19,BOFM4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02854 { "bnglrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02855 { "bnglrl+", XLOCB(19,BOFP4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02856 { "bngrl",   XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
02857 { "bnelr",   XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
02858 { "bnelr-",  XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02859 { "bnelr-",  XLOCB(19,BOFM4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02860 { "bnelr+",  XLOCB(19,BOFP,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02861 { "bnelr+",  XLOCB(19,BOFP4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02862 { "bner",    XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
02863 { "bnelrl",  XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
02864 { "bnelrl-", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02865 { "bnelrl-", XLOCB(19,BOFM4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02866 { "bnelrl+", XLOCB(19,BOFP,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02867 { "bnelrl+", XLOCB(19,BOFP4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02868 { "bnerl",   XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
02869 { "bnslr",   XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
02870 { "bnslr-",  XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02871 { "bnslr-",  XLOCB(19,BOFM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02872 { "bnslr+",  XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02873 { "bnslr+",  XLOCB(19,BOFP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02874 { "bnsr",    XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
02875 { "bnslrl",  XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
02876 { "bnslrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02877 { "bnslrl-", XLOCB(19,BOFM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02878 { "bnslrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02879 { "bnslrl+", XLOCB(19,BOFP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02880 { "bnsrl",   XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
02881 { "bnulr",   XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
02882 { "bnulr-",  XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02883 { "bnulr-",  XLOCB(19,BOFM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02884 { "bnulr+",  XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02885 { "bnulr+",  XLOCB(19,BOFP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
02886 { "bnulrl",  XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
02887 { "bnulrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02888 { "bnulrl-", XLOCB(19,BOFM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02889 { "bnulrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02890 { "bnulrl+", XLOCB(19,BOFP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
02891 { "btlr",    XLO(19,BOT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
02892 { "btlr-",   XLO(19,BOT,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
02893 { "btlr-",   XLO(19,BOTM4,16,0), XLBOBB_MASK, POWER4, { BI } },
02894 { "btlr+",   XLO(19,BOTP,16,0), XLBOBB_MASK, NOPOWER4,  { BI } },
02895 { "btlr+",   XLO(19,BOTP4,16,0), XLBOBB_MASK, POWER4, { BI } },
02896 { "bbtr",    XLO(19,BOT,16,0), XLBOBB_MASK, PWRCOM, { BI } },
02897 { "btlrl",   XLO(19,BOT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
02898 { "btlrl-",  XLO(19,BOT,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
02899 { "btlrl-",  XLO(19,BOTM4,16,1), XLBOBB_MASK, POWER4, { BI } },
02900 { "btlrl+",  XLO(19,BOTP,16,1), XLBOBB_MASK, NOPOWER4,  { BI } },
02901 { "btlrl+",  XLO(19,BOTP4,16,1), XLBOBB_MASK, POWER4, { BI } },
02902 { "bbtrl",   XLO(19,BOT,16,1), XLBOBB_MASK, PWRCOM, { BI } },
02903 { "bflr",    XLO(19,BOF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
02904 { "bflr-",   XLO(19,BOF,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
02905 { "bflr-",   XLO(19,BOFM4,16,0), XLBOBB_MASK, POWER4, { BI } },
02906 { "bflr+",   XLO(19,BOFP,16,0), XLBOBB_MASK, NOPOWER4,  { BI } },
02907 { "bflr+",   XLO(19,BOFP4,16,0), XLBOBB_MASK, POWER4, { BI } },
02908 { "bbfr",    XLO(19,BOF,16,0), XLBOBB_MASK, PWRCOM, { BI } },
02909 { "bflrl",   XLO(19,BOF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
02910 { "bflrl-",  XLO(19,BOF,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
02911 { "bflrl-",  XLO(19,BOFM4,16,1), XLBOBB_MASK, POWER4, { BI } },
02912 { "bflrl+",  XLO(19,BOFP,16,1), XLBOBB_MASK, NOPOWER4,  { BI } },
02913 { "bflrl+",  XLO(19,BOFP4,16,1), XLBOBB_MASK, POWER4, { BI } },
02914 { "bbfrl",   XLO(19,BOF,16,1), XLBOBB_MASK, PWRCOM, { BI } },
02915 { "bdnztlr", XLO(19,BODNZT,16,0), XLBOBB_MASK, PPCCOM,  { BI } },
02916 { "bdnztlr-",XLO(19,BODNZT,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
02917 { "bdnztlr+",XLO(19,BODNZTP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
02918 { "bdnztlrl",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPCCOM,  { BI } },
02919 { "bdnztlrl-",XLO(19,BODNZT,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
02920 { "bdnztlrl+",XLO(19,BODNZTP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
02921 { "bdnzflr", XLO(19,BODNZF,16,0), XLBOBB_MASK, PPCCOM,  { BI } },
02922 { "bdnzflr-",XLO(19,BODNZF,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
02923 { "bdnzflr+",XLO(19,BODNZFP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
02924 { "bdnzflrl",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPCCOM,  { BI } },
02925 { "bdnzflrl-",XLO(19,BODNZF,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
02926 { "bdnzflrl+",XLO(19,BODNZFP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
02927 { "bdztlr",  XLO(19,BODZT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
02928 { "bdztlr-", XLO(19,BODZT,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
02929 { "bdztlr+", XLO(19,BODZTP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
02930 { "bdztlrl", XLO(19,BODZT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
02931 { "bdztlrl-",XLO(19,BODZT,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
02932 { "bdztlrl+",XLO(19,BODZTP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
02933 { "bdzflr",  XLO(19,BODZF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
02934 { "bdzflr-", XLO(19,BODZF,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
02935 { "bdzflr+", XLO(19,BODZFP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
02936 { "bdzflrl", XLO(19,BODZF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
02937 { "bdzflrl-",XLO(19,BODZF,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
02938 { "bdzflrl+",XLO(19,BODZFP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
02939 { "bclr+",   XLYLK(19,16,1,0), XLYBB_MASK, PPCCOM,  { BOE, BI } },
02940 { "bclrl+",  XLYLK(19,16,1,1), XLYBB_MASK, PPCCOM,  { BOE, BI } },
02941 { "bclr-",   XLYLK(19,16,0,0), XLYBB_MASK, PPCCOM,  { BOE, BI } },
02942 { "bclrl-",  XLYLK(19,16,0,1), XLYBB_MASK, PPCCOM,  { BOE, BI } },
02943 { "bclr",    XLLK(19,16,0), XLBH_MASK,  PPCCOM,   { BO, BI, BH } },
02944 { "bclrl",   XLLK(19,16,1), XLBH_MASK,  PPCCOM,   { BO, BI, BH } },
02945 { "bcr",     XLLK(19,16,0), XLBB_MASK,  PWRCOM,   { BO, BI } },
02946 { "bcrl",    XLLK(19,16,1), XLBB_MASK,  PWRCOM,   { BO, BI } },
02947 { "bclre",   XLLK(19,17,0), XLBB_MASK,  BOOKE64,  { BO, BI } },
02948 { "bclrel",  XLLK(19,17,1), XLBB_MASK,  BOOKE64,  { BO, BI } },
02949 
02950 { "rfid",    XL(19,18), 0xffffffff, PPC64,    { 0 } },
02951 
02952 { "crnot",   XL(19,33), XL_MASK,  PPCCOM,   { BT, BA, BBA } },
02953 { "crnor",   XL(19,33), XL_MASK,  COM,    { BT, BA, BB } },
02954 { "rfmci",    X(19,38), 0xffffffff, PPCRFMCI, { 0 } },
02955 
02956 { "rfi",     XL(19,50), 0xffffffff, COM,    { 0 } },
02957 { "rfci",    XL(19,51), 0xffffffff, PPC403 | BOOKE, { 0 } },
02958 
02959 { "rfsvc",   XL(19,82), 0xffffffff, POWER,    { 0 } },
02960 
02961 { "crandc",  XL(19,129), XL_MASK, COM,    { BT, BA, BB } },
02962 
02963 { "isync",   XL(19,150), 0xffffffff,  PPCCOM,   { 0 } },
02964 { "ics",     XL(19,150), 0xffffffff,  PWRCOM,   { 0 } },
02965 
02966 { "crclr",   XL(19,193), XL_MASK, PPCCOM,   { BT, BAT, BBA } },
02967 { "crxor",   XL(19,193), XL_MASK, COM,    { BT, BA, BB } },
02968 
02969 { "crnand",  XL(19,225), XL_MASK, COM,    { BT, BA, BB } },
02970 
02971 { "crand",   XL(19,257), XL_MASK, COM,    { BT, BA, BB } },
02972 
02973 { "crset",   XL(19,289), XL_MASK, PPCCOM,   { BT, BAT, BBA } },
02974 { "creqv",   XL(19,289), XL_MASK, COM,    { BT, BA, BB } },
02975 
02976 { "crorc",   XL(19,417), XL_MASK, COM,    { BT, BA, BB } },
02977 
02978 { "crmove",  XL(19,449), XL_MASK, PPCCOM,   { BT, BA, BBA } },
02979 { "cror",    XL(19,449), XL_MASK, COM,    { BT, BA, BB } },
02980 
02981 { "bctr",    XLO(19,BOU,528,0), XLBOBIBB_MASK, COM, { 0 } },
02982 { "bctrl",   XLO(19,BOU,528,1), XLBOBIBB_MASK, COM, { 0 } },
02983 { "bltctr",  XLOCB(19,BOT,CBLT,528,0),  XLBOCBBB_MASK, PPCCOM,  { CR } },
02984 { "bltctr-", XLOCB(19,BOT,CBLT,528,0),  XLBOCBBB_MASK, NOPOWER4, { CR } },
02985 { "bltctr-", XLOCB(19,BOTM4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
02986 { "bltctr+", XLOCB(19,BOTP,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02987 { "bltctr+", XLOCB(19,BOTP4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
02988 { "bltctrl", XLOCB(19,BOT,CBLT,528,1),  XLBOCBBB_MASK, PPCCOM,  { CR } },
02989 { "bltctrl-",XLOCB(19,BOT,CBLT,528,1),  XLBOCBBB_MASK, NOPOWER4, { CR } },
02990 { "bltctrl-",XLOCB(19,BOTM4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
02991 { "bltctrl+",XLOCB(19,BOTP,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
02992 { "bltctrl+",XLOCB(19,BOTP4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
02993 { "bgtctr",  XLOCB(19,BOT,CBGT,528,0),  XLBOCBBB_MASK, PPCCOM,  { CR } },
02994 { "bgtctr-", XLOCB(19,BOT,CBGT,528,0),  XLBOCBBB_MASK, NOPOWER4, { CR } },
02995 { "bgtctr-", XLOCB(19,BOTM4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
02996 { "bgtctr+", XLOCB(19,BOTP,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
02997 { "bgtctr+", XLOCB(19,BOTP4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
02998 { "bgtctrl", XLOCB(19,BOT,CBGT,528,1),  XLBOCBBB_MASK, PPCCOM,  { CR } },
02999 { "bgtctrl-",XLOCB(19,BOT,CBGT,528,1),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03000 { "bgtctrl-",XLOCB(19,BOTM4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03001 { "bgtctrl+",XLOCB(19,BOTP,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
03002 { "bgtctrl+",XLOCB(19,BOTP4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03003 { "beqctr",  XLOCB(19,BOT,CBEQ,528,0),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03004 { "beqctr-", XLOCB(19,BOT,CBEQ,528,0),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03005 { "beqctr-", XLOCB(19,BOTM4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03006 { "beqctr+", XLOCB(19,BOTP,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
03007 { "beqctr+", XLOCB(19,BOTP4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03008 { "beqctrl", XLOCB(19,BOT,CBEQ,528,1),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03009 { "beqctrl-",XLOCB(19,BOT,CBEQ,528,1),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03010 { "beqctrl-",XLOCB(19,BOTM4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03011 { "beqctrl+",XLOCB(19,BOTP,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
03012 { "beqctrl+",XLOCB(19,BOTP4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03013 { "bsoctr",  XLOCB(19,BOT,CBSO,528,0),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03014 { "bsoctr-", XLOCB(19,BOT,CBSO,528,0),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03015 { "bsoctr-", XLOCB(19,BOTM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03016 { "bsoctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
03017 { "bsoctr+", XLOCB(19,BOTP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03018 { "bsoctrl", XLOCB(19,BOT,CBSO,528,1),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03019 { "bsoctrl-",XLOCB(19,BOT,CBSO,528,1),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03020 { "bsoctrl-",XLOCB(19,BOTM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03021 { "bsoctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
03022 { "bsoctrl+",XLOCB(19,BOTP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03023 { "bunctr",  XLOCB(19,BOT,CBSO,528,0),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03024 { "bunctr-", XLOCB(19,BOT,CBSO,528,0),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03025 { "bunctr-", XLOCB(19,BOTM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03026 { "bunctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
03027 { "bunctr+", XLOCB(19,BOTP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03028 { "bunctrl", XLOCB(19,BOT,CBSO,528,1),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03029 { "bunctrl-",XLOCB(19,BOT,CBSO,528,1),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03030 { "bunctrl-",XLOCB(19,BOTM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03031 { "bunctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
03032 { "bunctrl+",XLOCB(19,BOTP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03033 { "bgectr",  XLOCB(19,BOF,CBLT,528,0),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03034 { "bgectr-", XLOCB(19,BOF,CBLT,528,0),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03035 { "bgectr-", XLOCB(19,BOFM4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03036 { "bgectr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
03037 { "bgectr+", XLOCB(19,BOFP4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03038 { "bgectrl", XLOCB(19,BOF,CBLT,528,1),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03039 { "bgectrl-",XLOCB(19,BOF,CBLT,528,1),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03040 { "bgectrl-",XLOCB(19,BOFM4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03041 { "bgectrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
03042 { "bgectrl+",XLOCB(19,BOFP4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03043 { "bnlctr",  XLOCB(19,BOF,CBLT,528,0),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03044 { "bnlctr-", XLOCB(19,BOF,CBLT,528,0),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03045 { "bnlctr-", XLOCB(19,BOFM4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03046 { "bnlctr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
03047 { "bnlctr+", XLOCB(19,BOFP4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03048 { "bnlctrl", XLOCB(19,BOF,CBLT,528,1),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03049 { "bnlctrl-",XLOCB(19,BOF,CBLT,528,1),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03050 { "bnlctrl-",XLOCB(19,BOFM4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03051 { "bnlctrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
03052 { "bnlctrl+",XLOCB(19,BOFP4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03053 { "blectr",  XLOCB(19,BOF,CBGT,528,0),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03054 { "blectr-", XLOCB(19,BOF,CBGT,528,0),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03055 { "blectr-", XLOCB(19,BOFM4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03056 { "blectr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
03057 { "blectr+", XLOCB(19,BOFP4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03058 { "blectrl", XLOCB(19,BOF,CBGT,528,1),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03059 { "blectrl-",XLOCB(19,BOF,CBGT,528,1),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03060 { "blectrl-",XLOCB(19,BOFM4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03061 { "blectrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
03062 { "blectrl+",XLOCB(19,BOFP4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03063 { "bngctr",  XLOCB(19,BOF,CBGT,528,0),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03064 { "bngctr-", XLOCB(19,BOF,CBGT,528,0),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03065 { "bngctr-", XLOCB(19,BOFM4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03066 { "bngctr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
03067 { "bngctr+", XLOCB(19,BOFP4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03068 { "bngctrl", XLOCB(19,BOF,CBGT,528,1),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03069 { "bngctrl-",XLOCB(19,BOF,CBGT,528,1),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03070 { "bngctrl-",XLOCB(19,BOFM4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03071 { "bngctrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
03072 { "bngctrl+",XLOCB(19,BOFP4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03073 { "bnectr",  XLOCB(19,BOF,CBEQ,528,0),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03074 { "bnectr-", XLOCB(19,BOF,CBEQ,528,0),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03075 { "bnectr-", XLOCB(19,BOFM4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03076 { "bnectr+", XLOCB(19,BOFP,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
03077 { "bnectr+", XLOCB(19,BOFP4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03078 { "bnectrl", XLOCB(19,BOF,CBEQ,528,1),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03079 { "bnectrl-",XLOCB(19,BOF,CBEQ,528,1),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03080 { "bnectrl-",XLOCB(19,BOFM4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03081 { "bnectrl+",XLOCB(19,BOFP,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
03082 { "bnectrl+",XLOCB(19,BOFP4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03083 { "bnsctr",  XLOCB(19,BOF,CBSO,528,0),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03084 { "bnsctr-", XLOCB(19,BOF,CBSO,528,0),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03085 { "bnsctr-", XLOCB(19,BOFM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03086 { "bnsctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
03087 { "bnsctr+", XLOCB(19,BOFP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
03088 { "bnsctrl", XLOCB(19,BOF,CBSO,528,1),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03089 { "bnsctrl-",XLOCB(19,BOF,CBSO,528,1),  XLBOCBBB_MASK, NOPOWER4, { CR } },
03090 { "bnsctrl-",XLOCB(19,BOFM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03091 { "bnsctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
03092 { "bnsctrl+",XLOCB(19,BOFP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
03093 { "bnuctr",  XLOCB(19,BOF,CBSO,528,0),  XLBOCBBB_MASK, PPCCOM,  { CR } },
03094 { "bnuctr-",